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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModelTest.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/javatests/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModelTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModelTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..682c0a072036b19ff62f8ccd1a62acf64b058c2d
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/document/OffTheRecordDocumentTabModelTest.java
@@ -0,0 +1,227 @@
+// 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.Context;
+import android.os.Build;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.base.CommandLine;
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.MinAndroidSdkLevel;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.tabmodel.OffTheRecordTabModel.OffTheRecordTabModelDelegate;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.chrome.test.util.browser.tabmodel.document.MockActivityDelegate;
+import org.chromium.chrome.test.util.browser.tabmodel.document.MockStorageDelegate;
+import org.chromium.chrome.test.util.browser.tabmodel.document.MockTabDelegate;
+import org.chromium.chrome.test.util.browser.tabmodel.document.TestInitializationObserver;
+import org.chromium.content.browser.test.NativeLibraryTestBase;
+
+/**
+ * Tests the functionality of the OffTheRecordDocumentTabModel.
+ * These tests rely on the DocumentTabModelImpl adding tasks it finds via the ActivityManager to its
+ * internal list, instead of loading a task file containing an explicit list like the regular
+ * DocumentTabModelTests do.
+ */
+@MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
+public class OffTheRecordDocumentTabModelTest extends NativeLibraryTestBase {
+ private MockActivityDelegate mActivityDelegate;
+ private MockStorageDelegate mStorageDelegate;
+ private MockTabDelegate mTabDelegate;
+
+ private OffTheRecordDocumentTabModel mTabModel;
+ private Profile mProfile;
+ private Context mContext;
+
+ static final String INIT_SWITCHES[] = { "chrome_shell" };
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ CommandLine.init(null);
+ loadNativeLibraryAndInitBrowserProcess();
+
+ mContext = getInstrumentation().getTargetContext();
+ mStorageDelegate = new MockStorageDelegate(mContext.getCacheDir(), true);
+ mActivityDelegate =
+ new MockActivityDelegate("DocumentActivity", "IncognitoDocumentActivity");
+ mTabDelegate = new MockTabDelegate();
+ }
+
+ private void createTabModel() {
+ OffTheRecordTabModelDelegate delegate = new OffTheRecordTabModelDelegate() {
+ private DocumentTabModel mModel;
+
+ @Override
+ public TabModel createTabModel() {
+ mModel = new DocumentTabModelImpl(mActivityDelegate, mStorageDelegate, mTabDelegate,
+ true, Tab.INVALID_TAB_ID, mContext);
+ return mModel;
+ }
+
+ @Override
+ public int getOffTheRecordTabCount() {
+ return mModel == null ? 0 : mModel.getCount();
+ }
+
+ };
+ mTabModel = new OffTheRecordDocumentTabModel(delegate, mActivityDelegate);
+ }
+
+ private void initializeNativeTabModel() throws Exception {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mTabModel.initializeNative();
+ mProfile = mTabModel.getProfile();
+ assertTrue(mProfile.isNativeInitialized());
+ }
+ });
+ TestInitializationObserver.waitUntilState(
+ mTabModel, DocumentTabModelImpl.STATE_DESERIALIZE_END);
+ }
+
+ @SmallTest
+ public void testNotCreatedWithoutIncognitoTask() throws Exception {
+ mActivityDelegate.addTask(false, 11684, "http://regular.tab");
+ createTabModel();
+ assertEquals(0, mTabModel.getCount());
+ assertFalse(mTabModel.isDocumentTabModelImplCreated());
+ }
+
+ @SmallTest
+ public void testCreatedIfIncognitoTaskExists() throws Exception {
+ mActivityDelegate.addTask(true, 11684, "http://incognito.tab");
+ createTabModel();
+ assertEquals(1, mTabModel.getCount());
+ assertTrue(mTabModel.isDocumentTabModelImplCreated());
+ }
+
+ @SmallTest
+ public void testTabModelDestructionWhenSwipedAway() throws Exception {
+ mActivityDelegate.addTask(false, 11683, "http://regular.tab");
+ mActivityDelegate.addTask(true, 11684, "http://incognito.tab");
+ mActivityDelegate.addTask(true, 11685, "http://second.incognito.tab");
+ createTabModel();
+ assertEquals(2, mTabModel.getCount());
+ assertTrue(mTabModel.isDocumentTabModelImplCreated());
+ mTabModel.startTabStateLoad();
+ initializeNativeTabModel();
+
+ mActivityDelegate.removeTask(true, 11684);
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mTabModel.updateRecentlyClosed();
+ }
+ });
+ assertEquals(1, mTabModel.getCount());
+ assertTrue(mTabModel.isDocumentTabModelImplCreated());
+ assertTrue(mProfile.isNativeInitialized());
+
+ mActivityDelegate.removeTask(true, 11685);
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mTabModel.updateRecentlyClosed();
+ }
+ });
+ assertEquals(0, mTabModel.getCount());
+ assertFalse(mTabModel.isDocumentTabModelImplCreated());
+ assertFalse(mProfile.isNativeInitialized());
+ }
+
+ @SmallTest
+ public void testTabModelDestructionWhenNativeNotInitialized() throws Exception {
+ mActivityDelegate.addTask(false, 11683, "http://regular.tab");
+ mActivityDelegate.addTask(true, 11684, "http://incognito.tab");
+ mActivityDelegate.addTask(true, 11685, "http://second.incognito.tab");
+ createTabModel();
+ assertEquals(2, mTabModel.getCount());
+ assertTrue(mTabModel.isDocumentTabModelImplCreated());
+
+ mActivityDelegate.removeTask(true, 11684);
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mTabModel.updateRecentlyClosed();
+ }
+ });
+ assertEquals(1, mTabModel.getCount());
+ assertTrue(mTabModel.isDocumentTabModelImplCreated());
+
+ mActivityDelegate.removeTask(true, 11685);
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mTabModel.updateRecentlyClosed();
+ }
+ });
+ assertEquals(0, mTabModel.getCount());
+ assertFalse(mTabModel.isDocumentTabModelImplCreated());
+ }
+
+ @SmallTest
+ public void testTabModelDestructionAfterCloseTabAt() throws Exception {
+ mActivityDelegate.addTask(false, 11683, "http://regular.tab");
+ mActivityDelegate.addTask(true, 11684, "http://incognito.tab");
+ mActivityDelegate.addTask(true, 11685, "http://second.incognito.tab");
+ createTabModel();
+ assertEquals(2, mTabModel.getCount());
+ assertTrue(mTabModel.isDocumentTabModelImplCreated());
+ mTabModel.startTabStateLoad();
+ initializeNativeTabModel();
+
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mTabModel.closeTabAt(0);
+ }
+ });
+ assertEquals(1, mActivityDelegate.getTasksFromRecents(false).size());
+ assertEquals(1, mActivityDelegate.getTasksFromRecents(true).size());
+ assertEquals(1, mTabModel.getCount());
+ assertTrue(mTabModel.isDocumentTabModelImplCreated());
+ assertTrue(mProfile.isNativeInitialized());
+
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mTabModel.closeTabAt(0);
+ }
+ });
+ assertEquals(1, mActivityDelegate.getTasksFromRecents(false).size());
+ assertEquals(0, mActivityDelegate.getTasksFromRecents(true).size());
+ assertEquals(0, mTabModel.getCount());
+ assertFalse(mTabModel.isDocumentTabModelImplCreated());
+ assertFalse(mProfile.isNativeInitialized());
+ }
+
+ @SmallTest
+ public void testTabModelDestructionAfterCloseAllTabs() throws Exception {
+ mActivityDelegate.addTask(false, 11683, "http://regular.tab");
+ mActivityDelegate.addTask(true, 11684, "http://incognito.tab");
+ mActivityDelegate.addTask(true, 11685, "http://second.incognito.tab");
+ createTabModel();
+ assertEquals(2, mTabModel.getCount());
+ assertTrue(mTabModel.isDocumentTabModelImplCreated());
+ mTabModel.startTabStateLoad();
+ initializeNativeTabModel();
+
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mTabModel.closeAllTabs();
+ }
+ });
+ assertEquals(1, mActivityDelegate.getTasksFromRecents(false).size());
+ assertEquals(0, mActivityDelegate.getTasksFromRecents(true).size());
+ assertEquals(0, mTabModel.getCount());
+ assertFalse(mTabModel.isDocumentTabModelImplCreated());
+ assertFalse(mProfile.isNativeInitialized());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698