| OLD | NEW |
| 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.tabmodel; | 5 package org.chromium.chrome.browser.tabmodel; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.support.test.InstrumentationRegistry; |
| 9 import android.support.test.annotation.UiThreadTest; |
| 8 import android.support.test.filters.SmallTest; | 10 import android.support.test.filters.SmallTest; |
| 9 import android.test.InstrumentationTestCase; | 11 import android.support.test.rule.UiThreadTestRule; |
| 12 |
| 13 import org.junit.Assert; |
| 14 import org.junit.Before; |
| 15 import org.junit.Rule; |
| 16 import org.junit.Test; |
| 17 import org.junit.runner.RunWith; |
| 10 | 18 |
| 11 import org.chromium.base.ContextUtils; | 19 import org.chromium.base.ContextUtils; |
| 12 import org.chromium.base.StreamUtil; | 20 import org.chromium.base.StreamUtil; |
| 13 import org.chromium.base.ThreadUtils; | 21 import org.chromium.base.ThreadUtils; |
| 14 import org.chromium.base.annotations.SuppressFBWarnings; | 22 import org.chromium.base.annotations.SuppressFBWarnings; |
| 15 import org.chromium.base.metrics.RecordHistogram; | 23 import org.chromium.base.metrics.RecordHistogram; |
| 16 import org.chromium.base.test.util.AdvancedMockContext; | 24 import org.chromium.base.test.util.AdvancedMockContext; |
| 17 import org.chromium.base.test.util.Feature; | 25 import org.chromium.base.test.util.Feature; |
| 18 import org.chromium.base.test.util.RetryOnFailure; | 26 import org.chromium.base.test.util.RetryOnFailure; |
| 19 import org.chromium.chrome.browser.TabState; | 27 import org.chromium.chrome.browser.TabState; |
| 20 import org.chromium.chrome.browser.tab.Tab; | 28 import org.chromium.chrome.browser.tab.Tab; |
| 21 import org.chromium.chrome.browser.tab.TabIdManager; | 29 import org.chromium.chrome.browser.tab.TabIdManager; |
| 30 import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
| 22 import org.chromium.chrome.test.util.ApplicationData; | 31 import org.chromium.chrome.test.util.ApplicationData; |
| 23 import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector; | 32 import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector; |
| 24 | 33 |
| 25 import java.io.File; | 34 import java.io.File; |
| 26 import java.io.FileOutputStream; | 35 import java.io.FileOutputStream; |
| 27 import java.io.IOException; | 36 import java.io.IOException; |
| 28 import java.util.concurrent.Callable; | 37 import java.util.concurrent.Callable; |
| 29 import java.util.concurrent.ExecutionException; | 38 import java.util.concurrent.ExecutionException; |
| 30 | 39 |
| 31 /** | 40 /** |
| 32 * Test that migrating the old tab state folder structure to the new one works. | 41 * Test that migrating the old tab state folder structure to the new one works. |
| 33 */ | 42 */ |
| 34 public class RestoreMigrateTest extends InstrumentationTestCase { | 43 @RunWith(ChromeJUnit4ClassRunner.class) |
| 35 | 44 public class RestoreMigrateTest { |
| 36 private Context mAppContext; | 45 private Context mAppContext; |
| 37 | 46 |
| 38 private void writeStateFile(final TabModelSelector selector, int index) thro
ws IOException { | 47 private void writeStateFile(final TabModelSelector selector, int index) thro
ws IOException { |
| 39 byte[] data = ThreadUtils.runOnUiThreadBlockingNoException( | 48 byte[] data = ThreadUtils.runOnUiThreadBlockingNoException( |
| 40 new Callable<byte[]>() { | 49 new Callable<byte[]>() { |
| 41 @Override | 50 @Override |
| 42 public byte[] call() throws Exception { | 51 public byte[] call() throws Exception { |
| 43 return TabPersistentStore.serializeTabModelSelector(sele
ctor, null); | 52 return TabPersistentStore.serializeTabModelSelector(sele
ctor, null); |
| 44 } | 53 } |
| 45 }); | 54 }); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 57 private int getMaxId(TabModelSelector selector) { | 66 private int getMaxId(TabModelSelector selector) { |
| 58 int maxId = 0; | 67 int maxId = 0; |
| 59 for (TabList list : selector.getModels()) { | 68 for (TabList list : selector.getModels()) { |
| 60 for (int i = 0; i < list.getCount(); i++) { | 69 for (int i = 0; i < list.getCount(); i++) { |
| 61 maxId = Math.max(maxId, list.getTabAt(i).getId()); | 70 maxId = Math.max(maxId, list.getTabAt(i).getId()); |
| 62 } | 71 } |
| 63 } | 72 } |
| 64 return maxId; | 73 return maxId; |
| 65 } | 74 } |
| 66 | 75 |
| 67 @Override | 76 @Rule |
| 68 protected void setUp() throws Exception { | 77 public UiThreadTestRule mRule = new UiThreadTestRule(); |
| 69 super.setUp(); | 78 |
| 70 mAppContext = new AdvancedMockContext( | 79 @Before |
| 71 getInstrumentation().getTargetContext().getApplicationContext())
; | 80 public void setUp() throws Exception { |
| 81 mAppContext = new AdvancedMockContext(InstrumentationRegistry.getInstrum
entation() |
| 82 .getTargetContext() |
| 83 .getApplicationContext()); |
| 72 ContextUtils.initApplicationContextForTests(mAppContext); | 84 ContextUtils.initApplicationContextForTests(mAppContext); |
| 73 } | 85 } |
| 74 | 86 |
| 75 private TabPersistentStore buildTabPersistentStore( | 87 private TabPersistentStore buildTabPersistentStore( |
| 76 final TabModelSelector selector, final int selectorIndex) { | 88 final TabModelSelector selector, final int selectorIndex) { |
| 77 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<TabPers
istentStore>() { | 89 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<TabPers
istentStore>() { |
| 78 @Override | 90 @Override |
| 79 public TabPersistentStore call() throws Exception { | 91 public TabPersistentStore call() throws Exception { |
| 80 TabPersistencePolicy persistencePolicy = new TabbedModeTabPersis
tencePolicy( | 92 TabPersistencePolicy persistencePolicy = new TabbedModeTabPersis
tencePolicy( |
| 81 selectorIndex, false); | 93 selectorIndex, false); |
| 82 TabPersistentStore store = new TabPersistentStore( | 94 TabPersistentStore store = new TabPersistentStore( |
| 83 persistencePolicy, selector, null, null); | 95 persistencePolicy, selector, null, null); |
| 84 return store; | 96 return store; |
| 85 } | 97 } |
| 86 }); | 98 }); |
| 87 } | 99 } |
| 88 | 100 |
| 89 /** | 101 /** |
| 90 * Test that normal migration of state files works. | 102 * Test that normal migration of state files works. |
| 91 * @throws IOException | 103 * @throws IOException |
| 92 * @throws InterruptedException | 104 * @throws InterruptedException |
| 93 * @throws ExecutionException | 105 * @throws ExecutionException |
| 94 */ | 106 */ |
| 107 @Test |
| 95 @SuppressWarnings("unused") | 108 @SuppressWarnings("unused") |
| 96 @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE") | 109 @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE") |
| 97 @SmallTest | 110 @SmallTest |
| 98 @Feature({"TabPersistentStore"}) | 111 @Feature({"TabPersistentStore"}) |
| 112 @UiThreadTest |
| 99 public void testMigrateData() throws IOException, InterruptedException, Exec
utionException { | 113 public void testMigrateData() throws IOException, InterruptedException, Exec
utionException { |
| 100 ApplicationData.clearAppData(mAppContext); | 114 ApplicationData.clearAppData(mAppContext); |
| 101 | 115 |
| 102 // Write old state files. | 116 // Write old state files. |
| 103 File filesDir = mAppContext.getFilesDir(); | 117 File filesDir = mAppContext.getFilesDir(); |
| 104 File stateFile = new File(filesDir, TabbedModeTabPersistencePolicy.LEGAC
Y_SAVED_STATE_FILE); | 118 File stateFile = new File(filesDir, TabbedModeTabPersistencePolicy.LEGAC
Y_SAVED_STATE_FILE); |
| 105 File tab0 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "0
"); | 119 File tab0 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "0
"); |
| 106 File tab1 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "1
"); | 120 File tab1 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "1
"); |
| 107 File tab2 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INCO
GNITO + "2"); | 121 File tab2 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INCO
GNITO + "2"); |
| 108 File tab3 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INCO
GNITO + "3"); | 122 File tab3 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INCO
GNITO + "3"); |
| 109 | 123 |
| 110 assertTrue("Could not create state file", stateFile.createNewFile()); | 124 Assert.assertTrue("Could not create state file", stateFile.createNewFile
()); |
| 111 assertTrue("Could not create tab 0 file", tab0.createNewFile()); | 125 Assert.assertTrue("Could not create tab 0 file", tab0.createNewFile()); |
| 112 assertTrue("Could not create tab 1 file", tab1.createNewFile()); | 126 Assert.assertTrue("Could not create tab 1 file", tab1.createNewFile()); |
| 113 assertTrue("Could not create tab 2 file", tab2.createNewFile()); | 127 Assert.assertTrue("Could not create tab 2 file", tab2.createNewFile()); |
| 114 assertTrue("Could not create tab 3 file", tab3.createNewFile()); | 128 Assert.assertTrue("Could not create tab 3 file", tab3.createNewFile()); |
| 115 | 129 |
| 116 // Build the TabPersistentStore which will try to move the files. | 130 // Build the TabPersistentStore which will try to move the files. |
| 117 MockTabModelSelector selector = new MockTabModelSelector(0, 0, null); | 131 MockTabModelSelector selector = new MockTabModelSelector(0, 0, null); |
| 118 TabPersistentStore store = buildTabPersistentStore(selector, 0); | 132 TabPersistentStore store = buildTabPersistentStore(selector, 0); |
| 119 store.waitForMigrationToFinish(); | 133 store.waitForMigrationToFinish(); |
| 120 | 134 |
| 121 // Make sure we don't hit the migration path again. | 135 // Make sure we don't hit the migration path again. |
| 122 assertTrue(ContextUtils.getAppSharedPreferences().getBoolean( | 136 Assert.assertTrue(ContextUtils.getAppSharedPreferences().getBoolean( |
| 123 TabbedModeTabPersistencePolicy.PREF_HAS_RUN_FILE_MIGRATION, fals
e)); | 137 TabbedModeTabPersistencePolicy.PREF_HAS_RUN_FILE_MIGRATION, fals
e)); |
| 124 | 138 |
| 125 // Check that the files were moved. | 139 // Check that the files were moved. |
| 126 File newDir = TabbedModeTabPersistencePolicy.getOrCreateTabbedModeStateD
irectory(); | 140 File newDir = TabbedModeTabPersistencePolicy.getOrCreateTabbedModeStateD
irectory(); |
| 127 File newStateFile = new File(newDir, TabbedModeTabPersistencePolicy.getS
tateFileName(0)); | 141 File newStateFile = new File(newDir, TabbedModeTabPersistencePolicy.getS
tateFileName(0)); |
| 128 File newTab0 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
0"); | 142 File newTab0 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
0"); |
| 129 File newTab1 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
1"); | 143 File newTab1 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
1"); |
| 130 File newTab2 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INC
OGNITO + "2"); | 144 File newTab2 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INC
OGNITO + "2"); |
| 131 File newTab3 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INC
OGNITO + "3"); | 145 File newTab3 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INC
OGNITO + "3"); |
| 132 | 146 |
| 133 assertTrue("Could not find new state file", newStateFile.exists()); | 147 Assert.assertTrue("Could not find new state file", newStateFile.exists()
); |
| 134 assertTrue("Could not find new tab 0 file", newTab0.exists()); | 148 Assert.assertTrue("Could not find new tab 0 file", newTab0.exists()); |
| 135 assertTrue("Could not find new tab 1 file", newTab1.exists()); | 149 Assert.assertTrue("Could not find new tab 1 file", newTab1.exists()); |
| 136 assertTrue("Could not find new tab 2 file", newTab2.exists()); | 150 Assert.assertTrue("Could not find new tab 2 file", newTab2.exists()); |
| 137 assertTrue("Could not find new tab 3 file", newTab3.exists()); | 151 Assert.assertTrue("Could not find new tab 3 file", newTab3.exists()); |
| 138 | 152 |
| 139 assertFalse("Could still find old state file", stateFile.exists()); | 153 Assert.assertFalse("Could still find old state file", stateFile.exists()
); |
| 140 assertFalse("Could still find old tab 0 file", tab0.exists()); | 154 Assert.assertFalse("Could still find old tab 0 file", tab0.exists()); |
| 141 assertFalse("Could still find old tab 1 file", tab1.exists()); | 155 Assert.assertFalse("Could still find old tab 1 file", tab1.exists()); |
| 142 assertFalse("Could still find old tab 2 file", tab2.exists()); | 156 Assert.assertFalse("Could still find old tab 2 file", tab2.exists()); |
| 143 assertFalse("Could still find old tab 3 file", tab3.exists()); | 157 Assert.assertFalse("Could still find old tab 3 file", tab3.exists()); |
| 144 | 158 |
| 145 ApplicationData.clearAppData(mAppContext); | 159 ApplicationData.clearAppData(mAppContext); |
| 146 } | 160 } |
| 147 | 161 |
| 148 /** | 162 /** |
| 149 * Test that migration skips if it already has files in the new folder. | 163 * Test that migration skips if it already has files in the new folder. |
| 150 * @throws IOException | 164 * @throws IOException |
| 151 * @throws InterruptedException | 165 * @throws InterruptedException |
| 152 * @throws ExecutionException | 166 * @throws ExecutionException |
| 153 */ | 167 */ |
| 168 @Test |
| 154 @SuppressWarnings("unused") | 169 @SuppressWarnings("unused") |
| 155 @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE") | 170 @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE") |
| 156 @SmallTest | 171 @SmallTest |
| 157 @Feature({"TabPersistentStore"}) | 172 @Feature({"TabPersistentStore"}) |
| 173 @UiThreadTest |
| 158 public void testSkipMigrateData() throws IOException, InterruptedException,
ExecutionException { | 174 public void testSkipMigrateData() throws IOException, InterruptedException,
ExecutionException { |
| 159 ApplicationData.clearAppData(mAppContext); | 175 ApplicationData.clearAppData(mAppContext); |
| 160 | 176 |
| 161 // Write old state files. | 177 // Write old state files. |
| 162 File filesDir = mAppContext.getFilesDir(); | 178 File filesDir = mAppContext.getFilesDir(); |
| 163 File stateFile = new File(filesDir, TabbedModeTabPersistencePolicy.LEGAC
Y_SAVED_STATE_FILE); | 179 File stateFile = new File(filesDir, TabbedModeTabPersistencePolicy.LEGAC
Y_SAVED_STATE_FILE); |
| 164 File tab0 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "0
"); | 180 File tab0 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "0
"); |
| 165 File tab1 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "1
"); | 181 File tab1 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "1
"); |
| 166 File tab2 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INCO
GNITO + "2"); | 182 File tab2 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INCO
GNITO + "2"); |
| 167 File tab3 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INCO
GNITO + "3"); | 183 File tab3 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INCO
GNITO + "3"); |
| 168 | 184 |
| 169 assertTrue("Could not create state file", stateFile.createNewFile()); | 185 Assert.assertTrue("Could not create state file", stateFile.createNewFile
()); |
| 170 assertTrue("Could not create tab 0 file", tab0.createNewFile()); | 186 Assert.assertTrue("Could not create tab 0 file", tab0.createNewFile()); |
| 171 assertTrue("Could not create tab 1 file", tab1.createNewFile()); | 187 Assert.assertTrue("Could not create tab 1 file", tab1.createNewFile()); |
| 172 assertTrue("Could not create tab 2 file", tab2.createNewFile()); | 188 Assert.assertTrue("Could not create tab 2 file", tab2.createNewFile()); |
| 173 assertTrue("Could not create tab 3 file", tab3.createNewFile()); | 189 Assert.assertTrue("Could not create tab 3 file", tab3.createNewFile()); |
| 174 | 190 |
| 175 // Write new state files | 191 // Write new state files |
| 176 File newDir = TabbedModeTabPersistencePolicy.getOrCreateTabbedModeStateD
irectory(); | 192 File newDir = TabbedModeTabPersistencePolicy.getOrCreateTabbedModeStateD
irectory(); |
| 177 File newStateFile = new File(newDir, TabbedModeTabPersistencePolicy.getS
tateFileName(0)); | 193 File newStateFile = new File(newDir, TabbedModeTabPersistencePolicy.getS
tateFileName(0)); |
| 178 File newTab4 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
4"); | 194 File newTab4 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
4"); |
| 179 | 195 |
| 180 assertTrue("Could not create new tab 4 file", newTab4.createNewFile()); | 196 Assert.assertTrue("Could not create new tab 4 file", newTab4.createNewFi
le()); |
| 181 assertTrue("Could not create new state file", newStateFile.createNewFile
()); | 197 Assert.assertTrue("Could not create new state file", newStateFile.create
NewFile()); |
| 182 | 198 |
| 183 // Build the TabPersistentStore which will try to move the files. | 199 // Build the TabPersistentStore which will try to move the files. |
| 184 MockTabModelSelector selector = new MockTabModelSelector(0, 0, null); | 200 MockTabModelSelector selector = new MockTabModelSelector(0, 0, null); |
| 185 TabPersistentStore store = buildTabPersistentStore(selector, 0); | 201 TabPersistentStore store = buildTabPersistentStore(selector, 0); |
| 186 store.waitForMigrationToFinish(); | 202 store.waitForMigrationToFinish(); |
| 187 | 203 |
| 188 assertTrue("Could not find new state file", newStateFile.exists()); | 204 Assert.assertTrue("Could not find new state file", newStateFile.exists()
); |
| 189 assertTrue("Could not find new tab 4 file", newTab4.exists()); | 205 Assert.assertTrue("Could not find new tab 4 file", newTab4.exists()); |
| 190 | 206 |
| 191 // Make sure the old files did not move | 207 // Make sure the old files did not move |
| 192 File newTab0 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
0"); | 208 File newTab0 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
0"); |
| 193 File newTab1 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
1"); | 209 File newTab1 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
1"); |
| 194 File newTab2 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INC
OGNITO + "2"); | 210 File newTab2 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INC
OGNITO + "2"); |
| 195 File newTab3 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INC
OGNITO + "3"); | 211 File newTab3 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX_INC
OGNITO + "3"); |
| 196 | 212 |
| 197 assertFalse("Could find new tab 0 file", newTab0.exists()); | 213 Assert.assertFalse("Could find new tab 0 file", newTab0.exists()); |
| 198 assertFalse("Could find new tab 1 file", newTab1.exists()); | 214 Assert.assertFalse("Could find new tab 1 file", newTab1.exists()); |
| 199 assertFalse("Could find new tab 2 file", newTab2.exists()); | 215 Assert.assertFalse("Could find new tab 2 file", newTab2.exists()); |
| 200 assertFalse("Could find new tab 3 file", newTab3.exists()); | 216 Assert.assertFalse("Could find new tab 3 file", newTab3.exists()); |
| 201 | 217 |
| 202 ApplicationData.clearAppData(mAppContext); | 218 ApplicationData.clearAppData(mAppContext); |
| 203 } | 219 } |
| 204 | 220 |
| 205 /** | 221 /** |
| 206 * Test that the state file migration skips unrelated files. | 222 * Test that the state file migration skips unrelated files. |
| 207 * @throws IOException | 223 * @throws IOException |
| 208 * @throws InterruptedException | 224 * @throws InterruptedException |
| 209 * @throws ExecutionException | 225 * @throws ExecutionException |
| 210 */ | 226 */ |
| 227 @Test |
| 211 @SuppressWarnings("unused") | 228 @SuppressWarnings("unused") |
| 212 @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE") | 229 @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE") |
| 213 @SmallTest | 230 @SmallTest |
| 214 @Feature({"TabPersistentStore"}) | 231 @Feature({"TabPersistentStore"}) |
| 215 public void testMigrationLeavesOtherFilesAlone() throws IOException, Interru
ptedException, | 232 @UiThreadTest |
| 216 ExecutionException { | 233 public void testMigrationLeavesOtherFilesAlone() |
| 234 throws IOException, InterruptedException, ExecutionException { |
| 217 ApplicationData.clearAppData(mAppContext); | 235 ApplicationData.clearAppData(mAppContext); |
| 218 | 236 |
| 219 // Write old state files. | 237 // Write old state files. |
| 220 File filesDir = mAppContext.getFilesDir(); | 238 File filesDir = mAppContext.getFilesDir(); |
| 221 File stateFile = new File(filesDir, TabbedModeTabPersistencePolicy.LEGAC
Y_SAVED_STATE_FILE); | 239 File stateFile = new File(filesDir, TabbedModeTabPersistencePolicy.LEGAC
Y_SAVED_STATE_FILE); |
| 222 File tab0 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "0
"); | 240 File tab0 = new File(filesDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "0
"); |
| 223 File otherFile = new File(filesDir, "other.file"); | 241 File otherFile = new File(filesDir, "other.file"); |
| 224 | 242 |
| 225 assertTrue("Could not create state file", stateFile.createNewFile()); | 243 Assert.assertTrue("Could not create state file", stateFile.createNewFile
()); |
| 226 assertTrue("Could not create tab 0 file", tab0.createNewFile()); | 244 Assert.assertTrue("Could not create tab 0 file", tab0.createNewFile()); |
| 227 assertTrue("Could not create other file", otherFile.createNewFile()); | 245 Assert.assertTrue("Could not create other file", otherFile.createNewFile
()); |
| 228 | 246 |
| 229 // Build the TabPersistentStore which will try to move the files. | 247 // Build the TabPersistentStore which will try to move the files. |
| 230 MockTabModelSelector selector = new MockTabModelSelector(0, 0, null); | 248 MockTabModelSelector selector = new MockTabModelSelector(0, 0, null); |
| 231 TabPersistentStore store = buildTabPersistentStore(selector, 0); | 249 TabPersistentStore store = buildTabPersistentStore(selector, 0); |
| 232 store.waitForMigrationToFinish(); | 250 store.waitForMigrationToFinish(); |
| 233 | 251 |
| 234 assertFalse("Could still find old state file", stateFile.exists()); | 252 Assert.assertFalse("Could still find old state file", stateFile.exists()
); |
| 235 assertFalse("Could still find old tab 0 file", tab0.exists()); | 253 Assert.assertFalse("Could still find old tab 0 file", tab0.exists()); |
| 236 assertTrue("Could not find other file", otherFile.exists()); | 254 Assert.assertTrue("Could not find other file", otherFile.exists()); |
| 237 | 255 |
| 238 // Check that the files were moved. | 256 // Check that the files were moved. |
| 239 File newDir = TabbedModeTabPersistencePolicy.getOrCreateTabbedModeStateD
irectory(); | 257 File newDir = TabbedModeTabPersistencePolicy.getOrCreateTabbedModeStateD
irectory(); |
| 240 File newStateFile = new File(newDir, TabbedModeTabPersistencePolicy.getS
tateFileName(0)); | 258 File newStateFile = new File(newDir, TabbedModeTabPersistencePolicy.getS
tateFileName(0)); |
| 241 File newTab0 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
0"); | 259 File newTab0 = new File(newDir, TabState.SAVED_TAB_STATE_FILE_PREFIX + "
0"); |
| 242 File newOtherFile = new File(newDir, "other.file"); | 260 File newOtherFile = new File(newDir, "other.file"); |
| 243 | 261 |
| 244 assertTrue("Could not find new state file", newStateFile.exists()); | 262 Assert.assertTrue("Could not find new state file", newStateFile.exists()
); |
| 245 assertTrue("Could not find new tab 0 file", newTab0.exists()); | 263 Assert.assertTrue("Could not find new tab 0 file", newTab0.exists()); |
| 246 assertFalse("Could find new other file", newOtherFile.exists()); | 264 Assert.assertFalse("Could find new other file", newOtherFile.exists()); |
| 247 | 265 |
| 248 ApplicationData.clearAppData(mAppContext); | 266 ApplicationData.clearAppData(mAppContext); |
| 249 } | 267 } |
| 250 | 268 |
| 251 /** | 269 /** |
| 252 * Tests that the max id returned is the max of all of the tab models. | 270 * Tests that the max id returned is the max of all of the tab models. |
| 253 * @throws IOException | 271 * @throws IOException |
| 254 */ | 272 */ |
| 273 @Test |
| 255 @SmallTest | 274 @SmallTest |
| 256 @Feature({"TabPersistentStore"}) | 275 @Feature({"TabPersistentStore"}) |
| 276 @UiThreadTest |
| 257 @RetryOnFailure | 277 @RetryOnFailure |
| 258 public void testFindsMaxIdProperly() throws IOException { | 278 public void testFindsMaxIdProperly() throws IOException { |
| 259 TabModelSelector selector0 = new MockTabModelSelector(1, 1, null); | 279 TabModelSelector selector0 = new MockTabModelSelector(1, 1, null); |
| 260 TabModelSelector selector1 = new MockTabModelSelector(1, 1, null); | 280 TabModelSelector selector1 = new MockTabModelSelector(1, 1, null); |
| 261 | 281 |
| 262 writeStateFile(selector0, 0); | 282 writeStateFile(selector0, 0); |
| 263 writeStateFile(selector1, 1); | 283 writeStateFile(selector1, 1); |
| 264 | 284 |
| 265 TabModelSelector selectorIn = new MockTabModelSelector(0, 0, null); | 285 TabModelSelector selectorIn = new MockTabModelSelector(0, 0, null); |
| 266 TabPersistentStore storeIn = buildTabPersistentStore(selectorIn, 0); | 286 TabPersistentStore storeIn = buildTabPersistentStore(selectorIn, 0); |
| 267 | 287 |
| 268 int maxId = Math.max(getMaxId(selector0), getMaxId(selector1)); | 288 int maxId = Math.max(getMaxId(selector0), getMaxId(selector1)); |
| 269 try { | 289 try { |
| 270 RecordHistogram.setDisabledForTests(true); | 290 RecordHistogram.setDisabledForTests(true); |
| 271 storeIn.loadState(false /* ignoreIncognitoFiles */); | 291 storeIn.loadState(false /* ignoreIncognitoFiles */); |
| 272 assertEquals("Invalid next id", maxId + 1, | 292 Assert.assertEquals("Invalid next id", maxId + 1, |
| 273 TabIdManager.getInstance().generateValidId(Tab.INVALID_TAB_I
D)); | 293 TabIdManager.getInstance().generateValidId(Tab.INVALID_TAB_I
D)); |
| 274 } finally { | 294 } finally { |
| 275 RecordHistogram.setDisabledForTests(false); | 295 RecordHistogram.setDisabledForTests(false); |
| 276 } | 296 } |
| 277 } | 297 } |
| 278 | 298 |
| 279 /** | 299 /** |
| 280 * Tests that each model loads the subset of tabs it is responsible for. In
this case, just | 300 * Tests that each model loads the subset of tabs it is responsible for. In
this case, just |
| 281 * check that the model has the expected number of tabs to load. Since each
model is loading | 301 * check that the model has the expected number of tabs to load. Since each
model is loading |
| 282 * a different number of tabs we can tell if they are each attempting to loa
d their specific | 302 * a different number of tabs we can tell if they are each attempting to loa
d their specific |
| 283 * set. | 303 * set. |
| 284 * @throws IOException | 304 * @throws IOException |
| 285 */ | 305 */ |
| 306 @Test |
| 286 @SmallTest | 307 @SmallTest |
| 287 @Feature({"TabPersistentStore"}) | 308 @Feature({"TabPersistentStore"}) |
| 309 @UiThreadTest |
| 288 public void testOnlyLoadsSingleModel() throws IOException { | 310 public void testOnlyLoadsSingleModel() throws IOException { |
| 289 TabModelSelector selector0 = new MockTabModelSelector(3, 3, null); | 311 TabModelSelector selector0 = new MockTabModelSelector(3, 3, null); |
| 290 TabModelSelector selector1 = new MockTabModelSelector(2, 1, null); | 312 TabModelSelector selector1 = new MockTabModelSelector(2, 1, null); |
| 291 | 313 |
| 292 writeStateFile(selector0, 0); | 314 writeStateFile(selector0, 0); |
| 293 writeStateFile(selector1, 1); | 315 writeStateFile(selector1, 1); |
| 294 | 316 |
| 295 TabModelSelector selectorIn0 = new MockTabModelSelector(0, 0, null); | 317 TabModelSelector selectorIn0 = new MockTabModelSelector(0, 0, null); |
| 296 TabModelSelector selectorIn1 = new MockTabModelSelector(0, 0, null); | 318 TabModelSelector selectorIn1 = new MockTabModelSelector(0, 0, null); |
| 297 | 319 |
| 298 TabPersistentStore storeIn0 = buildTabPersistentStore(selectorIn0, 0); | 320 TabPersistentStore storeIn0 = buildTabPersistentStore(selectorIn0, 0); |
| 299 | 321 |
| 300 TabPersistentStore storeIn1 = buildTabPersistentStore(selectorIn1, 1); | 322 TabPersistentStore storeIn1 = buildTabPersistentStore(selectorIn1, 1); |
| 301 | 323 |
| 302 try { | 324 try { |
| 303 RecordHistogram.setDisabledForTests(true); | 325 RecordHistogram.setDisabledForTests(true); |
| 304 storeIn0.loadState(false /* ignoreIncognitoFiles */); | 326 storeIn0.loadState(false /* ignoreIncognitoFiles */); |
| 305 storeIn1.loadState(false /* ignoreIncognitoFiles */); | 327 storeIn1.loadState(false /* ignoreIncognitoFiles */); |
| 306 } finally { | 328 } finally { |
| 307 RecordHistogram.setDisabledForTests(false); | 329 RecordHistogram.setDisabledForTests(false); |
| 308 } | 330 } |
| 309 | 331 |
| 310 assertEquals("Unexpected number of tabs to load", 6, storeIn0.getRestore
dTabCount()); | 332 Assert.assertEquals("Unexpected number of tabs to load", 6, storeIn0.get
RestoredTabCount()); |
| 311 assertEquals("Unexpected number of tabs to load", 3, storeIn1.getRestore
dTabCount()); | 333 Assert.assertEquals("Unexpected number of tabs to load", 3, storeIn1.get
RestoredTabCount()); |
| 312 | |
| 313 } | 334 } |
| 314 } | 335 } |
| OLD | NEW |