Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java |
index 459c7575a042d420d9375cd0165a70d493667e8d..669b4f53ac4ca92e6603da2f09b3cdb5c4493ad9 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java |
@@ -4,13 +4,14 @@ |
package org.chromium.chrome.browser.customtabs; |
+import android.app.Activity; |
+import android.content.Context; |
import android.content.Intent; |
import android.content.pm.ResolveInfo; |
import android.os.TransactionTooLargeException; |
import org.chromium.base.Log; |
import org.chromium.base.VisibleForTesting; |
-import org.chromium.chrome.browser.ChromeActivity; |
import org.chromium.chrome.browser.banners.AppBannerManager; |
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator; |
import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; |
@@ -39,8 +40,8 @@ public class CustomTabDelegateFactory extends TabDelegateFactory { |
/** |
* Constructs a new instance of {@link CustomTabNavigationDelegate}. |
*/ |
- public CustomTabNavigationDelegate(ChromeActivity activity, String clientPackageName) { |
- super(activity); |
+ public CustomTabNavigationDelegate(Tab tab, String clientPackageName) { |
+ super(tab); |
mClientPackageName = clientPackageName; |
} |
@@ -57,17 +58,21 @@ public class CustomTabDelegateFactory extends TabDelegateFactory { |
try { |
// For a URL chrome can handle and there is no default set, handle it ourselves. |
if (!hasDefaultHandler) { |
- if (isPackageSpecializedHandler(getActivity(), mClientPackageName, intent)) { |
+ if (isPackageSpecializedHandler( |
+ mApplicationContext, mClientPackageName, intent)) { |
intent.setPackage(mClientPackageName); |
} else if (!isExternalProtocol) { |
return false; |
} |
} |
// If android fails to find a handler, handle it ourselves. |
- if (!getActivity().startActivityIfNeeded(intent, -1)) return false; |
- |
- mHasActivityStarted = true; |
- return true; |
+ Context context = getAvailableContext(); |
+ if (context instanceof Activity |
+ && ((Activity) context).startActivityIfNeeded(intent, -1)) { |
+ mHasActivityStarted = true; |
+ return true; |
+ } |
+ return false; |
} catch (RuntimeException e) { |
logTransactionTooLargeOrRethrow(e, intent); |
return false; |
@@ -81,9 +86,10 @@ public class CustomTabDelegateFactory extends TabDelegateFactory { |
*/ |
private boolean hasDefaultHandler(Intent intent) { |
try { |
- ResolveInfo info = getActivity().getPackageManager().resolveActivity(intent, 0); |
+ ResolveInfo info = |
+ mApplicationContext.getPackageManager().resolveActivity(intent, 0); |
if (info != null) { |
- final String chromePackage = getActivity().getPackageName(); |
+ final String chromePackage = mApplicationContext.getPackageName(); |
// If a default handler is found and it is not chrome itself, fire the intent. |
if (info.match != 0 && !chromePackage.equals(info.activityInfo.packageName)) { |
return true; |
@@ -141,11 +147,10 @@ public class CustomTabDelegateFactory extends TabDelegateFactory { |
} |
@Override |
- public InterceptNavigationDelegateImpl createInterceptNavigationDelegate(Tab tab, |
- ChromeActivity activity) { |
- mNavigationDelegate = new CustomTabNavigationDelegate(activity, tab.getAppAssociatedWith()); |
+ public InterceptNavigationDelegateImpl createInterceptNavigationDelegate(Tab tab) { |
+ mNavigationDelegate = new CustomTabNavigationDelegate(tab, tab.getAppAssociatedWith()); |
mNavigationHandler = new ExternalNavigationHandler(mNavigationDelegate); |
- return new InterceptNavigationDelegateImpl(mNavigationHandler, activity, tab); |
+ return new InterceptNavigationDelegateImpl(mNavigationHandler, tab); |
} |
@Override |