Index: chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateImpl.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateImpl.java |
index 3fb4a74185d085ced85bbde53895bac9edfec3b0..2b8c941161185c1abf5aebdf9ef537c28a67fd19 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateImpl.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateImpl.java |
@@ -106,24 +106,9 @@ public class InterceptNavigationDelegateImpl implements InterceptNavigationDeleg |
mTab.getActivity().getLastUserInteractionTime(), getLastCommittedEntryIndex()); |
boolean shouldCloseTab = shouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent(); |
- boolean isInitialTabLaunchInBackground = |
- mTab.getLaunchType() == TabLaunchType.FROM_LONGPRESS_BACKGROUND && shouldCloseTab; |
- // http://crbug.com/448977: If a new tab is closed by this overriding, we should open an |
- // Intent in a new tab when Chrome receives it again. |
- ExternalNavigationParams params = new ExternalNavigationParams.Builder( |
- url, mTab.isIncognito(), navigationParams.referrer, |
- navigationParams.pageTransitionType, |
- navigationParams.isRedirect) |
- .setTab(mTab) |
- .setApplicationMustBeInForeground(true) |
- .setRedirectHandler(tabRedirectHandler) |
- .setOpenInNewTab(shouldCloseTab) |
- .setIsBackgroundTabNavigation(mTab.isHidden() && !isInitialTabLaunchInBackground) |
- .setIsMainFrame(navigationParams.isMainFrame) |
- .setHasUserGesture(navigationParams.hasUserGesture) |
- .setShouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent(shouldCloseTab |
- && navigationParams.isMainFrame) |
- .build(); |
+ ExternalNavigationParams params = buildExternalNavigationParams(navigationParams, |
+ tabRedirectHandler, |
+ shouldCloseTab).build(); |
OverrideUrlLoadingResult result = mExternalNavHandler.shouldOverrideUrlLoading(params); |
mLastOverrideUrlLoadingResult = result; |
@@ -156,6 +141,31 @@ public class InterceptNavigationDelegateImpl implements InterceptNavigationDeleg |
} |
/** |
+ * Returns ExternalNavigationParams.Builder to generate ExternalNavigationParams for |
+ * ExternalNavigationHandler#shouldOverrideUrlLoading(). |
+ */ |
+ public ExternalNavigationParams.Builder buildExternalNavigationParams( |
+ NavigationParams navigationParams, TabRedirectHandler tabRedirectHandler, |
+ boolean shouldCloseTab) { |
+ boolean isInitialTabLaunchInBackground = |
+ mTab.getLaunchType() == TabLaunchType.FROM_LONGPRESS_BACKGROUND && shouldCloseTab; |
+ // http://crbug.com/448977: If a new tab is closed by this overriding, we should open an |
+ // Intent in a new tab when Chrome receives it again. |
+ return new ExternalNavigationParams |
+ .Builder(navigationParams.url, mTab.isIncognito(), navigationParams.referrer, |
+ navigationParams.pageTransitionType, navigationParams.isRedirect) |
+ .setTab(mTab) |
+ .setApplicationMustBeInForeground(true) |
+ .setRedirectHandler(tabRedirectHandler) |
+ .setOpenInNewTab(shouldCloseTab) |
+ .setIsBackgroundTabNavigation(mTab.isHidden() && !isInitialTabLaunchInBackground) |
+ .setIsMainFrame(navigationParams.isMainFrame) |
+ .setHasUserGesture(navigationParams.hasUserGesture) |
+ .setShouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent( |
+ shouldCloseTab && navigationParams.isMainFrame); |
+ } |
+ |
+ /** |
* Updates navigation history if navigation is canceled due to intent handler. We go back to the |
* last committed entry index which was saved before the navigation, and remove the empty |
* entries from the navigation history. See crbug.com/426679 |