Index: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java |
index d2cb3f19ec5517ffc52df3d41af671eb2517f9e4..fa8a8119bc069eacbfa4cabed821fc13eac241ba 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java |
@@ -511,7 +511,7 @@ public class TabPersistentStore extends TabPersister { |
public void clearState() { |
deleteFileAsync(SAVED_STATE_FILE); |
- cleanupPersistentData(); |
+ cleanUpPersistentData(); |
onStateLoaded(); |
} |
@@ -939,7 +939,7 @@ public class TabPersistentStore extends TabPersister { |
if (mTabsToRestore.isEmpty()) { |
mNormalTabsRestored = null; |
mIncognitoTabsRestored = null; |
- cleanupPersistentData(); |
+ cleanUpPersistentData(); |
onStateLoaded(); |
mLoadTabTask = null; |
Log.d(TAG, "Loaded tab lists; counts: " + mTabModelSelector.getModel(false).getCount() |
@@ -951,38 +951,11 @@ public class TabPersistentStore extends TabPersister { |
} |
} |
- private void cleanupPersistentData() { |
- String[] files = getStateDirectory().list(); |
- if (files != null) { |
- for (String file : files) { |
- Pair<Integer, Boolean> data = TabState.parseInfoFromFilename(file); |
- if (data != null) { |
- TabModel model = mTabModelSelector.getModel(data.second); |
- if (TabModelUtils.getTabById(model, data.first) == null) { |
- deleteFileAsync(file); |
- } |
- } |
- } |
- } |
+ private void cleanUpPersistentData() { |
+ new CleanUpTabStateDataTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
if (mTabContentManager != null) { |
- mTabContentManager.cleanupPersistentData(mTabModelSelector); |
- } |
- } |
- |
- private void cleanupPersistentDataAtAndAboveId(int minForbiddenId) { |
- String[] files = getStateDirectory().list(); |
- if (files != null) { |
- for (String file : files) { |
- Pair<Integer, Boolean> data = TabState.parseInfoFromFilename(file); |
- if (data != null && data.first >= minForbiddenId) { |
- deleteFileAsync(file); |
- } |
- } |
- } |
- |
- if (mTabContentManager != null) { |
- mTabContentManager.cleanupPersistentDataAtAndAboveId(minForbiddenId); |
+ mTabContentManager.cleanUpPersistentData(mTabModelSelector); |
} |
} |
@@ -1020,6 +993,34 @@ public class TabPersistentStore extends TabPersister { |
// Explicitly serializing file mutations (save & delete) to ensure they occur in order. |
} |
+ private class CleanUpTabStateDataTask extends AsyncTask<Void, Void, String[]> { |
+ @Override |
+ protected String[] doInBackground(Void... voids) { |
+ if (mDestroyed) { |
+ return null; |
+ } |
+ return getStateDirectory().list(); |
+ } |
+ |
+ @Override |
+ protected void onPostExecute(String[] fileNames) { |
+ if (mDestroyed || fileNames == null) { |
+ return; |
+ } |
+ for (String fileName : fileNames) { |
+ Pair<Integer, Boolean> data = TabState.parseInfoFromFilename(fileName); |
+ if (data != null) { |
+ TabModel model = mTabModelSelector.getModel(data.second); |
+ if (TabModelUtils.getTabById(model, data.first) == null) { |
+ // It might be more efficient to use a single task for all files, but |
+ // the number of files is expected to be very small. |
+ deleteFileAsync(fileName); |
+ } |
+ } |
+ } |
+ } |
+ } |
+ |
private class LoadTabTask extends AsyncTask<Void, Void, TabState> { |
public final TabRestoreDetails mTabToRestore; |