| Index: chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheController.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheController.java b/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheController.java
|
| index 4ee943e13f58bed495e048134c90bffab5038e92..28badf446635bb5dfe145ee2e7a4ac63ba6e18f9 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheController.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheController.java
|
| @@ -21,6 +21,7 @@ import com.google.android.gms.gcm.PeriodicTask;
|
|
|
| import org.chromium.base.ContextUtils;
|
| import org.chromium.base.Log;
|
| +import org.chromium.base.ThreadUtils;
|
| import org.chromium.base.VisibleForTesting;
|
| import org.chromium.base.library_loader.LibraryLoader;
|
| import org.chromium.base.metrics.RecordHistogram;
|
| @@ -413,13 +414,20 @@ public class PrecacheController {
|
| * Cancels the current precache session.
|
| * @param event the failure reason.
|
| */
|
| - private void cancelPrecaching(int event) {
|
| - Log.v(TAG, "canceling precache session");
|
| - if (setIsPrecaching(false)) {
|
| - mPrecacheLauncher.cancel();
|
| - shutdownPrecaching(true);
|
| - }
|
| - PrecacheUMA.record(event);
|
| + private void cancelPrecaching(final int event) {
|
| + // cancelPrecaching() could be called from PrecacheManager::Shutdown(), precache GCM task,
|
| + // etc., where it could be a different thread.
|
| + ThreadUtils.runOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + Log.v(TAG, "canceling precache session");
|
| + if (setIsPrecaching(false)) {
|
| + mPrecacheLauncher.cancel();
|
| + shutdownPrecaching(true);
|
| + }
|
| + PrecacheUMA.record(event);
|
| + }
|
| + });
|
| }
|
|
|
| /**
|
|
|