Chromium Code Reviews| Index: chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TestTabModelDirectory.java |
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TestTabModelDirectory.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TestTabModelDirectory.java |
| index aaf951da2cddaae62db850de039268e78e199a16..728284fd00988530ee53417694e2e01dfc7da22b 100644 |
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TestTabModelDirectory.java |
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TestTabModelDirectory.java |
| @@ -24,7 +24,7 @@ import java.io.FileOutputStream; |
| * This gets around an infrastructure bug with setting file permissions. |
| */ |
| public class TestTabModelDirectory { |
| - private static final String TAG = "cr.tabmodel"; |
| + private static final String TAG = "tabmodel"; |
| /** |
| * Information about an encoded TabState file. Although the Tab ID is _not_ encoded in the |
| @@ -48,6 +48,31 @@ public class TestTabModelDirectory { |
| } |
| }; |
| + /** |
| + * Information about a TabModel and all of the TabStates it needs to be restored. |
| + */ |
| + public static final class TabModelMetaDataInfo { |
| + public final int version; |
| + public final int selectedTabId; |
| + public final TabStateInfo[] contents; |
| + public final int numIncognitoTabs; |
| + public final String encodedFile; |
| + |
| + TabModelMetaDataInfo(int version, int numIncognitoTabs, int selectedTabId, |
| + TabStateInfo[] contents, String encodedFile) { |
| + this.version = version; |
| + this.numIncognitoTabs = numIncognitoTabs; |
| + this.selectedTabId = selectedTabId; |
| + this.contents = contents; |
| + this.encodedFile = encodedFile; |
| + } |
| + |
| + /** Returns how many non-Incognito tabs are described in the file. */ |
| + public int getNumRegularTabs() { |
| + return contents.length - numIncognitoTabs; |
| + } |
| + } |
| + |
| public static final TabStateInfo M18_NTP = new TabStateInfo( |
| 0, |
| 0, |
| @@ -186,19 +211,54 @@ public class TestTabModelDirectory { |
| * Tab model metadata file containing information about multiple tabs, with Baidu selected. |
| * Ideally we'd have the M18 NTP in here, too, but it's difficult to get Chrome to visit that |
| * URL now that the page is gone. |
| + * |
| + * This file was created by clearing Chrome's app data, turning off wi-fi, and then visiting |
| + * each of the pages in turn. |
| */ |
| - private static final String TAB_MODEL_METADATA_V4 = |
| + public static final TabModelMetaDataInfo TAB_MODEL_METADATA_V4 = new TabModelMetaDataInfo( |
| + 4, |
| + 0, |
| + V2_BAIDU.tabId, |
| + new TabStateInfo[] {M18_GOOGLE_COM, M26_GOOGLE_COM, M26_GOOGLE_CA, V2_BAIDU, |
| + V2_DUCK_DUCK_GO, V2_HAARETZ, V2_TEXTAREA}, |
| "AAAABAAAAAf/////AAAAAwAAAAEAFmh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8AAAACABZodHRw" |
| + "Oi8vd3d3Lmdvb2dsZS5jb20vAAAAAwAVaHR0cDovL3d3dy5nb29nbGUuY2EvAAAABAAVaHR0" |
| + "cDovL3d3dy5iYWlkdS5jb20vAAAABQAXaHR0cHM6Ly9kdWNrZHVja2dvLmNvbS8AAAAGABlo" |
| - + "dHRwOi8vd3d3LmhhYXJldHouY28uaWwvAAAABwAUaHR0cDovL3RleHRhcmVhLm9yZy8="; |
| - public static final int TAB_MODEL_METADATA_V4_SELECTED_ID = 4; |
| - static final TabStateInfo[] TAB_MODEL_METADATA_V4_CONTENTS = { |
| - M18_GOOGLE_COM, M26_GOOGLE_COM, M26_GOOGLE_CA, V2_BAIDU, V2_DUCK_DUCK_GO, V2_HAARETZ, |
| - V2_TEXTAREA |
| - }; |
| + + "dHRwOi8vd3d3LmhhYXJldHouY28uaWwvAAAABwAUaHR0cDovL3RleHRhcmVhLm9yZy8="); |
| + |
| + /** |
| + * Same as TAB_MODEL_METADATA_V4, but using the version 5 file format. |
| + */ |
| + public static final TabModelMetaDataInfo TAB_MODEL_METADATA_V5 = new TabModelMetaDataInfo( |
| + 5, |
| + 0, |
| + V2_BAIDU.tabId, |
| + new TabStateInfo[] {M18_GOOGLE_COM, M26_GOOGLE_COM, M26_GOOGLE_CA, V2_BAIDU, |
| + V2_DUCK_DUCK_GO, V2_HAARETZ, V2_TEXTAREA}, |
| + "AAAABQAAAAcAAAAA/////wAAAAMAAAABABZodHRwOi8vd3d3Lmdvb2dsZS5jb20vAAAAAgAWaHR0" |
| + + "cDovL3d3dy5nb29nbGUuY29tLwAAAAMAFWh0dHA6Ly93d3cuZ29vZ2xlLmNhLwAAAAQAFWh0dHA6" |
| + + "Ly93d3cuYmFpZHUuY29tLwAAAAUAF2h0dHBzOi8vZHVja2R1Y2tnby5jb20vAAAABgAZaHR0cDov" |
| + + "L3d3dy5oYWFyZXR6LmNvLmlsLwAAAAcAFGh0dHA6Ly90ZXh0YXJlYS5vcmcv"); |
| + |
| + /** |
| + * Similar to TAB_MODEL_METADATA_V5, but has a single Incognito tab. The tab state can't be |
| + * restored (currently) because this Class doesn't support Incognito TabStates. |
|
David Trainor- moved to gerrit
2015/10/17 05:58:41
This comment is a bit confusing. I thought V5 sup
gone
2015/10/19 17:42:06
Er, it doesn't support decrypting Incognito TabSta
|
| + */ |
| + public static final TabModelMetaDataInfo TAB_MODEL_METADATA_V5_WITH_INCOGNITO = |
| + new TabModelMetaDataInfo( |
| + 5, |
| + 1, |
| + V2_BAIDU.tabId, |
| + new TabStateInfo[] {null, M18_GOOGLE_COM, M26_GOOGLE_COM, M26_GOOGLE_CA, |
| + V2_BAIDU, V2_DUCK_DUCK_GO, V2_HAARETZ, V2_TEXTAREA}, |
| + "AAAABQAAAAgAAAABAAAAAAAAAAQAAAAIABRodHRwOi8vZXJmd29ybGQuY29tLwAAAAEAFmh0dHA6" |
| + + "Ly93d3cuZ29vZ2xlLmNvbS8AAAACABZodHRwOi8vd3d3Lmdvb2dsZS5jb20vAAAAAwAVaHR0cDov" |
| + + "L3d3dy5nb29nbGUuY2EvAAAABAAVaHR0cDovL3d3dy5iYWlkdS5jb20vAAAABQAXaHR0cHM6Ly9k" |
| + + "dWNrZHVja2dvLmNvbS8AAAAGABlodHRwOi8vd3d3LmhhYXJldHouY28uaWwvAAAABwAUaHR0cDov" |
| + + "L3RleHRhcmVhLm9yZy8="); |
| private File mTestingDirectory; |
| + private File mDataDirectory; |
| /** |
| * Creates a temporary directory that stores {@link TabState} files and the metadata required to |
| @@ -220,25 +280,13 @@ public class TestTabModelDirectory { |
| } |
| // Create the subdirectory. |
| - File dataDirectory = mTestingDirectory; |
| + mDataDirectory = mTestingDirectory; |
| if (subdirectoryName != null) { |
| - dataDirectory = new File(mTestingDirectory, subdirectoryName); |
| - if (!dataDirectory.exists() && !dataDirectory.mkdirs()) { |
| - Log.e(TAG, "Failed to create subdirectory: " + dataDirectory.getName()); |
| + mDataDirectory = new File(mTestingDirectory, subdirectoryName); |
| + if (!mDataDirectory.exists() && !mDataDirectory.mkdirs()) { |
| + Log.e(TAG, "Failed to create subdirectory: " + mDataDirectory.getName()); |
| } |
| } |
| - |
| - // Fill the subdirectory with mocked pre-generated TabState files and metadata for the |
| - // TabPersistentStore. |
| - writeFile(dataDirectory, "tab_state", TAB_MODEL_METADATA_V4); |
| - writeFile(dataDirectory, M18_NTP.filename, M18_NTP.encodedTabState); |
| - writeFile(dataDirectory, M26_GOOGLE_COM.filename, M26_GOOGLE_COM.encodedTabState); |
| - writeFile(dataDirectory, M18_GOOGLE_COM.filename, M18_GOOGLE_COM.encodedTabState); |
| - writeFile(dataDirectory, M26_GOOGLE_CA.filename, M26_GOOGLE_CA.encodedTabState); |
| - writeFile(dataDirectory, V2_BAIDU.filename, V2_BAIDU.encodedTabState); |
| - writeFile(dataDirectory, V2_DUCK_DUCK_GO.filename, V2_DUCK_DUCK_GO.encodedTabState); |
| - writeFile(dataDirectory, V2_HAARETZ.filename, V2_HAARETZ.encodedTabState); |
| - writeFile(dataDirectory, V2_TEXTAREA.filename, V2_TEXTAREA.encodedTabState); |
| } |
| /** Nukes all the testing data. */ |
| @@ -251,6 +299,23 @@ public class TestTabModelDirectory { |
| return mTestingDirectory; |
| } |
| + /** |
| + * Writes out data required to restore a TabModel to the data directories. |
| + * @param writeTabStates Whether or not to write the TabState files for each of the Tabs out. |
| + */ |
| + public void writeTabModelFiles(TabModelMetaDataInfo info, boolean writeTabStates) |
| + throws Exception { |
| + writeFile(mDataDirectory, "tab_state", info.encodedFile); |
| + for (TabStateInfo tabStateInfo : info.contents) { |
| + writeTabStateFile(tabStateInfo); |
| + } |
| + } |
| + |
| + /** Writes out a specific TabState file to the data directories. */ |
| + public void writeTabStateFile(TabStateInfo info) throws Exception { |
| + if (info != null) writeFile(mDataDirectory, info.filename, info.encodedTabState); |
| + } |
| + |
| private void writeFile(File directory, String filename, String data) throws Exception { |
| File file = new File(directory, filename); |
| FileOutputStream outputStream = null; |