Index: chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d01e1fb108e1ea64b378bcff755e394692c44991 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java |
@@ -0,0 +1,56 @@ |
+// Copyright 2016 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.blimp; |
+ |
+import org.chromium.base.annotations.CalledByNative; |
+import org.chromium.chrome.browser.profiles.Profile; |
+ |
+/** |
+ * The ChromeBlimpClientContextDelegate for //chrome which provides the necessary functionality |
+ * required to run Blimp. This is the Java counterparty to the C++ |
+ * ChromeBlimpClientContextDelegateAndroid. |
+ * |
+ * There can only be a single delegate for any given BlimpClientContext. To create one and attach |
+ * it, call {@link ChromeBlimpClientContextDelegate#createAndSetDelegateForContext(Profile)}. |
+ * When the delegate should be deleted, a call to {@link #destroy} is required. |
+ */ |
+public class ChromeBlimpClientContextDelegate { |
+ /** |
+ * Creates a new ChromeBlimpClientContextDelegate that is owned by the caller. It automatically |
+ * attaches itself as the sole delegate for the BlimpClientContext attached to the given |
+ * profile. When the delegate should be deleted, the caller of this method must call |
+ * {@link #destroy()} to ensure that the native counterparts are cleaned up. The call to |
+ * {@link #destroy()} also removes the delegate from the BlimpClientContext by clearing the |
+ * pointer for the delegate by calling BlimpClientContext::SetDelegate(nullptr). |
+ * |
+ * @param profile The profile to use to look for the BlimpClientContext. |
+ * @return The newly created delegate, owned by the caller. |
+ */ |
+ public static ChromeBlimpClientContextDelegate createAndSetDelegateForContext(Profile profile) { |
+ return new ChromeBlimpClientContextDelegate(profile); |
+ } |
+ |
+ /** |
+ * The pointer to the ChromeBlimpClientContextDelegateAndroid JNI bridge. |
+ */ |
+ private long mNativeChromeBlimpClientContextDelegateAndroid; |
+ |
+ private ChromeBlimpClientContextDelegate(Profile profile) { |
+ mNativeChromeBlimpClientContextDelegateAndroid = nativeInit(profile); |
+ } |
+ |
+ @CalledByNative |
+ private void clearNativePtr() { |
+ mNativeChromeBlimpClientContextDelegateAndroid = 0; |
+ } |
+ |
+ public void destroy() { |
+ assert mNativeChromeBlimpClientContextDelegateAndroid != 0; |
+ nativeDestroy(mNativeChromeBlimpClientContextDelegateAndroid); |
+ } |
+ |
+ private native long nativeInit(Profile profile); |
+ private native void nativeDestroy(long nativeChromeBlimpClientContextDelegateAndroid); |
+} |