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

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

Issue 2984453002: Add Browser Actions tab model selector and open a tab through it if ChromeTabbedActivity is not ava…
Patch Set: Created 3 years, 5 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.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.app.Application; 9 import android.app.Application;
10 import android.content.Context; 10 import android.content.Context;
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 private float mPreviousBottomControlsOffsetY = Float.NaN; 345 private float mPreviousBottomControlsOffsetY = Float.NaN;
346 private float mPreviousContentOffsetY = Float.NaN; 346 private float mPreviousContentOffsetY = Float.NaN;
347 347
348 /** 348 /**
349 * Indicates whether this tab is detached from any activity and its correspo nding 349 * Indicates whether this tab is detached from any activity and its correspo nding
350 * {@link WindowAndroid}. 350 * {@link WindowAndroid}.
351 */ 351 */
352 private boolean mIsDetached; 352 private boolean mIsDetached;
353 353
354 /** 354 /**
355 * Indicates whether the history of this tab should be separated from Chrome history.
356 * This is true only for startSpeculation in CCT.
357 */
358 private boolean mIsHistoryDetached;
359
360 /**
355 * The UMA object used to report stats for this tab. Note that this may be n ull under certain 361 * The UMA object used to report stats for this tab. Note that this may be n ull under certain
356 * conditions, such as incognito mode. 362 * conditions, such as incognito mode.
357 */ 363 */
358 private TabUma mTabUma; 364 private TabUma mTabUma;
359 365
360 /** 366 /**
361 * Reference to the current sadTabView if one is defined. 367 * Reference to the current sadTabView if one is defined.
362 */ 368 */
363 private View mSadTabView; 369 private View mSadTabView;
364 370
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 public Tab(int id, int parentId, boolean incognito, Context context, 491 public Tab(int id, int parentId, boolean incognito, Context context,
486 WindowAndroid window, TabLaunchType type, TabCreationState creationS tate, 492 WindowAndroid window, TabLaunchType type, TabCreationState creationS tate,
487 TabState frozenState) { 493 TabState frozenState) {
488 mId = TabIdManager.getInstance().generateValidId(id); 494 mId = TabIdManager.getInstance().generateValidId(id);
489 mParentId = parentId; 495 mParentId = parentId;
490 mIncognito = incognito; 496 mIncognito = incognito;
491 mThemedApplicationContext = context != null ? new ContextThemeWrapper( 497 mThemedApplicationContext = context != null ? new ContextThemeWrapper(
492 context.getApplicationContext(), ChromeActivity.getThemeId()) : null; 498 context.getApplicationContext(), ChromeActivity.getThemeId()) : null;
493 mWindowAndroid = window; 499 mWindowAndroid = window;
494 mLaunchType = type; 500 mLaunchType = type;
495 if (mLaunchType == TabLaunchType.FROM_DETACHED) mIsDetached = true; 501 if (mLaunchType == TabLaunchType.FROM_DETACHED_SPECULATE
502 || mLaunchType == TabLaunchType.FROM_DETACHED_USER_ACTION) {
503 mIsDetached = true;
504 }
505 if (mLaunchType == TabLaunchType.FROM_DETACHED_SPECULATE) mIsHistoryDeta ched = true;
496 if (mThemedApplicationContext != null) { 506 if (mThemedApplicationContext != null) {
497 Resources resources = mThemedApplicationContext.getResources(); 507 Resources resources = mThemedApplicationContext.getResources();
498 mIdealFaviconSize = resources.getDimensionPixelSize(R.dimen.default_ favicon_size); 508 mIdealFaviconSize = resources.getDimensionPixelSize(R.dimen.default_ favicon_size);
499 mDefaultThemeColor = mIncognito 509 mDefaultThemeColor = mIncognito
500 ? ApiCompatibilityUtils.getColor(resources, R.color.incognit o_primary_color) 510 ? ApiCompatibilityUtils.getColor(resources, R.color.incognit o_primary_color)
501 : ApiCompatibilityUtils.getColor(resources, R.color.default_ primary_color); 511 : ApiCompatibilityUtils.getColor(resources, R.color.default_ primary_color);
502 mThemeColor = calculateThemeColor(false); 512 mThemeColor = calculateThemeColor(false);
503 } else { 513 } else {
504 mIdealFaviconSize = 16; 514 mIdealFaviconSize = 16;
505 mDefaultThemeColor = 0; 515 mDefaultThemeColor = 0;
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
1287 } 1297 }
1288 } 1298 }
1289 1299
1290 ContentViewCore contentViewCore = ContentViewCore.fromWebContents(we bContents); 1300 ContentViewCore contentViewCore = ContentViewCore.fromWebContents(we bContents);
1291 1301
1292 if (contentViewCore == null) { 1302 if (contentViewCore == null) {
1293 initContentViewCore(webContents); 1303 initContentViewCore(webContents);
1294 } else { 1304 } else {
1295 setContentViewCore(contentViewCore); 1305 setContentViewCore(contentViewCore);
1296 } 1306 }
1297
1298 mContentViewCore.addImeEventObserver(new ImeEventObserver() { 1307 mContentViewCore.addImeEventObserver(new ImeEventObserver() {
1299 @Override 1308 @Override
1300 public void onImeEvent() { 1309 public void onImeEvent() {
1301 // Some text was set in the page. Don't reuse it if a tab is 1310 // Some text was set in the page. Don't reuse it if a tab is
1302 // open from the same external application, we might lose so me 1311 // open from the same external application, we might lose so me
1303 // user data. 1312 // user data.
1304 mAppAssociatedWith = null; 1313 mAppAssociatedWith = null;
1305 } 1314 }
1306 1315
1307 @Override 1316 @Override
1308 public void onNodeAttributeUpdated(boolean editable, boolean pas sword) { 1317 public void onNodeAttributeUpdated(boolean editable, boolean pas sword) {
1309 if (getFullscreenManager() == null) return; 1318 if (getFullscreenManager() == null) return;
1310 updateFullscreenEnabledState(); 1319 updateFullscreenEnabledState();
1311 } 1320 }
1312 }); 1321 });
1313 1322
1314 if (!creatingWebContents && webContents.isLoadingToDifferentDocument ()) { 1323 if (!creatingWebContents && webContents.isLoadingToDifferentDocument ()) {
1315 didStartPageLoad(webContents.getUrl(), false); 1324 didStartPageLoad(webContents.getUrl(), false);
1316 } 1325 }
1317
1318 getAppBannerManager().setIsEnabledForTab(mDelegateFactory.canShowApp Banners(this)); 1326 getAppBannerManager().setIsEnabledForTab(mDelegateFactory.canShowApp Banners(this));
1319 } finally { 1327 } finally {
1320 if (mTimestampMillis == INVALID_TIMESTAMP) { 1328 if (mTimestampMillis == INVALID_TIMESTAMP) {
1321 mTimestampMillis = System.currentTimeMillis(); 1329 mTimestampMillis = System.currentTimeMillis();
1322 } 1330 }
1323 1331
1324 TraceEvent.end("Tab.initialize"); 1332 TraceEvent.end("Tab.initialize");
1325 } 1333 }
1326 } 1334 }
1327 1335
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 mWebContentsDelegate = mDelegateFactory.createWebContentsDelegate(this); 1428 mWebContentsDelegate = mDelegateFactory.createWebContentsDelegate(this);
1421 nativeUpdateDelegates(mNativeTabAndroid, 1429 nativeUpdateDelegates(mNativeTabAndroid,
1422 mWebContentsDelegate, mDelegateFactory.createContextMenuPopulato r(this)); 1430 mWebContentsDelegate, mDelegateFactory.createContextMenuPopulato r(this));
1423 mBrowserControlsVisibilityDelegate = 1431 mBrowserControlsVisibilityDelegate =
1424 mDelegateFactory.createBrowserControlsVisibilityDelegate(this); 1432 mDelegateFactory.createBrowserControlsVisibilityDelegate(this);
1425 setInterceptNavigationDelegate(mDelegateFactory.createInterceptNavigatio nDelegate(this)); 1433 setInterceptNavigationDelegate(mDelegateFactory.createInterceptNavigatio nDelegate(this));
1426 getAppBannerManager().setIsEnabledForTab(mDelegateFactory.canShowAppBann ers(this)); 1434 getAppBannerManager().setIsEnabledForTab(mDelegateFactory.canShowAppBann ers(this));
1427 1435
1428 reparentingParams.finalizeTabReparenting(); 1436 reparentingParams.finalizeTabReparenting();
1429 mIsDetached = false; 1437 mIsDetached = false;
1438 mIsHistoryDetached = false;
1430 nativeAttachDetachedTab(mNativeTabAndroid); 1439 nativeAttachDetachedTab(mNativeTabAndroid);
1431 1440
1432 // Reload the NativePage (if any), since the old NativePage has a refere nce to the old 1441 // Reload the NativePage (if any), since the old NativePage has a refere nce to the old
1433 // activity. 1442 // activity.
1434 maybeShowNativePage(getUrl(), true); 1443 maybeShowNativePage(getUrl(), true);
1435 1444
1436 mIsTabStateDirty = true; 1445 mIsTabStateDirty = true;
1437 1446
1438 for (TabObserver observer : mObservers) { 1447 for (TabObserver observer : mObservers) {
1439 observer.onReparentingFinished(this); 1448 observer.onReparentingFinished(this);
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1663 cvc.getContainerView().setOnSystemUiVisibilityChangeListener(this); 1672 cvc.getContainerView().setOnSystemUiVisibilityChangeListener(this);
1664 1673
1665 mContentView = cvc.getContainerView(); 1674 mContentView = cvc.getContainerView();
1666 mWebContentsDelegate = mDelegateFactory.createWebContentsDelegate(th is); 1675 mWebContentsDelegate = mDelegateFactory.createWebContentsDelegate(th is);
1667 mWebContentsObserver = 1676 mWebContentsObserver =
1668 new TabWebContentsObserver(mContentViewCore.getWebContents() , this); 1677 new TabWebContentsObserver(mContentViewCore.getWebContents() , this);
1669 1678
1670 mDownloadDelegate = new ChromeDownloadDelegate(mThemedApplicationCon text, this); 1679 mDownloadDelegate = new ChromeDownloadDelegate(mThemedApplicationCon text, this);
1671 1680
1672 assert mNativeTabAndroid != 0; 1681 assert mNativeTabAndroid != 0;
1673 nativeInitWebContents(mNativeTabAndroid, mIncognito, mIsDetached, 1682 nativeInitWebContents(mNativeTabAndroid, mIncognito, mIsHistoryDetac hed,
Yusuf 2017/07/18 22:59:47 This param is for isBackgroundTab, right? Is that
ltian 2017/08/07 23:24:12 New design will open all tabs in lazy load mode so
1674 mContentViewCore.getWebContents(), mWebContentsDelegate, 1683 mContentViewCore.getWebContents(), mWebContentsDelegate,
1675 new TabContextMenuPopulator( 1684 new TabContextMenuPopulator(
1676 mDelegateFactory.createContextMenuPopulator(this), t his)); 1685 mDelegateFactory.createContextMenuPopulator(this), t his));
1677 1686
1678 // In the case where restoring a Tab or showing a prerendered one we already have a 1687 // In the case where restoring a Tab or showing a prerendered one we already have a
1679 // valid infobar container, no need to recreate one. 1688 // valid infobar container, no need to recreate one.
1680 if (mInfoBarContainer == null) { 1689 if (mInfoBarContainer == null) {
1681 WindowAndroid windowAndroid = getWindowAndroid(); 1690 WindowAndroid windowAndroid = getWindowAndroid();
1682 Activity activity = 1691 Activity activity =
1683 windowAndroid == null ? null : windowAndroid.getActivity ().get(); 1692 windowAndroid == null ? null : windowAndroid.getActivity ().get();
(...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after
2947 } 2956 }
2948 2957
2949 /** 2958 /**
2950 * Creates an instance of a {@link Tab} that is fully detached from any acti vity. 2959 * Creates an instance of a {@link Tab} that is fully detached from any acti vity.
2951 * Also performs general tab initialization as well as detached specifics. 2960 * Also performs general tab initialization as well as detached specifics.
2952 * 2961 *
2953 * The current application context must allow the creation of a WindowAndroi d. 2962 * The current application context must allow the creation of a WindowAndroi d.
2954 * 2963 *
2955 * @return The newly created and initialized tab. 2964 * @return The newly created and initialized tab.
2956 */ 2965 */
2957 public static Tab createDetached(TabDelegateFactory delegateFactory) { 2966 public static Tab createDetached(TabDelegateFactory delegateFactory, boolean byUserAction) {
2958 Context context = ContextUtils.getApplicationContext(); 2967 Context context = ContextUtils.getApplicationContext();
2959 WindowAndroid windowAndroid = new WindowAndroid(context); 2968 WindowAndroid windowAndroid = new WindowAndroid(context);
2960 Tab tab = new Tab(INVALID_TAB_ID, INVALID_TAB_ID, false, context, window Android, 2969 TabLaunchType launchType = byUserAction ? TabLaunchType.FROM_DETACHED_US ER_ACTION
2961 TabLaunchType.FROM_DETACHED, null, null); 2970 : TabLaunchType.FROM_DETACHED_SP ECULATE;
2971 Tab tab = new Tab(INVALID_TAB_ID, INVALID_TAB_ID, false, context, window Android, launchType,
2972 null, null);
2962 tab.initialize(null, null, delegateFactory, true, false); 2973 tab.initialize(null, null, delegateFactory, true, false);
2963 2974
2964 // Resize the webContent to avoid expensive post load resize when attach ing the tab. 2975 // Resize the webContent to avoid expensive post load resize when attach ing the tab.
2965 Rect bounds = ExternalPrerenderHandler.estimateContentSize((Application) context, false); 2976 Rect bounds = ExternalPrerenderHandler.estimateContentSize((Application) context, false);
2966 int width = bounds.right - bounds.left; 2977 int width = bounds.right - bounds.left;
2967 int height = bounds.bottom - bounds.top; 2978 int height = bounds.bottom - bounds.top;
2968 tab.getContentViewCore().onSizeChanged(width, height, 0, 0); 2979 tab.getContentViewCore().onSizeChanged(width, height, 0, 0);
2969 2980
2970 tab.detach(null, null); 2981 tab.detach(null, null);
2971 return tab; 2982 return tab;
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
3130 private native long nativeGetBookmarkId(long nativeTabAndroid, boolean onlyE ditable); 3141 private native long nativeGetBookmarkId(long nativeTabAndroid, boolean onlyE ditable);
3131 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro id, 3142 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro id,
3132 InterceptNavigationDelegate delegate); 3143 InterceptNavigationDelegate delegate);
3133 private native void nativeAttachToTabContentManager(long nativeTabAndroid, 3144 private native void nativeAttachToTabContentManager(long nativeTabAndroid,
3134 TabContentManager tabContentManager); 3145 TabContentManager tabContentManager);
3135 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String url); 3146 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String url);
3136 private native void nativeSetWebappManifestScope(long nativeTabAndroid, Stri ng scope); 3147 private native void nativeSetWebappManifestScope(long nativeTabAndroid, Stri ng scope);
3137 private native void nativeEnableEmbeddedMediaExperience(long nativeTabAndroi d, boolean enabled); 3148 private native void nativeEnableEmbeddedMediaExperience(long nativeTabAndroi d, boolean enabled);
3138 private native void nativeAttachDetachedTab(long nativeTabAndroid); 3149 private native void nativeAttachDetachedTab(long nativeTabAndroid);
3139 } 3150 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698