Index: chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedActivity.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedActivity.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedActivity.java |
index 7a0639e324c62ab3ed6250ea99904692ca3f1640..17df5046d2974fa26a803d7edb32080aa02da11f 100644 |
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedActivity.java |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedActivity.java |
@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.hosted; |
import android.content.Intent; |
import android.net.Uri; |
+import android.text.TextUtils; |
import android.view.MenuItem; |
import android.view.View; |
import android.view.View.OnClickListener; |
@@ -31,12 +32,16 @@ import org.chromium.content_public.browser.LoadUrlParams; |
* The activity for hosted mode. It will be launched on top of a client's task. |
*/ |
public class HostedActivity extends CompositorChromeActivity { |
+ private static HostedContentHandler sActiveContentHandler; |
+ |
private HostedTab mTab; |
private ToolbarHelper mToolbarHelper; |
private HostedAppMenuPropertiesDelegate mAppMenuPropertiesDelegate; |
private AppMenuHandler mAppMenuHandler; |
private FindToolbarManager mFindToolbarManager; |
private HostedIntentDataProvider mIntentDataProvider; |
+ private long mSessionId; |
+ private HostedContentHandler mHostedContentHandler; |
// This is to give the right package name while using the client's resources during an |
// overridePendingTransition call. |
@@ -44,6 +49,33 @@ public class HostedActivity extends CompositorChromeActivity { |
// change the package name. |
private boolean mShouldOverridePackage; |
+ /** |
+ * Sets the currently active {@link HostedContentHandler} in focus. |
+ * @param contentHandler {@link HostedContentHandler} to set. |
+ */ |
+ public static void setActiveContentHandler(HostedContentHandler contentHandler) { |
+ sActiveContentHandler = contentHandler; |
+ } |
+ |
+ /** |
+ * Used to check whether an incoming intent can be handled by the |
+ * current {@link HostedContentHandler}. |
+ * @return Whether the active {@link HostedContentHandler} has handled the intent. |
+ */ |
+ public static boolean shouldActiveContentHandleIntent(Intent intent) { |
+ if (sActiveContentHandler == null) return false; |
+ |
+ long intentSessionId = intent.getLongExtra(HostedIntentDataProvider.EXTRA_HOSTED_SESSION_ID, |
+ HostedIntentDataProvider.INVALID_SESSION_ID); |
+ if (intentSessionId == HostedIntentDataProvider.INVALID_SESSION_ID) return false; |
+ |
+ if (sActiveContentHandler.getSessionId() != intentSessionId) return false; |
+ String url = IntentHandler.getUrlFromIntent(intent); |
+ if (TextUtils.isEmpty(url)) return false; |
+ sActiveContentHandler.loadUrl(new LoadUrlParams(url)); |
+ return true; |
+ } |
+ |
@Override |
public void preInflationStartup() { |
super.preInflationStartup(); |
@@ -87,8 +119,8 @@ public class HostedActivity extends CompositorChromeActivity { |
@Override |
public void finishNativeInitialization() { |
String url = IntentHandler.getUrlFromIntent(getIntent()); |
- long sessionId = mIntentDataProvider.getSessionId(); |
- mTab = new HostedTab(this, getWindowAndroid(), sessionId, url, Tab.INVALID_TAB_ID); |
+ mSessionId = mIntentDataProvider.getSessionId(); |
+ mTab = new HostedTab(this, getWindowAndroid(), mSessionId, url, Tab.INVALID_TAB_ID); |
getTabModelSelector().setTab(mTab); |
ToolbarControlContainer controlContainer = (ToolbarControlContainer) findViewById( |
@@ -110,10 +142,33 @@ public class HostedActivity extends CompositorChromeActivity { |
mTab.setFullscreenManager(getFullscreenManager()); |
mTab.loadUrl(new LoadUrlParams(url)); |
+ mHostedContentHandler = new HostedContentHandler() { |
+ @Override |
+ public void loadUrl(LoadUrlParams params) { |
+ mTab.loadUrl(params); |
+ } |
+ |
+ @Override |
+ public long getSessionId() { |
+ return mSessionId; |
+ } |
+ }; |
super.finishNativeInitialization(); |
} |
@Override |
+ public void onStartWithNative() { |
+ super.onStartWithNative(); |
+ setActiveContentHandler(mHostedContentHandler); |
+ } |
+ |
+ @Override |
+ public void onStopWithNative() { |
+ super.onStopWithNative(); |
+ setActiveContentHandler(null); |
+ } |
+ |
+ @Override |
protected void onDeferredStartup() { |
super.onDeferredStartup(); |
mToolbarHelper.onDeferredStartup(); |