// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.document;
import org.chromium.components.web_contents_delegate_android.WebContentsDelegateAndroid;
import org.chromium.content_public.browser.WebContents;
/**
* Stubs out calls to the WebContentsDelegateAndroid. Attaching a WebContentsDelegateAndroid to a
* newly created WebContents signals to Chrome that it was created properly, which is needed in
* situations where Chrome on Android needs to create the Activity for the WebContents
* asynchronously.
*/
public class DocumentWebContentsDelegate extends WebContentsDelegateAndroid {
/**
* Singleton instance of the WebContentsDelegate. Delegates can be assigned to multiple
* WebContents.
*/
private static DocumentWebContentsDelegate sInstance;
/**
* Native side pointer to the stubbed WebContentsDelegate.
*/
private long mNativePtr;
/**
* @return The Singleton instance, creating it if necessary.
*/
public static DocumentWebContentsDelegate getInstance() {
if (sInstance == null) sInstance = new DocumentWebContentsDelegate();
return sInstance;
}
/**
* Attaches the native side delegate to the native WebContents.
* @param webContents The {@link WebContents} to attach to.
*/
public void attachDelegate(WebContents webContents) {
nativeAttachContents(mNativePtr, webContents);
}
private DocumentWebContentsDelegate() {
mNativePtr = nativeInitialize();
}
private native long nativeInitialize();
private native void nativeAttachContents(
long nativeDocumentWebContentsDelegate, WebContents webContents);
}