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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModel.java

Issue 802343003: Upstream DocumentTabModelImpl and related classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved package, added OWNERS Created 6 years 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/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModel.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModel.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..d9d29c09aa688127b85c84ab2f5d649da83efe5f
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModel.java
@@ -0,0 +1,141 @@
+// Copyright 2014 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.document;
+
+import android.content.Intent;
+
+import org.chromium.base.VisibleForTesting;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.TabState;
+import org.chromium.chrome.browser.tabmodel.EmptyTabModel;
+import org.chromium.chrome.browser.tabmodel.OffTheRecordTabModel;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+
+/**
+ * Implements an OffTheRecord version of the DocumentTabModel. Timing is a little bit different for
+ * profile deletion because we don't get all the signals we'd expect when Tabs are closed. More
+ * specifically, Android doesn't fire signals when tasks are swiped away from the Recents menu if
+ * the Activity is dead when it occurs.
+ */
+public class OffTheRecordDocumentTabModel extends OffTheRecordTabModel implements DocumentTabModel {
+ public OffTheRecordDocumentTabModel(OffTheRecordTabModelDelegate tabModelCreator,
+ ActivityDelegate delegate) {
+ super(tabModelCreator);
+ if (delegate.getTasksFromRecents(true).size() > 0) {
+ ensureTabModelImpl();
+ }
+ }
+
+ @VisibleForTesting
+ public boolean isDocumentTabModelImplCreated() {
+ return !(getDelegateModel() instanceof EmptyTabModel);
+ }
+
+ private DocumentTabModel getDelegateDocumentTabModel() {
+ TabModel delegate = getDelegateModel();
+ return isDocumentTabModelImplCreated() ? (DocumentTabModel) delegate : null;
+ }
+
+ @Override
+ public void initializeNative() {
+ if (!isDocumentTabModelImplCreated()) return;
+ getDelegateDocumentTabModel().initializeNative();
+ }
+
+ @Override
+ public TabState getTabStateForDocument(int tabId) {
+ if (!isDocumentTabModelImplCreated()) return null;
+ return getDelegateDocumentTabModel().getTabStateForDocument(tabId);
+ }
+
+ @Override
+ public boolean isRetargetable(int tabId) {
+ if (!isDocumentTabModelImplCreated()) return false;
+ return getDelegateDocumentTabModel().isRetargetable(tabId);
+ }
+
+ @Override
+ public void updateRecentlyClosed() {
+ if (!isDocumentTabModelImplCreated()) return;
+ getDelegateDocumentTabModel().updateRecentlyClosed();
+ destroyIncognitoIfNecessary();
+ }
+
+ @Override
+ public boolean hasEntryForTabId(int tabId) {
+ if (!isDocumentTabModelImplCreated()) return false;
+ return getDelegateDocumentTabModel().hasEntryForTabId(tabId);
+ }
+
+ @Override
+ public void updateEntry(Intent intent, Tab tab) {
+ if (!isDocumentTabModelImplCreated()) return;
+ getDelegateDocumentTabModel().updateEntry(intent, tab);
+ }
+
+ @Override
+ public String getCurrentUrlForDocument(int tabId) {
+ if (!isDocumentTabModelImplCreated()) return null;
+ return getDelegateDocumentTabModel().getCurrentUrlForDocument(tabId);
+ }
+
+ @Override
+ public boolean isTabStateReady(int tabId) {
+ if (!isDocumentTabModelImplCreated()) return false;
+ return getDelegateDocumentTabModel().isTabStateReady(tabId);
+ }
+
+ @Override
+ public String getInitialUrlForDocument(int tabId) {
+ if (!isDocumentTabModelImplCreated()) return null;
+ return getDelegateDocumentTabModel().getInitialUrlForDocument(tabId);
+ }
+
+ @Override
+ public void addTab(Tab tab) {
+ ensureTabModelImpl();
+ getDelegateDocumentTabModel().addTab(tab);
+ }
+
+ @Override
+ public boolean closeTabAt(int index) {
+ boolean success = false;
+ if (isDocumentTabModelImplCreated()) {
+ success = getDelegateDocumentTabModel().closeTabAt(index);
+ }
+ destroyIncognitoIfNecessary();
+ return success;
+ }
+
+ @Override
+ public int getCurrentInitializationStage() {
+ if (!isDocumentTabModelImplCreated()) return DocumentTabModelImpl.STATE_UNINITIALIZED;
+ return getDelegateDocumentTabModel().getCurrentInitializationStage();
+ }
+
+ @Override
+ public boolean isNativeInitialized() {
+ if (!isDocumentTabModelImplCreated()) return false;
+ return getDelegateDocumentTabModel().isNativeInitialized();
+ }
+
+ @Override
+ public void addInitializationObserver(InitializationObserver observer) {
+ ensureTabModelImpl();
+ getDelegateDocumentTabModel().addInitializationObserver(observer);
+ }
+
+ @Override
+ public void setLastShownId(int id) {
+ ensureTabModelImpl();
+ getDelegateDocumentTabModel().setLastShownId(id);
+ }
+
+ @Override
+ public void startTabStateLoad() {
+ ensureTabModelImpl();
+ getDelegateDocumentTabModel().startTabStateLoad();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698