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 |