Index: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModel.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModel.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModel.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ee779862cd2e356e2ac0a59edd8ffe98ceb15590 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/DocumentTabModel.java |
@@ -0,0 +1,182 @@ |
+// 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.ThreadUtils; |
+import org.chromium.base.VisibleForTesting; |
+import org.chromium.chrome.browser.Tab; |
+import org.chromium.chrome.browser.TabState; |
+import org.chromium.chrome.browser.tabmodel.TabModel; |
+ |
+/** |
+ * Extends the regular TabModel interface so that it can be aware of, and work with, Android's |
+ * Recents menu. |
+ */ |
+public interface DocumentTabModel extends TabModel { |
+ /** Stores information about a DocumentActivity. */ |
+ public static final class Entry { |
+ public final int tabId; |
+ public boolean canGoBack; |
+ public String initialUrl; |
+ public String currentUrl; |
+ public TabState tabState; |
+ public boolean isTabStateReady; |
+ public boolean isDirty; |
+ public Tab placeholderTab; |
+ |
+ public Entry(int tabId) { |
+ this.tabId = tabId; |
+ } |
+ |
+ public Entry(int tabId, String initialUrl) { |
+ this.tabId = tabId; |
+ this.initialUrl = initialUrl; |
+ } |
+ |
+ public Entry(int tabId, TabState tabState) { |
+ this.tabId = tabId; |
+ this.tabState = tabState; |
+ this.isTabStateReady = true; |
+ } |
+ } |
+ |
+ /** |
+ * Delays an action until the TabList initialization has reached a certain state. |
+ * Adds itself to the Observer list if the TabList is not ready, and is automatically removed |
+ * once its run condition is satisfied and the action is run. |
+ */ |
+ public abstract static class InitializationObserver { |
+ private final DocumentTabModel mTabModel; |
+ |
+ public InitializationObserver(DocumentTabModel tabModel) { |
+ mTabModel = tabModel; |
+ } |
+ |
+ /** @return Whether or not the TabList is initialized enough for the observer to run. */ |
+ public abstract boolean isSatisfied(int currentState); |
+ |
+ /** @return Whether or not the Activity owning the observer has died. */ |
+ public abstract boolean isCanceled(); |
+ |
+ /** Perform whatever action the observer is waiting for. */ |
+ protected abstract void runImmediately(); |
+ |
+ /** Perform the action if the TabList is ready, or observe the TabList until it is. */ |
+ public final void runWhenReady() { |
+ ThreadUtils.assertOnUiThread(); |
+ if (isSatisfied(mTabModel.getCurrentInitializationStage())) { |
+ runImmediately(); |
+ } else { |
+ mTabModel.addInitializationObserver(this); |
+ } |
+ } |
+ } |
+ |
+ /** |
+ * Begin setting up the C++-side counterpart to this class. |
+ */ |
+ void initializeNative(); |
+ |
+ /** |
+ * @return Whether the native-side pointer has been initialized. |
+ */ |
+ boolean isNativeInitialized(); |
+ |
+ /** |
+ * Returns the initial URL for the Document with the given ID. |
+ * @param tabId The ID for the document to return the url for. |
+ * @return The initial URL for the entry if it was found, null otherwise. |
+ */ |
+ String getInitialUrlForDocument(int tabId); |
+ |
+ /** |
+ * Returns the current URL for the Document with the given ID. |
+ * @param tabId The ID for the document to return the url for. |
+ * @return The current URL for the entry if it was found, null otherwise. |
+ */ |
+ String getCurrentUrlForDocument(int tabId); |
+ |
+ /** |
+ * Returns whether or not an attempt to restore the TabState for the given tab ID has finished. |
+ * @param tabId The ID for the document. |
+ * @return Whether or not an attempt to restore the tab state has finished, or true if there |
+ * is no Entry with the given ID. |
+ */ |
+ boolean isTabStateReady(int tabId); |
+ |
+ /** |
+ * Returns the tab state for the given file, loading it from disk if necessary. |
+ * @param tabId ID of the tab to restore. |
+ * @return TabState if it exists, null otherwise. |
+ */ |
+ TabState getTabStateForDocument(int tabId); |
+ |
+ /** |
+ * Checks whether or not there is an Entry for the given Tab. |
+ * @param tabId ID of the tab to check for. |
+ * @return Whether or not the Entry exists. |
+ */ |
+ boolean hasEntryForTabId(int tabId); |
+ |
+ /** |
+ * Check if a tab/task may be retargeted by an Intent. |
+ * @param tabId ID of the tab. |
+ * @return Whether or not the given tab ID may be retargeted. |
+ */ |
+ boolean isRetargetable(int tabId); |
+ |
+ /** |
+ * Closes the Tab at a particular index. |
+ * @param index Index of the tab to close. |
+ * @return Whether the was successfully closed. |
+ */ |
+ @VisibleForTesting |
+ boolean closeTabAt(int index); |
+ |
+ /** |
+ * Compares the current list of documents from the system to the internal entry map and creates |
+ * historical tabs for entries that exist in the internal map and not in the system database. |
+ * Those entries are then removed from the internal list to ensure there will be only one |
+ * recently closed tab per entry. |
+ */ |
+ void updateRecentlyClosed(); |
+ |
+ /** |
+ * Updates an entry in the TabModel. |
+ * @param intent Intent of the Activity that is modifying the TabModel. |
+ * @param tab Tab being updated. |
+ */ |
+ void updateEntry(Intent intent, Tab tab); |
+ |
+ /** |
+ * Adds the given Tab to this TabModel. |
+ * @param tab Tab to add. |
+ */ |
+ void addTab(Tab tab); |
+ |
+ /** |
+ * @return The stage of initialization that the DocumentTabModel is currently going through. |
+ */ |
+ int getCurrentInitializationStage(); |
+ |
+ /** |
+ * Adds an InitializationObserver to the DocumentTabModel. |
+ */ |
+ void addInitializationObserver(InitializationObserver observer); |
+ |
+ /** |
+ * Records the ID of the last shown Tab. |
+ * @param id ID of the last shown Tab. |
+ */ |
+ void setLastShownId(int id); |
+ |
+ /** |
+ * Called to begin loading tab state from disk. It will load the prioritized tab first |
+ * synchronously and then the rest of the tabs asynchronously in the background. |
+ */ |
+ void startTabStateLoad(); |
+} |