Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(469)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java

Issue 2233023002: Adding BlimpNavigationController to Tab (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@nav_handler_remove
Patch Set: Fixing unit tests Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 21 matching lines...) Expand all
32 import org.chromium.base.ApplicationStatus; 32 import org.chromium.base.ApplicationStatus;
33 import org.chromium.base.ContextUtils; 33 import org.chromium.base.ContextUtils;
34 import org.chromium.base.ObserverList; 34 import org.chromium.base.ObserverList;
35 import org.chromium.base.ObserverList.RewindableIterator; 35 import org.chromium.base.ObserverList.RewindableIterator;
36 import org.chromium.base.ThreadUtils; 36 import org.chromium.base.ThreadUtils;
37 import org.chromium.base.TraceEvent; 37 import org.chromium.base.TraceEvent;
38 import org.chromium.base.VisibleForTesting; 38 import org.chromium.base.VisibleForTesting;
39 import org.chromium.base.annotations.CalledByNative; 39 import org.chromium.base.annotations.CalledByNative;
40 import org.chromium.base.metrics.RecordHistogram; 40 import org.chromium.base.metrics.RecordHistogram;
41 import org.chromium.base.metrics.RecordUserAction; 41 import org.chromium.base.metrics.RecordUserAction;
42 import org.chromium.blimp_public.contents.BlimpContents;
42 import org.chromium.chrome.R; 43 import org.chromium.chrome.R;
43 import org.chromium.chrome.browser.ChromeActivity; 44 import org.chromium.chrome.browser.ChromeActivity;
44 import org.chromium.chrome.browser.ChromeApplication; 45 import org.chromium.chrome.browser.ChromeApplication;
45 import org.chromium.chrome.browser.ChromeFeatureList; 46 import org.chromium.chrome.browser.ChromeFeatureList;
46 import org.chromium.chrome.browser.ChromeVersionInfo; 47 import org.chromium.chrome.browser.ChromeVersionInfo;
47 import org.chromium.chrome.browser.FrozenNativePage; 48 import org.chromium.chrome.browser.FrozenNativePage;
48 import org.chromium.chrome.browser.IntentHandler; 49 import org.chromium.chrome.browser.IntentHandler;
49 import org.chromium.chrome.browser.IntentHandler.TabOpenType; 50 import org.chromium.chrome.browser.IntentHandler.TabOpenType;
50 import org.chromium.chrome.browser.NativePage; 51 import org.chromium.chrome.browser.NativePage;
51 import org.chromium.chrome.browser.SwipeRefreshHandler; 52 import org.chromium.chrome.browser.SwipeRefreshHandler;
52 import org.chromium.chrome.browser.TabState; 53 import org.chromium.chrome.browser.TabState;
53 import org.chromium.chrome.browser.TabState.WebContentsState; 54 import org.chromium.chrome.browser.TabState.WebContentsState;
54 import org.chromium.chrome.browser.UrlConstants; 55 import org.chromium.chrome.browser.UrlConstants;
55 import org.chromium.chrome.browser.WarmupManager; 56 import org.chromium.chrome.browser.WarmupManager;
56 import org.chromium.chrome.browser.WebContentsFactory; 57 import org.chromium.chrome.browser.WebContentsFactory;
57 import org.chromium.chrome.browser.banners.AppBannerManager; 58 import org.chromium.chrome.browser.banners.AppBannerManager;
59 import org.chromium.chrome.browser.blimp.BlimpClientContextFactory;
58 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; 60 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
59 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; 61 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator;
60 import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper; 62 import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper;
61 import org.chromium.chrome.browser.crash.MinidumpDirectoryObserver; 63 import org.chromium.chrome.browser.crash.MinidumpDirectoryObserver;
62 import org.chromium.chrome.browser.crash.MinidumpUploadService; 64 import org.chromium.chrome.browser.crash.MinidumpUploadService;
63 import org.chromium.chrome.browser.customtabs.CustomTabActivity; 65 import org.chromium.chrome.browser.customtabs.CustomTabActivity;
64 import org.chromium.chrome.browser.download.ChromeDownloadDelegate; 66 import org.chromium.chrome.browser.download.ChromeDownloadDelegate;
65 import org.chromium.chrome.browser.fullscreen.FullscreenManager; 67 import org.chromium.chrome.browser.fullscreen.FullscreenManager;
66 import org.chromium.chrome.browser.help.HelpAndFeedback; 68 import org.chromium.chrome.browser.help.HelpAndFeedback;
67 import org.chromium.chrome.browser.infobar.InfoBarContainer; 69 import org.chromium.chrome.browser.infobar.InfoBarContainer;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 private static final String TAG = "Tab"; 162 private static final String TAG = "Tab";
161 163
162 private long mNativeTabAndroid; 164 private long mNativeTabAndroid;
163 165
164 /** Unique id of this tab (within its container). */ 166 /** Unique id of this tab (within its container). */
165 private final int mId; 167 private final int mId;
166 168
167 /** Whether or not this tab is an incognito tab. */ 169 /** Whether or not this tab is an incognito tab. */
168 private final boolean mIncognito; 170 private final boolean mIncognito;
169 171
172 /** Whether or not this tab is running in blimp mode. */
173 private boolean mBlimp;
174
170 /** 175 /**
171 * An Application {@link Context}. Unlike {@link #mActivity}, this is the o nly one that is 176 * An Application {@link Context}. Unlike {@link #mActivity}, this is the o nly one that is
172 * publicly exposed to help prevent leaking the {@link Activity}. 177 * publicly exposed to help prevent leaking the {@link Activity}.
173 */ 178 */
174 private final Context mThemedApplicationContext; 179 private final Context mThemedApplicationContext;
175 180
176 /** Gives {@link Tab} a way to interact with the Android window. */ 181 /** Gives {@link Tab} a way to interact with the Android window. */
177 private WindowAndroid mWindowAndroid; 182 private WindowAndroid mWindowAndroid;
178 183
179 /** Whether or not this {@link Tab} is initialized and should be interacted with. */ 184 /** Whether or not this {@link Tab} is initialized and should be interacted with. */
(...skipping 26 matching lines...) Expand all
206 /** 211 /**
207 * A list of {@link ContentViewCore} overlay objects that are managed by ext ernal components but 212 * A list of {@link ContentViewCore} overlay objects that are managed by ext ernal components but
208 * need to be sized and rendered along side this {@link Tab}s content. 213 * need to be sized and rendered along side this {@link Tab}s content.
209 */ 214 */
210 private final List<ContentViewCore> mOverlayContentViewCores = new ArrayList <>(); 215 private final List<ContentViewCore> mOverlayContentViewCores = new ArrayList <>();
211 216
212 // Content layer Observers and Delegates 217 // Content layer Observers and Delegates
213 private ContentViewClient mContentViewClient; 218 private ContentViewClient mContentViewClient;
214 private TabWebContentsObserver mWebContentsObserver; 219 private TabWebContentsObserver mWebContentsObserver;
215 private TabWebContentsDelegateAndroid mWebContentsDelegate; 220 private TabWebContentsDelegateAndroid mWebContentsDelegate;
221 private BlimpContents mBlimpContents;
216 222
217 /** 223 /**
218 * If this tab was opened from another tab, store the id of the tab that 224 * If this tab was opened from another tab, store the id of the tab that
219 * caused it to be opened so that we can activate it when this tab gets 225 * caused it to be opened so that we can activate it when this tab gets
220 * closed. 226 * closed.
221 */ 227 */
222 private int mParentId = INVALID_TAB_ID; 228 private int mParentId = INVALID_TAB_ID;
223 229
224 /** 230 /**
225 * If this tab was opened from another tab in another Activity, this is the Intent that can be 231 * If this tab was opened from another tab in another Activity, this is the Intent that can be
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 * @param observer The {@link TabObserver} to remove. 733 * @param observer The {@link TabObserver} to remove.
728 */ 734 */
729 public void removeObserver(TabObserver observer) { 735 public void removeObserver(TabObserver observer) {
730 mObservers.removeObserver(observer); 736 mObservers.removeObserver(observer);
731 } 737 }
732 738
733 /** 739 /**
734 * @return Whether or not this tab has a previous navigation entry. 740 * @return Whether or not this tab has a previous navigation entry.
735 */ 741 */
736 public boolean canGoBack() { 742 public boolean canGoBack() {
737 return getWebContents() != null && getWebContents().getNavigationControl ler().canGoBack(); 743 if (isBlimpTab()) {
744 return getBlimpContents() != null
745 && getBlimpContents().getNavigationController().canGoBack();
746 } else {
747 return getWebContents() != null
748 && getWebContents().getNavigationController().canGoBack();
749 }
738 } 750 }
739 751
740 /** 752 /**
741 * @return Whether or not this tab has a navigation entry after the current one. 753 * @return Whether or not this tab has a navigation entry after the current one.
742 */ 754 */
743 public boolean canGoForward() { 755 public boolean canGoForward() {
744 return getWebContents() != null && getWebContents().getNavigationControl ler() 756 if (isBlimpTab()) {
745 .canGoForward(); 757 return getBlimpContents() != null
758 && getBlimpContents().getNavigationController().canGoForward ();
759 } else {
760 return getWebContents() != null
761 && getWebContents().getNavigationController().canGoForward() ;
762 }
746 } 763 }
747 764
748 /** 765 /**
749 * Goes to the navigation entry before the current one. 766 * Goes to the navigation entry before the current one.
750 */ 767 */
751 public void goBack() { 768 public void goBack() {
752 if (getWebContents() != null) getWebContents().getNavigationController() .goBack(); 769 if (isBlimpTab()) {
770 if (getBlimpContents() != null) getBlimpContents().getNavigationCont roller().goBack();
771 } else {
772 if (getWebContents() != null) getWebContents().getNavigationControll er().goBack();
773 }
753 } 774 }
754 775
755 /** 776 /**
756 * Goes to the navigation entry after the current one. 777 * Goes to the navigation entry after the current one.
757 */ 778 */
758 public void goForward() { 779 public void goForward() {
759 if (getWebContents() != null) getWebContents().getNavigationController() .goForward(); 780 if (isBlimpTab()) {
781 if (getBlimpContents() != null) {
782 getBlimpContents().getNavigationController().goForward();
783 }
784 } else {
785 if (getWebContents() != null) getWebContents().getNavigationControll er().goForward();
786 }
760 } 787 }
761 788
762 /** 789 /**
763 * Loads the current navigation if there is a pending lazy load (after tab r estore). 790 * Loads the current navigation if there is a pending lazy load (after tab r estore).
764 */ 791 */
765 public void loadIfNecessary() { 792 public void loadIfNecessary() {
766 if (getWebContents() != null) getWebContents().getNavigationController() .loadIfNecessary(); 793 if (getWebContents() != null) getWebContents().getNavigationController() .loadIfNecessary();
767 } 794 }
768 795
769 /** 796 /**
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 1010
984 printingController.setPendingPrint(new TabPrinter(this), 1011 printingController.setPendingPrint(new TabPrinter(this),
985 new PrintManagerDelegateImpl(getActivity())); 1012 new PrintManagerDelegateImpl(getActivity()));
986 } 1013 }
987 1014
988 /** 1015 /**
989 * Reloads the current page content. 1016 * Reloads the current page content.
990 */ 1017 */
991 public void reload() { 1018 public void reload() {
992 // TODO(dtrainor): Should we try to rebuild the ContentView if it's froz en? 1019 // TODO(dtrainor): Should we try to rebuild the ContentView if it's froz en?
993 if (getWebContents() != null) getWebContents().getNavigationController() .reload(true); 1020 if (isBlimpTab()) {
1021 if (getBlimpContents() != null) {
1022 getBlimpContents().getNavigationController().reload();
1023 }
1024 } else {
1025 if (getWebContents() != null) getWebContents().getNavigationControll er().reload(true);
1026 }
994 } 1027 }
995 1028
996 /** 1029 /**
997 * Reloads the current page content. 1030 * Reloads the current page content.
998 * This version ignores the cache and reloads from the network. 1031 * This version ignores the cache and reloads from the network.
999 */ 1032 */
1000 public void reloadIgnoringCache() { 1033 public void reloadIgnoringCache() {
1001 if (getWebContents() != null) { 1034 if (getWebContents() != null) {
1002 getWebContents().getNavigationController().reloadBypassingCache(true ); 1035 getWebContents().getNavigationController().reloadBypassingCache(true );
1003 } 1036 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1121 } 1154 }
1122 1155
1123 /** 1156 /**
1124 * @return The web contents associated with this tab. 1157 * @return The web contents associated with this tab.
1125 */ 1158 */
1126 public WebContents getWebContents() { 1159 public WebContents getWebContents() {
1127 return mContentViewCore != null ? mContentViewCore.getWebContents() : nu ll; 1160 return mContentViewCore != null ? mContentViewCore.getWebContents() : nu ll;
1128 } 1161 }
1129 1162
1130 /** 1163 /**
1164 * @return The {@link BlimpContents} associated with this tab, if in blimp m ode.
1165 */
1166 public BlimpContents getBlimpContents() {
1167 return mBlimpContents;
1168 }
1169
1170 /**
1171 * @return Whether or not this tab is running in blimp mode.
1172 */
1173 public boolean isBlimpTab() {
1174 return mBlimp;
1175 }
1176
1177 /**
1131 * @return The profile associated with this tab. 1178 * @return The profile associated with this tab.
1132 */ 1179 */
1133 public Profile getProfile() { 1180 public Profile getProfile() {
1134 if (mNativeTabAndroid == 0) return null; 1181 if (mNativeTabAndroid == 0) return null;
1135 return nativeGetProfileAndroid(mNativeTabAndroid); 1182 return nativeGetProfileAndroid(mNativeTabAndroid);
1136 } 1183 }
1137 1184
1138 /** 1185 /**
1139 * For more information about the uniqueness of {@link #getId()} see comment s on {@link Tab}. 1186 * For more information about the uniqueness of {@link #getId()} see comment s on {@link Tab}.
1140 * @see Tab 1187 * @see Tab
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 } 1224 }
1178 1225
1179 /** 1226 /**
1180 * Set whether or not the {@link ContentViewCore} should be using a desktop user agent for the 1227 * Set whether or not the {@link ContentViewCore} should be using a desktop user agent for the
1181 * currently loaded page. 1228 * currently loaded page.
1182 * @param useDesktop If {@code true}, use a desktop user agent. Otherwi se use a mobile one. 1229 * @param useDesktop If {@code true}, use a desktop user agent. Otherwi se use a mobile one.
1183 * @param reloadOnChange Reload the page if the user agent has changed. 1230 * @param reloadOnChange Reload the page if the user agent has changed.
1184 */ 1231 */
1185 public void setUseDesktopUserAgent(boolean useDesktop, boolean reloadOnChang e) { 1232 public void setUseDesktopUserAgent(boolean useDesktop, boolean reloadOnChang e) {
1186 if (getWebContents() != null) { 1233 if (getWebContents() != null) {
1187 getWebContents().getNavigationController() 1234 getWebContents().getNavigationController().setUseDesktopUserAgent(
1188 .setUseDesktopUserAgent(useDesktop, reloadOnChange); 1235 useDesktop, reloadOnChange);
1189 } 1236 }
1190 } 1237 }
1191 1238
1192 /** 1239 /**
1193 * @return Whether or not the {@link ContentViewCore} is using a desktop use r agent. 1240 * @return Whether or not the {@link ContentViewCore} is using a desktop use r agent.
1194 */ 1241 */
1195 public boolean getUseDesktopUserAgent() { 1242 public boolean getUseDesktopUserAgent() {
1196 return getWebContents() != null && getWebContents().getNavigationControl ler() 1243 return getWebContents() != null
1197 .getUseDesktopUserAgent(); 1244 && getWebContents().getNavigationController().getUseDesktopUserA gent();
1198 } 1245 }
1199 1246
1200 /** 1247 /**
1201 * @return The current {@link ConnectionSecurityLevel} for the tab. 1248 * @return The current {@link ConnectionSecurityLevel} for the tab.
1202 */ 1249 */
1203 // TODO(tedchoc): Remove this and transition all clients to use ToolbarModel directly. 1250 // TODO(tedchoc): Remove this and transition all clients to use ToolbarModel directly.
1204 public int getSecurityLevel() { 1251 public int getSecurityLevel() {
1205 return SecurityStateModel.getSecurityLevelForWebContents(getWebContents( )); 1252 return SecurityStateModel.getSecurityLevelForWebContents(getWebContents( ));
1206 } 1253 }
1207 1254
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 TraceEvent.begin("Tab.initialize"); 1474 TraceEvent.begin("Tab.initialize");
1428 1475
1429 mDelegateFactory = delegateFactory; 1476 mDelegateFactory = delegateFactory;
1430 initializeNative(); 1477 initializeNative();
1431 1478
1432 RevenueStats.getInstance().tabCreated(this); 1479 RevenueStats.getInstance().tabCreated(this);
1433 1480
1434 mTopControlsVisibilityDelegate = 1481 mTopControlsVisibilityDelegate =
1435 mDelegateFactory.createTopControlsVisibilityDelegate(this); 1482 mDelegateFactory.createTopControlsVisibilityDelegate(this);
1436 1483
1484 mBlimp = BlimpClientContextFactory
1485 .getBlimpClientContextForProfile(
1486 Profile.getLastUsedProfile().getOriginalPro file())
1487 .isBlimpEnabled()
1488 && !mIncognito;
1489
1437 // Attach the TabContentManager if we have one. This will bind this Tab's content layer 1490 // Attach the TabContentManager if we have one. This will bind this Tab's content layer
1438 // to this manager. 1491 // to this manager.
1439 // TODO(dtrainor): Remove this and move to a pull model instead of p ushing the layer. 1492 // TODO(dtrainor): Remove this and move to a pull model instead of p ushing the layer.
1440 attachTabContentManager(tabContentManager); 1493 attachTabContentManager(tabContentManager);
1441 1494
1442 // If there is a frozen WebContents state or a pending lazy load, do n't create a new 1495 // If there is a frozen WebContents state or a pending lazy load, do n't create a new
1443 // WebContents. 1496 // WebContents.
1444 if (getFrozenContentsState() != null || getPendingLoadParams() != nu ll) { 1497 if (getFrozenContentsState() != null || getPendingLoadParams() != nu ll) {
1445 if (unfreeze) unfreezeContents(); 1498 if (unfreeze) unfreezeContents();
1446 return; 1499 return;
1447 } 1500 }
1448 1501
1502 if (isBlimpTab() && getBlimpContents() == null) {
1503 Profile profile = Profile.getLastUsedProfile();
1504 if (mIncognito) profile = profile.getOffTheRecordProfile();
1505 mBlimpContents = nativeInitBlimpContents(mNativeTabAndroid, prof ile);
1506 getBlimpContents().addObserver(new TabBlimpContentsObserver(this ));
1507 }
1508
1449 boolean creatingWebContents = webContents == null; 1509 boolean creatingWebContents = webContents == null;
1450 if (creatingWebContents) { 1510 if (creatingWebContents) {
1451 webContents = WarmupManager.getInstance().takeSpareWebContents( 1511 webContents = WarmupManager.getInstance().takeSpareWebContents(
1452 isIncognito(), initiallyHidden); 1512 isIncognito(), initiallyHidden);
1453 if (webContents == null) { 1513 if (webContents == null) {
1454 webContents = 1514 webContents =
1455 WebContentsFactory.createWebContents(isIncognito(), initiallyHidden); 1515 WebContentsFactory.createWebContents(isIncognito(), initiallyHidden);
1456 } 1516 }
1457 } 1517 }
1458 1518
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
2010 if (mTabUma != null) mTabUma.onDestroy(); 2070 if (mTabUma != null) mTabUma.onDestroy();
2011 2071
2012 for (TabObserver observer : mObservers) observer.onDestroyed(this); 2072 for (TabObserver observer : mObservers) observer.onDestroyed(this);
2013 mObservers.clear(); 2073 mObservers.clear();
2014 2074
2015 NativePage currentNativePage = mNativePage; 2075 NativePage currentNativePage = mNativePage;
2016 mNativePage = null; 2076 mNativePage = null;
2017 destroyNativePageInternal(currentNativePage); 2077 destroyNativePageInternal(currentNativePage);
2018 destroyContentViewCore(true); 2078 destroyContentViewCore(true);
2019 2079
2080 // Native part of BlimpContents is destroyed on the subsequent call to n ativeDestroy.
2081 mBlimpContents = null;
2082
2020 // Destroys the native tab after destroying the ContentView but before d estroying the 2083 // Destroys the native tab after destroying the ContentView but before d estroying the
2021 // InfoBarContainer. The native tab should be destroyed before the infob ar container as 2084 // InfoBarContainer. The native tab should be destroyed before the infob ar container as
2022 // destroying the native tab cleanups up any remaining infobars. The inf obar container 2085 // destroying the native tab cleanups up any remaining infobars. The inf obar container
2023 // expects all infobars to be cleaned up before its own destruction. 2086 // expects all infobars to be cleaned up before its own destruction.
2024 assert mNativeTabAndroid != 0; 2087 assert mNativeTabAndroid != 0;
2025 nativeDestroy(mNativeTabAndroid); 2088 nativeDestroy(mNativeTabAndroid);
2026 assert mNativeTabAndroid == 0; 2089 assert mNativeTabAndroid == 0;
2027 2090
2028 if (mInfoBarContainer != null) { 2091 if (mInfoBarContainer != null) {
2029 mInfoBarContainer.destroy(); 2092 mInfoBarContainer.destroy();
(...skipping 14 matching lines...) Expand all
2044 return mIsInitialized; 2107 return mIsInitialized;
2045 } 2108 }
2046 2109
2047 /** 2110 /**
2048 * @return The URL associated with the tab. 2111 * @return The URL associated with the tab.
2049 */ 2112 */
2050 @CalledByNative 2113 @CalledByNative
2051 public String getUrl() { 2114 public String getUrl() {
2052 String url = getWebContents() != null ? getWebContents().getUrl() : ""; 2115 String url = getWebContents() != null ? getWebContents().getUrl() : "";
2053 2116
2117 if (isBlimpTab() && getBlimpContents() != null) {
2118 url = getBlimpContents().getNavigationController().getUrl();
2119 }
2120
2054 // If we have a ContentView, or a NativePage, or the url is not empty, w e have a WebContents 2121 // If we have a ContentView, or a NativePage, or the url is not empty, w e have a WebContents
2055 // so cache the WebContent's url. If not use the cached version. 2122 // so cache the WebContent's url. If not use the cached version.
2056 if (getContentViewCore() != null || getNativePage() != null || !TextUtil s.isEmpty(url)) { 2123 if (getContentViewCore() != null || getNativePage() != null || !TextUtil s.isEmpty(url)) {
2057 mUrl = url; 2124 mUrl = url;
2058 } 2125 }
2059 2126
2060 return mUrl != null ? mUrl : ""; 2127 return mUrl != null ? mUrl : "";
2061 } 2128 }
2062 2129
2063 /** 2130 /**
2064 * @return The tab title. 2131 * @return The tab title.
2065 */ 2132 */
2066 @CalledByNative 2133 @CalledByNative
2067 public String getTitle() { 2134 public String getTitle() {
2068 if (mTitle == null) updateTitle(); 2135 if (mTitle == null) updateTitle();
2069 return mTitle; 2136 return mTitle;
2070 } 2137 }
2071 2138
2072 void updateTitle() { 2139 void updateTitle() {
2073 if (isFrozen()) return; 2140 if (isFrozen()) return;
2074 2141
2075 // When restoring the tabs, the title will no longer be populated, so re quest it from the 2142 // When restoring the tabs, the title will no longer be populated, so re quest it from the
2076 // ContentViewCore or NativePage (if present). 2143 // ContentViewCore or NativePage (if present).
2077 String title = ""; 2144 String title = "";
2078 if (mNativePage != null) { 2145 if (mNativePage != null) {
2079 title = mNativePage.getTitle(); 2146 title = mNativePage.getTitle();
2147 } else if (getBlimpContents() != null) {
2148 title = getBlimpContents().getNavigationController().getTitle();
2080 } else if (getWebContents() != null) { 2149 } else if (getWebContents() != null) {
2081 title = getWebContents().getTitle(); 2150 title = getWebContents().getTitle();
2082 } 2151 }
2083 updateTitle(title); 2152 updateTitle(title);
2084 } 2153 }
2085 2154
2086 /** 2155 /**
2087 * Cache the title for the current page. 2156 * Cache the title for the current page.
2088 * 2157 *
2089 * {@link ContentViewClient#onUpdateTitle} is unreliable, particularly for n avigating backwards 2158 * {@link ContentViewClient#onUpdateTitle} is unreliable, particularly for n avigating backwards
(...skipping 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after
3235 String packageName = ContextUtils.getApplicationContext().getPackageName (); 3304 String packageName = ContextUtils.getApplicationContext().getPackageName ();
3236 return getLaunchType() == TabLaunchType.FROM_EXTERNAL_APP 3305 return getLaunchType() == TabLaunchType.FROM_EXTERNAL_APP
3237 && !TextUtils.equals(getAppAssociatedWith(), packageName); 3306 && !TextUtils.equals(getAppAssociatedWith(), packageName);
3238 } 3307 }
3239 3308
3240 private native void nativeInit(); 3309 private native void nativeInit();
3241 private native void nativeDestroy(long nativeTabAndroid); 3310 private native void nativeDestroy(long nativeTabAndroid);
3242 private native void nativeInitWebContents(long nativeTabAndroid, boolean inc ognito, 3311 private native void nativeInitWebContents(long nativeTabAndroid, boolean inc ognito,
3243 WebContents webContents, TabWebContentsDelegateAndroid delegate, 3312 WebContents webContents, TabWebContentsDelegateAndroid delegate,
3244 ContextMenuPopulator contextMenuPopulator); 3313 ContextMenuPopulator contextMenuPopulator);
3314 private native BlimpContents nativeInitBlimpContents(long nativeTabAndroid, Profile profile);
3245 private native void nativeUpdateDelegates(long nativeTabAndroid, 3315 private native void nativeUpdateDelegates(long nativeTabAndroid,
3246 TabWebContentsDelegateAndroid delegate, ContextMenuPopulator context MenuPopulator); 3316 TabWebContentsDelegateAndroid delegate, ContextMenuPopulator context MenuPopulator);
3247 private native void nativeDestroyWebContents(long nativeTabAndroid, boolean deleteNative); 3317 private native void nativeDestroyWebContents(long nativeTabAndroid, boolean deleteNative);
3248 private native Profile nativeGetProfileAndroid(long nativeTabAndroid); 3318 private native Profile nativeGetProfileAndroid(long nativeTabAndroid);
3249 private native int nativeLoadUrl(long nativeTabAndroid, String url, String e xtraHeaders, 3319 private native int nativeLoadUrl(long nativeTabAndroid, String url, String e xtraHeaders,
3250 ResourceRequestBody postData, int transition, String referrerUrl, in t referrerPolicy, 3320 ResourceRequestBody postData, int transition, String referrerUrl, in t referrerPolicy,
3251 boolean isRendererInitiated, boolean shoulReplaceCurrentEntry, 3321 boolean isRendererInitiated, boolean shoulReplaceCurrentEntry,
3252 long intentReceivedTimestamp, boolean hasUserGesture); 3322 long intentReceivedTimestamp, boolean hasUserGesture);
3253 private native void nativeSetActiveNavigationEntryTitleForUrl(long nativeTab Android, String url, 3323 private native void nativeSetActiveNavigationEntryTitleForUrl(long nativeTab Android, String url,
3254 String title); 3324 String title);
3255 private native boolean nativePrint(long nativeTabAndroid); 3325 private native boolean nativePrint(long nativeTabAndroid);
3256 private native Bitmap nativeGetFavicon(long nativeTabAndroid); 3326 private native Bitmap nativeGetFavicon(long nativeTabAndroid);
3257 private native void nativeCreateHistoricalTab(long nativeTabAndroid); 3327 private native void nativeCreateHistoricalTab(long nativeTabAndroid);
3258 private native void nativeUpdateTopControlsState( 3328 private native void nativeUpdateTopControlsState(
3259 long nativeTabAndroid, int constraints, int current, boolean animate ); 3329 long nativeTabAndroid, int constraints, int current, boolean animate );
3260 private native void nativeLoadOriginalImage(long nativeTabAndroid); 3330 private native void nativeLoadOriginalImage(long nativeTabAndroid);
3261 private native long nativeGetBookmarkId(long nativeTabAndroid, boolean onlyE ditable); 3331 private native long nativeGetBookmarkId(long nativeTabAndroid, boolean onlyE ditable);
3262 private native boolean nativeIsOfflinePage(long nativeTabAndroid); 3332 private native boolean nativeIsOfflinePage(long nativeTabAndroid);
3263 private native OfflinePageItem nativeGetOfflinePage(long nativeTabAndroid); 3333 private native OfflinePageItem nativeGetOfflinePage(long nativeTabAndroid);
3264 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro id, 3334 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro id,
3265 InterceptNavigationDelegate delegate); 3335 InterceptNavigationDelegate delegate);
3266 private native void nativeAttachToTabContentManager(long nativeTabAndroid, 3336 private native void nativeAttachToTabContentManager(long nativeTabAndroid,
3267 TabContentManager tabContentManager); 3337 TabContentManager tabContentManager);
3268 private native void nativeAttachOverlayWebContents( 3338 private native void nativeAttachOverlayWebContents(
3269 long nativeTabAndroid, WebContents webContents, boolean visible); 3339 long nativeTabAndroid, WebContents webContents, boolean visible);
3270 private native void nativeDetachOverlayWebContents( 3340 private native void nativeDetachOverlayWebContents(
3271 long nativeTabAndroid, WebContents webContents); 3341 long nativeTabAndroid, WebContents webContents);
3272 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String url); 3342 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String url);
3273 } 3343 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698