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

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

Issue 1266243003: Tweaks to the precache triggering code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 4 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
Index: chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheLauncher.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheLauncher.java
index e0b8ee62732d2ba3dc1eb9db56bc271116f0860a..efad30ae8e4f9382fff931510de73c8577c592a8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheLauncher.java
@@ -6,14 +6,17 @@ package org.chromium.chrome.browser.precache;
import android.content.Context;
+import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.browser.preferences.privacy.PrivacyPreferencesManager;
-
-import java.util.concurrent.Callable;
+import org.chromium.chrome.browser.sync.ProfileSyncService;
/** Class that interacts with the PrecacheManager to control precache cycles. */
public abstract class PrecacheLauncher {
+ private static final String TAG = "cr.Precache";
+
/** Pointer to the native PrecacheLauncher object. Set to 0 when uninitialized. */
private long mNativePrecacheLauncher;
@@ -56,19 +59,61 @@ public abstract class PrecacheLauncher {
}
/**
- * Returns true if precaching is enabled by either Finch or the command line flag, and also by
- * the predictive network actions preference and current network connection type.
+ * Updates the PrecacheServiceLauncher with whether conditions are right for precaching. All of
+ * the following must be true:
+ *
+ * <ul>
+ * <li>The predictive network actions preference is enabled.</li>
+ * <li>The current network type is suitable for predictive network actions.</li>
+ * <li>Sync is enabled for sessions and it is not encrypted with a secondary passphrase.</li>
+ * <li>Either the Precache field trial or the precache commandline flag is enabled.</li>
+ * </ul>
+ *
+ * This should be called only after the sync backend has been initialized. Must be called on the
+ * UI thread.
+ *
+ * @param context The application context.
+ */
+ private void updateEnabledSync(Context context) {
+ PrivacyPreferencesManager privacyPreferencesManager =
+ PrivacyPreferencesManager.getInstance(context);
+
+ // privacyPreferencesManager.shouldPrerender() and nativeShouldRun() can only be executed on
+ // the UI thread.
+ PrecacheServiceLauncher.setIsPrecachingEnabled(
+ context, privacyPreferencesManager.shouldPrerender() && nativeShouldRun());
+ Log.v(TAG, "updateEnabledSync complete");
+ }
+
+ /**
+ * If precaching is enabled, then allow the PrecacheService to be launched and signal Chrome
+ * when conditions are right to start precaching. If precaching is disabled, prevent the
+ * PrecacheService from ever starting.
*
- * @param privacyPreferencesManager Singleton that manages the prefetch bandwidth preference.
+ * @param context Any context within the application.
*/
- public static boolean isPrecachingEnabled(
- final PrivacyPreferencesManager privacyPreferencesManager) {
- if (!nativeIsPrecachingEnabled()) return false;
- // privacyPreferencesManager.shouldPrerender() can only be executed on the UI thread.
- return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
+ @VisibleForTesting
+ void updateEnabled(final Context context) {
+ Log.v(TAG, "updateEnabled starting");
+ ThreadUtils.postOnUiThread(new Runnable() {
@Override
- public Boolean call() {
- return privacyPreferencesManager.shouldPrerender();
+ public void run() {
+ final ProfileSyncService sync = ProfileSyncService.get(context);
+
+ if (mListener == null) {
+ mListener = new ProfileSyncService.SyncStateChangedListener() {
+ public void syncStateChanged() {
+ if (sync.isSyncInitialized()) {
+ updateEnabledSync(context);
+ }
+ }
+ };
+ sync.addSyncStateChangedListener(mListener);
+ }
+
+ // Call the listener once, in case the sync backend is already initialized.
+ mListener.syncStateChanged();
+ Log.v(TAG, "updateEnabled complete");
}
});
}
@@ -78,18 +123,25 @@ public abstract class PrecacheLauncher {
* when conditions are right to start precaching. If precaching is disabled, prevent the
* PrecacheService from ever starting.
*
- * @param privacyPreferencesManager Singleton that manages the prefetch bandwidth preference.
- * @param context The context of the PrecacheServiceLauncher.
+ * @param context Any context within the application.
*/
- public static void updatePrecachingEnabled(PrivacyPreferencesManager privacyPreferencesManager,
- Context context) {
- PrecacheServiceLauncher.setIsPrecachingEnabled(context,
- isPrecachingEnabled(privacyPreferencesManager));
+ public static void updatePrecachingEnabled(final Context context) {
+ sInstance.updateEnabled(context);
}
+ private static final PrecacheLauncher sInstance = new PrecacheLauncher() {
+ @Override
+ protected void onPrecacheCompleted() {}
+ };
+
+ // Initialized by updateEnabled to call updateEnabledSync when the sync
+ // backend is initialized. Only accessed on the UI thread.
+ private ProfileSyncService.SyncStateChangedListener mListener = null;
+
private native long nativeInit();
private native void nativeDestroy(long nativePrecacheLauncher);
private native void nativeStart(long nativePrecacheLauncher);
private native void nativeCancel(long nativePrecacheLauncher);
- private static native boolean nativeIsPrecachingEnabled();
+
+ @VisibleForTesting native boolean nativeShouldRun();
}

Powered by Google App Engine
This is Rietveld 408576698