| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.tab; | 5 package org.chromium.chrome.browser.tab; |
| 6 | 6 |
| 7 import org.chromium.base.VisibleForTesting; | 7 import org.chromium.base.VisibleForTesting; |
| 8 import org.chromium.chrome.R; | 8 import org.chromium.chrome.R; |
| 9 import org.chromium.chrome.browser.ChromeActivity; | 9 import org.chromium.chrome.browser.ChromeActivity; |
| 10 import org.chromium.chrome.browser.ChromeApplication; | 10 import org.chromium.chrome.browser.ChromeApplication; |
| 11 import org.chromium.chrome.browser.datausage.DataUseTabUIManager; |
| 11 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler; | 12 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler; |
| 12 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.Overrid
eUrlLoadingResult; | 13 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.Overrid
eUrlLoadingResult; |
| 13 import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; | 14 import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; |
| 14 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; | 15 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
| 15 import org.chromium.components.navigation_interception.InterceptNavigationDelega
te; | 16 import org.chromium.components.navigation_interception.InterceptNavigationDelega
te; |
| 16 import org.chromium.components.navigation_interception.NavigationParams; | 17 import org.chromium.components.navigation_interception.NavigationParams; |
| 17 import org.chromium.content_public.browser.NavigationController; | 18 import org.chromium.content_public.browser.NavigationController; |
| 18 import org.chromium.content_public.browser.WebContents; | 19 import org.chromium.content_public.browser.WebContents; |
| 19 import org.chromium.content_public.common.ConsoleMessageLevel; | 20 import org.chromium.content_public.common.ConsoleMessageLevel; |
| 20 | 21 |
| 21 /** | 22 /** |
| 22 * Class that controls navigations and allows to intercept them. It is used on A
ndroid to 'convert' | 23 * Class that controls navigations and allows to intercept them. It is used on A
ndroid to 'convert' |
| 23 * certain navigations to Intents to 3rd party applications. | 24 * certain navigations to Intents to 3rd party applications and to "pause" navig
ations when data use |
| 25 * tracking has ended. |
| 24 */ | 26 */ |
| 25 public class InterceptNavigationDelegateImpl implements InterceptNavigationDeleg
ate { | 27 public class InterceptNavigationDelegateImpl implements InterceptNavigationDeleg
ate { |
| 26 private final ChromeActivity mActivity; | 28 private final ChromeActivity mActivity; |
| 27 private final Tab mTab; | 29 private final Tab mTab; |
| 28 private final ExternalNavigationHandler mExternalNavHandler; | 30 private final ExternalNavigationHandler mExternalNavHandler; |
| 29 private final AuthenticatorNavigationInterceptor mAuthenticatorHelper; | 31 private final AuthenticatorNavigationInterceptor mAuthenticatorHelper; |
| 30 private ExternalNavigationHandler.OverrideUrlLoadingResult mLastOverrideUrlL
oadingResult = | 32 private ExternalNavigationHandler.OverrideUrlLoadingResult mLastOverrideUrlL
oadingResult = |
| 31 ExternalNavigationHandler.OverrideUrlLoadingResult.NO_OVERRIDE; | 33 ExternalNavigationHandler.OverrideUrlLoadingResult.NO_OVERRIDE; |
| 32 | 34 |
| 33 /** | 35 /** |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 .setTab(mTab) | 101 .setTab(mTab) |
| 100 .setApplicationMustBeInForeground(true) | 102 .setApplicationMustBeInForeground(true) |
| 101 .setRedirectHandler(tabRedirectHandler) | 103 .setRedirectHandler(tabRedirectHandler) |
| 102 .setOpenInNewTab(shouldCloseTab) | 104 .setOpenInNewTab(shouldCloseTab) |
| 103 .setIsBackgroundTabNavigation(mTab.isHidden() && !isInitialTabLa
unchInBackground) | 105 .setIsBackgroundTabNavigation(mTab.isHidden() && !isInitialTabLa
unchInBackground) |
| 104 .setIsMainFrame(navigationParams.isMainFrame) | 106 .setIsMainFrame(navigationParams.isMainFrame) |
| 105 .setHasUserGesture(navigationParams.hasUserGesture) | 107 .setHasUserGesture(navigationParams.hasUserGesture) |
| 106 .setShouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent(shoul
dCloseTab | 108 .setShouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent(shoul
dCloseTab |
| 107 && navigationParams.isMainFrame) | 109 && navigationParams.isMainFrame) |
| 108 .build(); | 110 .build(); |
| 109 ExternalNavigationHandler.OverrideUrlLoadingResult result = | 111 OverrideUrlLoadingResult result = mExternalNavHandler.shouldOverrideUrlL
oading(params); |
| 110 mExternalNavHandler.shouldOverrideUrlLoading(params); | |
| 111 mLastOverrideUrlLoadingResult = result; | 112 mLastOverrideUrlLoadingResult = result; |
| 112 switch (result) { | 113 switch (result) { |
| 113 case OVERRIDE_WITH_EXTERNAL_INTENT: | 114 case OVERRIDE_WITH_EXTERNAL_INTENT: |
| 114 assert mExternalNavHandler.canExternalAppHandleUrl(url); | 115 assert mExternalNavHandler.canExternalAppHandleUrl(url); |
| 115 if (navigationParams.isMainFrame) { | 116 if (navigationParams.isMainFrame) { |
| 116 onOverrideUrlLoadingAndLaunchIntent(); | 117 onOverrideUrlLoadingAndLaunchIntent(); |
| 117 } | 118 } |
| 118 return true; | 119 return true; |
| 119 case OVERRIDE_WITH_CLOBBERING_TAB: | 120 case OVERRIDE_WITH_CLOBBERING_TAB: |
| 120 mShouldClearRedirectHistoryForTabClobbering = true; | 121 mShouldClearRedirectHistoryForTabClobbering = true; |
| 121 return true; | 122 return true; |
| 122 case OVERRIDE_WITH_ASYNC_ACTION: | 123 case OVERRIDE_WITH_ASYNC_ACTION: |
| 123 if (!shouldCloseTab && navigationParams.isMainFrame) { | 124 if (!shouldCloseTab && navigationParams.isMainFrame) { |
| 124 onOverrideUrlLoadingAndLaunchIntent(); | 125 onOverrideUrlLoadingAndLaunchIntent(); |
| 125 } | 126 } |
| 126 return true; | 127 return true; |
| 127 case NO_OVERRIDE: | 128 case NO_OVERRIDE: |
| 128 default: | 129 default: |
| 129 if (navigationParams.isExternalProtocol) { | 130 if (navigationParams.isExternalProtocol) { |
| 130 logBlockedNavigationToDevToolsConsole(url); | 131 logBlockedNavigationToDevToolsConsole(url); |
| 131 return true; | 132 return true; |
| 132 } | 133 } |
| 133 return false; | 134 return DataUseTabUIManager.shouldOverrideUrlLoading(mActivity, m
Tab, url, |
| 135 navigationParams.pageTransitionType, navigationParams.re
ferrer); |
| 134 } | 136 } |
| 135 } | 137 } |
| 136 | 138 |
| 137 /** | 139 /** |
| 138 * Updates navigation history if navigation is canceled due to intent handle
r. We go back to the | 140 * Updates navigation history if navigation is canceled due to intent handle
r. We go back to the |
| 139 * last committed entry index which was saved before the navigation, and rem
ove the empty | 141 * last committed entry index which was saved before the navigation, and rem
ove the empty |
| 140 * entries from the navigation history. See crbug.com/426679 | 142 * entries from the navigation history. See crbug.com/426679 |
| 141 */ | 143 */ |
| 142 public void maybeUpdateNavigationHistory() { | 144 public void maybeUpdateNavigationHistory() { |
| 143 WebContents webContents = mTab.getWebContents(); | 145 WebContents webContents = mTab.getWebContents(); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 } | 227 } |
| 226 | 228 |
| 227 private void logBlockedNavigationToDevToolsConsole(String url) { | 229 private void logBlockedNavigationToDevToolsConsole(String url) { |
| 228 int resId = mExternalNavHandler.canExternalAppHandleUrl(url) | 230 int resId = mExternalNavHandler.canExternalAppHandleUrl(url) |
| 229 ? R.string.blocked_navigation_warning | 231 ? R.string.blocked_navigation_warning |
| 230 : R.string.unreachable_navigation_warning; | 232 : R.string.unreachable_navigation_warning; |
| 231 mTab.getWebContents().addMessageToDevToolsConsole( | 233 mTab.getWebContents().addMessageToDevToolsConsole( |
| 232 ConsoleMessageLevel.WARNING, mTab.getApplicationContext().getStr
ing(resId, url)); | 234 ConsoleMessageLevel.WARNING, mTab.getApplicationContext().getStr
ing(resId, url)); |
| 233 } | 235 } |
| 234 } | 236 } |
| OLD | NEW |