OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 android.app.Activity; | 7 import android.app.Activity; |
8 import android.app.Application; | 8 import android.app.Application; |
9 import android.content.Context; | 9 import android.content.Context; |
10 import android.content.Intent; | 10 import android.content.Intent; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; | 59 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; |
60 import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper; | 60 import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper; |
61 import org.chromium.chrome.browser.crash.MinidumpDirectoryObserver; | 61 import org.chromium.chrome.browser.crash.MinidumpDirectoryObserver; |
62 import org.chromium.chrome.browser.crash.MinidumpUploadService; | 62 import org.chromium.chrome.browser.crash.MinidumpUploadService; |
63 import org.chromium.chrome.browser.customtabs.CustomTabActivity; | 63 import org.chromium.chrome.browser.customtabs.CustomTabActivity; |
64 import org.chromium.chrome.browser.download.ChromeDownloadDelegate; | 64 import org.chromium.chrome.browser.download.ChromeDownloadDelegate; |
65 import org.chromium.chrome.browser.fullscreen.FullscreenManager; | 65 import org.chromium.chrome.browser.fullscreen.FullscreenManager; |
66 import org.chromium.chrome.browser.help.HelpAndFeedback; | 66 import org.chromium.chrome.browser.help.HelpAndFeedback; |
67 import org.chromium.chrome.browser.infobar.InfoBarContainer; | 67 import org.chromium.chrome.browser.infobar.InfoBarContainer; |
68 import org.chromium.chrome.browser.media.ui.MediaSessionTabHelper; | 68 import org.chromium.chrome.browser.media.ui.MediaSessionTabHelper; |
69 import org.chromium.chrome.browser.navigation.NavigationHandler; | |
70 import org.chromium.chrome.browser.navigation.TabWebContentsNavigationHandler; | |
71 import org.chromium.chrome.browser.ntp.NativePageAssassin; | 69 import org.chromium.chrome.browser.ntp.NativePageAssassin; |
72 import org.chromium.chrome.browser.ntp.NativePageFactory; | 70 import org.chromium.chrome.browser.ntp.NativePageFactory; |
73 import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; | 71 import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; |
74 import org.chromium.chrome.browser.policy.PolicyAuditor; | 72 import org.chromium.chrome.browser.policy.PolicyAuditor; |
75 import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler; | 73 import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler; |
76 import org.chromium.chrome.browser.printing.TabPrinter; | 74 import org.chromium.chrome.browser.printing.TabPrinter; |
77 import org.chromium.chrome.browser.profiles.Profile; | 75 import org.chromium.chrome.browser.profiles.Profile; |
78 import org.chromium.chrome.browser.rlz.RevenueStats; | 76 import org.chromium.chrome.browser.rlz.RevenueStats; |
79 import org.chromium.chrome.browser.search_engines.TemplateUrlService; | 77 import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
80 import org.chromium.chrome.browser.snackbar.LofiBarController; | 78 import org.chromium.chrome.browser.snackbar.LofiBarController; |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 | 379 |
382 private ChromeDownloadDelegate mDownloadDelegate; | 380 private ChromeDownloadDelegate mDownloadDelegate; |
383 | 381 |
384 protected Handler mHandler; | 382 protected Handler mHandler; |
385 | 383 |
386 private LofiBarController mLoFiBarController; | 384 private LofiBarController mLoFiBarController; |
387 | 385 |
388 /** Whether or not the tab closing the tab can send the user back to the app
that opened it. */ | 386 /** Whether or not the tab closing the tab can send the user back to the app
that opened it. */ |
389 private boolean mIsAllowedToReturnToExternalApp; | 387 private boolean mIsAllowedToReturnToExternalApp; |
390 | 388 |
391 private NavigationHandler mNavigationHandler; | |
392 | |
393 /** | |
394 * Method to access navigation handler for a tab. | |
395 * @return navigation handler. | |
396 */ | |
397 public NavigationHandler getNavigationHandler() { | |
398 return mNavigationHandler; | |
399 } | |
400 | |
401 private class TabContentViewClient extends ContentViewClient { | 389 private class TabContentViewClient extends ContentViewClient { |
402 @Override | 390 @Override |
403 public void onBackgroundColorChanged(int color) { | 391 public void onBackgroundColorChanged(int color) { |
404 Tab.this.onBackgroundColorChanged(color); | 392 Tab.this.onBackgroundColorChanged(color); |
405 } | 393 } |
406 | 394 |
407 @Override | 395 @Override |
408 public void onOffsetsForFullscreenChanged( | 396 public void onOffsetsForFullscreenChanged( |
409 float topControlsOffsetY, float contentOffsetY) { | 397 float topControlsOffsetY, float contentOffsetY) { |
410 onOffsetsChanged(topControlsOffsetY, contentOffsetY, isShowingSadTab
()); | 398 onOffsetsChanged(topControlsOffsetY, contentOffsetY, isShowingSadTab
()); |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 * @param observer The {@link TabObserver} to remove. | 727 * @param observer The {@link TabObserver} to remove. |
740 */ | 728 */ |
741 public void removeObserver(TabObserver observer) { | 729 public void removeObserver(TabObserver observer) { |
742 mObservers.removeObserver(observer); | 730 mObservers.removeObserver(observer); |
743 } | 731 } |
744 | 732 |
745 /** | 733 /** |
746 * @return Whether or not this tab has a previous navigation entry. | 734 * @return Whether or not this tab has a previous navigation entry. |
747 */ | 735 */ |
748 public boolean canGoBack() { | 736 public boolean canGoBack() { |
749 return getNavigationHandler() != null && getNavigationHandler().canGoBac
k(); | 737 return getWebContents() != null && getWebContents().getNavigationControl
ler().canGoBack(); |
750 } | 738 } |
751 | 739 |
752 /** | 740 /** |
753 * @return Whether or not this tab has a navigation entry after the current
one. | 741 * @return Whether or not this tab has a navigation entry after the current
one. |
754 */ | 742 */ |
755 public boolean canGoForward() { | 743 public boolean canGoForward() { |
756 return getNavigationHandler() != null && getNavigationHandler().canGoFor
ward(); | 744 return getWebContents() != null && getWebContents().getNavigationControl
ler() |
| 745 .canGoForward(); |
757 } | 746 } |
758 | 747 |
759 /** | 748 /** |
760 * Goes to the navigation entry before the current one. | 749 * Goes to the navigation entry before the current one. |
761 */ | 750 */ |
762 public void goBack() { | 751 public void goBack() { |
763 if (getNavigationHandler() != null) getNavigationHandler().goBack(); | 752 if (getWebContents() != null) getWebContents().getNavigationController()
.goBack(); |
764 } | 753 } |
765 | 754 |
766 /** | 755 /** |
767 * Goes to the navigation entry after the current one. | 756 * Goes to the navigation entry after the current one. |
768 */ | 757 */ |
769 public void goForward() { | 758 public void goForward() { |
770 if (getNavigationHandler() != null) getNavigationHandler().goForward(); | 759 if (getWebContents() != null) getWebContents().getNavigationController()
.goForward(); |
771 } | 760 } |
772 | 761 |
773 /** | 762 /** |
774 * Loads the current navigation if there is a pending lazy load (after tab r
estore). | 763 * Loads the current navigation if there is a pending lazy load (after tab r
estore). |
775 */ | 764 */ |
776 public void loadIfNecessary() { | 765 public void loadIfNecessary() { |
777 if (getNavigationHandler() != null) getNavigationHandler().loadIfNecessa
ry(); | 766 if (getWebContents() != null) getWebContents().getNavigationController()
.loadIfNecessary(); |
778 } | 767 } |
779 | 768 |
780 /** | 769 /** |
781 * Requests the current navigation to be loaded upon the next call to loadIf
Necessary(). | 770 * Requests the current navigation to be loaded upon the next call to loadIf
Necessary(). |
782 */ | 771 */ |
783 protected void requestRestoreLoad() { | 772 protected void requestRestoreLoad() { |
784 if (getNavigationHandler() != null) { | 773 if (getWebContents() != null) { |
785 getNavigationHandler().requestRestoreLoad(); | 774 getWebContents().getNavigationController().requestRestoreLoad(); |
786 } | 775 } |
787 } | 776 } |
788 | 777 |
789 /** | 778 /** |
790 * Causes this tab to navigate to the specified URL. | 779 * Causes this tab to navigate to the specified URL. |
791 * @param params parameters describing the url load. Note that it is importa
nt to set correct | 780 * @param params parameters describing the url load. Note that it is importa
nt to set correct |
792 * page transition as it is used for ranking URLs in the histo
ry so the omnibox | 781 * page transition as it is used for ranking URLs in the histo
ry so the omnibox |
793 * can report suggestions correctly. | 782 * can report suggestions correctly. |
794 * @return FULL_PRERENDERED_PAGE_LOAD or PARTIAL_PRERENDERED_PAGE_LOAD if th
e page has been | 783 * @return FULL_PRERENDERED_PAGE_LOAD or PARTIAL_PRERENDERED_PAGE_LOAD if th
e page has been |
795 * prerendered. DEFAULT_PAGE_LOAD if it had not. | 784 * prerendered. DEFAULT_PAGE_LOAD if it had not. |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
995 | 984 |
996 printingController.setPendingPrint(new TabPrinter(this), | 985 printingController.setPendingPrint(new TabPrinter(this), |
997 new PrintManagerDelegateImpl(getActivity())); | 986 new PrintManagerDelegateImpl(getActivity())); |
998 } | 987 } |
999 | 988 |
1000 /** | 989 /** |
1001 * Reloads the current page content. | 990 * Reloads the current page content. |
1002 */ | 991 */ |
1003 public void reload() { | 992 public void reload() { |
1004 // TODO(dtrainor): Should we try to rebuild the ContentView if it's froz
en? | 993 // TODO(dtrainor): Should we try to rebuild the ContentView if it's froz
en? |
1005 if (getNavigationHandler() != null) getNavigationHandler().reload(true); | 994 if (getWebContents() != null) getWebContents().getNavigationController()
.reload(true); |
1006 } | 995 } |
1007 | 996 |
1008 /** | 997 /** |
1009 * Reloads the current page content. | 998 * Reloads the current page content. |
1010 * This version ignores the cache and reloads from the network. | 999 * This version ignores the cache and reloads from the network. |
1011 */ | 1000 */ |
1012 public void reloadIgnoringCache() { | 1001 public void reloadIgnoringCache() { |
1013 if (getNavigationHandler() != null) { | 1002 if (getWebContents() != null) { |
1014 getNavigationHandler().reloadBypassingCache(true); | 1003 getWebContents().getNavigationController().reloadBypassingCache(true
); |
1015 } | 1004 } |
1016 } | 1005 } |
1017 | 1006 |
1018 /** | 1007 /** |
1019 * Reloads the current page content with Lo-Fi off. | 1008 * Reloads the current page content with Lo-Fi off. |
1020 * This version ignores the cache and reloads from the network. | 1009 * This version ignores the cache and reloads from the network. |
1021 */ | 1010 */ |
1022 public void reloadDisableLoFi() { | 1011 public void reloadDisableLoFi() { |
1023 if (getNavigationHandler() != null) { | 1012 if (getWebContents() != null) { |
1024 getNavigationHandler().reloadDisableLoFi(true); | 1013 getWebContents().getNavigationController().reloadDisableLoFi(true); |
1025 } | 1014 } |
1026 } | 1015 } |
1027 | 1016 |
1028 /** | 1017 /** |
1029 * Reloads all the Lo-Fi images in this Tab's WebContents. | 1018 * Reloads all the Lo-Fi images in this Tab's WebContents. |
1030 * This version ignores the cache and reloads from the network. | 1019 * This version ignores the cache and reloads from the network. |
1031 */ | 1020 */ |
1032 public void reloadLoFiImages() { | 1021 public void reloadLoFiImages() { |
1033 if (getWebContents() != null) { | 1022 if (getWebContents() != null) { |
1034 getWebContents().reloadLoFiImages(); | 1023 getWebContents().reloadLoFiImages(); |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1191 return mNativePage != null; | 1180 return mNativePage != null; |
1192 } | 1181 } |
1193 | 1182 |
1194 /** | 1183 /** |
1195 * Set whether or not the {@link ContentViewCore} should be using a desktop
user agent for the | 1184 * Set whether or not the {@link ContentViewCore} should be using a desktop
user agent for the |
1196 * currently loaded page. | 1185 * currently loaded page. |
1197 * @param useDesktop If {@code true}, use a desktop user agent. Otherwi
se use a mobile one. | 1186 * @param useDesktop If {@code true}, use a desktop user agent. Otherwi
se use a mobile one. |
1198 * @param reloadOnChange Reload the page if the user agent has changed. | 1187 * @param reloadOnChange Reload the page if the user agent has changed. |
1199 */ | 1188 */ |
1200 public void setUseDesktopUserAgent(boolean useDesktop, boolean reloadOnChang
e) { | 1189 public void setUseDesktopUserAgent(boolean useDesktop, boolean reloadOnChang
e) { |
1201 if (getNavigationHandler() != null) { | 1190 if (getWebContents() != null) { |
1202 getNavigationHandler().setUseDesktopUserAgent(useDesktop, reloadOnCh
ange); | 1191 getWebContents().getNavigationController() |
| 1192 .setUseDesktopUserAgent(useDesktop, reloadOnChange); |
1203 } | 1193 } |
1204 } | 1194 } |
1205 | 1195 |
1206 /** | 1196 /** |
1207 * @return Whether or not the {@link ContentViewCore} is using a desktop use
r agent. | 1197 * @return Whether or not the {@link ContentViewCore} is using a desktop use
r agent. |
1208 */ | 1198 */ |
1209 public boolean getUseDesktopUserAgent() { | 1199 public boolean getUseDesktopUserAgent() { |
1210 return getNavigationHandler() != null | 1200 return getWebContents() != null && getWebContents().getNavigationControl
ler() |
1211 && getNavigationHandler().getUseDesktopUserAgent(); | 1201 .getUseDesktopUserAgent(); |
1212 } | 1202 } |
1213 | 1203 |
1214 /** | 1204 /** |
1215 * @return The current {@link ConnectionSecurityLevel} for the tab. | 1205 * @return The current {@link ConnectionSecurityLevel} for the tab. |
1216 */ | 1206 */ |
1217 // TODO(tedchoc): Remove this and transition all clients to use ToolbarModel
directly. | 1207 // TODO(tedchoc): Remove this and transition all clients to use ToolbarModel
directly. |
1218 public int getSecurityLevel() { | 1208 public int getSecurityLevel() { |
1219 return SecurityStateModel.getSecurityLevelForWebContents(getWebContents(
)); | 1209 return SecurityStateModel.getSecurityLevelForWebContents(getWebContents(
)); |
1220 } | 1210 } |
1221 | 1211 |
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1855 } | 1845 } |
1856 | 1846 |
1857 mDownloadDelegate = new ChromeDownloadDelegate(mThemedApplicationCon
text, this); | 1847 mDownloadDelegate = new ChromeDownloadDelegate(mThemedApplicationCon
text, this); |
1858 | 1848 |
1859 assert mNativeTabAndroid != 0; | 1849 assert mNativeTabAndroid != 0; |
1860 nativeInitWebContents(mNativeTabAndroid, mIncognito, mContentViewCor
e.getWebContents(), | 1850 nativeInitWebContents(mNativeTabAndroid, mIncognito, mContentViewCor
e.getWebContents(), |
1861 mWebContentsDelegate, | 1851 mWebContentsDelegate, |
1862 new TabContextMenuPopulator( | 1852 new TabContextMenuPopulator( |
1863 mDelegateFactory.createContextMenuPopulator(this), t
his)); | 1853 mDelegateFactory.createContextMenuPopulator(this), t
his)); |
1864 | 1854 |
1865 // TODO(shaktisahu): Add logic for blimp version of navigation handl
er. | |
1866 mNavigationHandler = new TabWebContentsNavigationHandler(getWebConte
nts()); | |
1867 | |
1868 // In the case where restoring a Tab or showing a prerendered one we
already have a | 1855 // In the case where restoring a Tab or showing a prerendered one we
already have a |
1869 // valid infobar container, no need to recreate one. | 1856 // valid infobar container, no need to recreate one. |
1870 if (mInfoBarContainer == null) { | 1857 if (mInfoBarContainer == null) { |
1871 // The InfoBarContainer needs to be created after the ContentVie
w has been natively | 1858 // The InfoBarContainer needs to be created after the ContentVie
w has been natively |
1872 // initialized. | 1859 // initialized. |
1873 mInfoBarContainer = new InfoBarContainer( | 1860 mInfoBarContainer = new InfoBarContainer( |
1874 mThemedApplicationContext, getId(), mContentViewParent,
this); | 1861 mThemedApplicationContext, getId(), mContentViewParent,
this); |
1875 } else { | 1862 } else { |
1876 mInfoBarContainer.onParentViewChanged(getId(), mContentViewParen
t); | 1863 mInfoBarContainer.onParentViewChanged(getId(), mContentViewParen
t); |
1877 } | 1864 } |
1878 mInfoBarContainer.setContentViewCore(mContentViewCore); | 1865 mInfoBarContainer.setContentViewCore(mContentViewCore); |
1879 | 1866 |
1880 mSwipeRefreshHandler = new SwipeRefreshHandler(mThemedApplicationCon
text); | 1867 mSwipeRefreshHandler = new SwipeRefreshHandler(mThemedApplicationCon
text); |
1881 mSwipeRefreshHandler.setContentViewCore(mContentViewCore, getNavigat
ionHandler()); | 1868 mSwipeRefreshHandler.setContentViewCore(mContentViewCore); |
1882 | 1869 |
1883 updateThemeColorIfNeeded(false); | 1870 updateThemeColorIfNeeded(false); |
1884 notifyContentChanged(); | 1871 notifyContentChanged(); |
1885 | 1872 |
1886 // For browser tabs, we want to set accessibility focus to the page | 1873 // For browser tabs, we want to set accessibility focus to the page |
1887 // when it loads. This is not the default behavior for embedded | 1874 // when it loads. This is not the default behavior for embedded |
1888 // web views. | 1875 // web views. |
1889 mContentViewCore.setShouldSetAccessibilityFocusOnPageLoad(true); | 1876 mContentViewCore.setShouldSetAccessibilityFocusOnPageLoad(true); |
1890 | 1877 |
1891 setInterceptNavigationDelegate(mDelegateFactory.createInterceptNavig
ationDelegate( | 1878 setInterceptNavigationDelegate(mDelegateFactory.createInterceptNavig
ationDelegate( |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2372 mContentViewCore.getContainerView().setOnSystemUiVisibilityChangeListene
r(null); | 2359 mContentViewCore.getContainerView().setOnSystemUiVisibilityChangeListene
r(null); |
2373 if (mGestureStateListener != null) { | 2360 if (mGestureStateListener != null) { |
2374 mContentViewCore.removeGestureStateListener(mGestureStateListener); | 2361 mContentViewCore.removeGestureStateListener(mGestureStateListener); |
2375 } | 2362 } |
2376 | 2363 |
2377 if (mInfoBarContainer != null && mInfoBarContainer.getParent() != null)
{ | 2364 if (mInfoBarContainer != null && mInfoBarContainer.getParent() != null)
{ |
2378 mInfoBarContainer.removeFromParentView(); | 2365 mInfoBarContainer.removeFromParentView(); |
2379 mInfoBarContainer.setContentViewCore(null); | 2366 mInfoBarContainer.setContentViewCore(null); |
2380 } | 2367 } |
2381 if (mSwipeRefreshHandler != null) { | 2368 if (mSwipeRefreshHandler != null) { |
2382 mSwipeRefreshHandler.setContentViewCore(null, null); | 2369 mSwipeRefreshHandler.setContentViewCore(null); |
2383 mSwipeRefreshHandler = null; | 2370 mSwipeRefreshHandler = null; |
2384 } | 2371 } |
2385 | |
2386 mNavigationHandler = null; | |
2387 | |
2388 mContentViewParent = null; | 2372 mContentViewParent = null; |
2389 mContentViewCore.destroy(); | 2373 mContentViewCore.destroy(); |
2390 mContentViewCore = null; | 2374 mContentViewCore = null; |
2391 | 2375 |
2392 mWebContentsDelegate = null; | 2376 mWebContentsDelegate = null; |
2393 | 2377 |
2394 if (mWebContentsObserver != null) { | 2378 if (mWebContentsObserver != null) { |
2395 mWebContentsObserver.destroy(); | 2379 mWebContentsObserver.destroy(); |
2396 mWebContentsObserver = null; | 2380 mWebContentsObserver = null; |
2397 } | 2381 } |
(...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3290 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro
id, | 3274 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro
id, |
3291 InterceptNavigationDelegate delegate); | 3275 InterceptNavigationDelegate delegate); |
3292 private native void nativeAttachToTabContentManager(long nativeTabAndroid, | 3276 private native void nativeAttachToTabContentManager(long nativeTabAndroid, |
3293 TabContentManager tabContentManager); | 3277 TabContentManager tabContentManager); |
3294 private native void nativeAttachOverlayWebContents( | 3278 private native void nativeAttachOverlayWebContents( |
3295 long nativeTabAndroid, WebContents webContents, boolean visible); | 3279 long nativeTabAndroid, WebContents webContents, boolean visible); |
3296 private native void nativeDetachOverlayWebContents( | 3280 private native void nativeDetachOverlayWebContents( |
3297 long nativeTabAndroid, WebContents webContents); | 3281 long nativeTabAndroid, WebContents webContents); |
3298 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String
url); | 3282 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String
url); |
3299 } | 3283 } |
OLD | NEW |