Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1252)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheController.java

Issue 1924443003: Precaching should wait for sync service backend to initialize (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed nits, fixed tests Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/precache/SyncServiceInitializedNotifier.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 d12e890f80b00adf25fda96ebf77ac57e544d0b2..e50678b4389b19f48f7b9144597b2c2e7faa4649 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
@@ -32,10 +32,15 @@ import org.chromium.chrome.browser.ChromeBackgroundService;
import org.chromium.chrome.browser.ChromeVersionInfo;
import org.chromium.chrome.browser.util.NonThreadSafe;
import org.chromium.components.precache.DeviceState;
+import org.chromium.sync.ModelType;
import java.util.ArrayDeque;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.EnumSet;
+import java.util.HashSet;
import java.util.Queue;
+import java.util.Set;
/**
* Singleton responsible for starting and stopping a precache session.
@@ -66,7 +71,10 @@ public class PrecacheController {
static final int WAIT_UNTIL_NEXT_PRECACHE_SECONDS = 6 * 60 * 60; // 6 hours.
static final int COMPLETION_TASK_MIN_DELAY_SECONDS = 5 * 60; // 5 minutes.
static final int COMPLETION_TASK_MAX_DELAY_SECONDS = 60 * 60; // 1 hour.
+ static final int MAX_SYNC_SERVICE_INIT_TIMOUT_MS = 5 * 60 * 1000; // 5 minutes
static final int MAX_PRECACHE_DURATION_SECONDS = 30 * 60; // 30 minutes.
+ static final Set<Integer> SYNC_SERVICE_CONFIGURED_DATATYPES =
+ Collections.unmodifiableSet(new HashSet<Integer>(Arrays.asList(ModelType.SESSIONS)));
/**
* Singleton instance of the PrecacheController. PrecacheController is a
@@ -80,6 +88,11 @@ public class PrecacheController {
*/
private static PrecacheTaskScheduler sTaskScheduler = new PrecacheTaskScheduler();
+ /**
+ * Listener for syncservice backend.
+ */
+ SyncServiceInitializedNotifier mSyncServiceNotifier;
+
/** True if a precache session is in progress. Threadsafe. */
private boolean mIsPrecaching = false;
@@ -335,15 +348,33 @@ public class PrecacheController {
if (PERIODIC_TASK_TAG.equals(tag)) {
cancelPrecacheCompletionTask(mAppContext);
}
- startPrecaching();
+ startPrecachingAfterSyncInit();
return GcmNetworkManager.RESULT_SUCCESS;
}
Log.v(TAG, "precache session was already running");
return GcmNetworkManager.RESULT_FAILURE;
}
+ @VisibleForTesting
+ void startPrecachingAfterSyncInit() {
+ mSyncServiceNotifier = new SyncServiceInitializedNotifier(
+ SYNC_SERVICE_CONFIGURED_DATATYPES, new SyncServiceInitializedNotifier.Listener() {
+ @Override
+ public void onDataTypesActive() {
+ startPrecaching();
+ }
+
+ @Override
+ public void onFailureOrTimedOut() {
+ // TODO(rajendrant): Add UMA histogram to track this failure.
+ cancelPrecaching();
+ }
+ }, MAX_SYNC_SERVICE_INIT_TIMOUT_MS);
+ }
+
/** Begins a precache session. */
- private void startPrecaching() {
+ @VisibleForTesting
+ void startPrecaching() {
Log.v(TAG, "precache session has started");
registerDeviceStateReceiver();
acquirePrecachingWakeLock();
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/precache/SyncServiceInitializedNotifier.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698