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. |
+ */ |
+ 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; |