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

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/android/java_staging/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..2f8c919433204f6dbbaab7d61da7796fade2cc94
--- /dev/null
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
@@ -0,0 +1,110 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tabmodel;
+
+import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
+import org.chromium.chrome.browser.device.DeviceClassManager;
+import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
+import org.chromium.content_public.browser.LoadUrlParams;
+import org.chromium.content_public.browser.WebContents;
+
+/**
+ * This class contains additions to the base TabModel implementation (notifications
+ * and overrides of existing methods).
+ *
+ * TODO: merge this into TabModelBase after upstreaming.
+ */
+public class TabModelImpl extends TabModelBase {
+ /**
+ * The application ID used for tabs opened from an application that does not specify an app ID
+ * in its VIEW intent extras.
+ */
+ public static final String UNKNOWN_APP_ID = "com.google.android.apps.chrome.unknown_app";
+
+ private final ChromeActivity mActivity;
+ private final TabModelSelectorUma mUma;
+ private final TabContentManager mTabContentManager;
+ private final TabPersistentStore mTabSaver;
+
+ public TabModelImpl(boolean incognito,
+ ChromeActivity activity, TabModelSelectorUma uma,
+ TabModelOrderController orderController, TabContentManager tabContentManager,
+ TabPersistentStore tabSaver, TabModelDelegate modelDelegate) {
+ super(incognito, orderController, modelDelegate);
+ mActivity = activity;
+ mUma = uma;
+ mTabContentManager = tabContentManager;
+ mTabSaver = tabSaver;
+ addObserver(mObserver);
+ }
+
+ private final TabModelObserver mObserver = new EmptyTabModelObserver() {
+ @Override
+ public void didSelectTab(Tab tab, TabSelectionType type, int lastId) {
+ boolean wasAlreadySelected = tab.getId() == lastId;
+
+ // TODO(joth): Make this even faster, ChromeTab.show() can still block for over 50ms.
+ // See http://b/5278198 and http://b/5035061
+ if (!wasAlreadySelected) {
+ if (type == TabSelectionType.FROM_USER) {
+ // We only want to record when the user actively switches to a different tab.
+ mUma.userSwitchedToTab();
+ }
+ }
+ }
+
+ @Override
+ public void didCloseTab(Tab tab) {
+ mTabContentManager.removeTabThumbnail(tab.getId());
+ mTabSaver.removeTabFromQueues(tab);
+
+ if (!isIncognito()) tab.createHistoricalTab();
+ }
+ };
+
+ @Override
+ public boolean supportsPendingClosures() {
+ return super.supportsPendingClosures() && DeviceClassManager.enableUndo(mActivity);
+ }
+
+ @Override
+ public void closeAllTabs(boolean allowDelegation, boolean uponExit) {
+ mTabSaver.cancelLoadingTabs(isIncognito());
+
+ if (uponExit) {
+ super.closeAllTabs(allowDelegation, uponExit);
+ return;
+ }
+
+ if (allowDelegation && mModelDelegate.closeAllTabsRequest(isIncognito())) return;
+
+ if (HomepageManager.isHomepageEnabled(mActivity)) {
+ super.closeAllTabs(false, uponExit);
+ return;
+ }
+
+ if (getCount() == 1) {
+ closeTab(getTabAt(0), true, false, true);
+ return;
+ }
+
+ super.closeAllTabs(true, false, true);
+ }
+
+ @Override
+ protected Tab createTabWithWebContents(boolean incognito, WebContents webContents,
+ int parentId) {
+ return mActivity.getTabCreator(incognito).createTabWithWebContents(webContents,
+ parentId, TabLaunchType.FROM_LONGPRESS_BACKGROUND);
+ }
+
+ @Override
+ protected Tab createNewTabForDevTools(String url) {
+ return mActivity.getTabCreator(false).createNewTab(new LoadUrlParams(url),
+ TabModel.TabLaunchType.FROM_MENU_OR_OVERVIEW, null);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698