Index: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java |
index 24cb70b048751896dfe6c6c9148dbe6ad9d6d3c6..67d3d5534c5970f47057f1b21c0219968780d926 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java |
@@ -18,48 +18,62 @@ import org.chromium.chrome.browser.ChromeBackgroundService; |
*/ |
public class BackgroundScheduler { |
private static final long ONE_WEEK_IN_SECONDS = 60 * 60 * 24 * 7; |
+ private static final long NO_DELAY = 0; |
+ private static final boolean OVERWRITE = true; |
/** |
* For the given Triggering conditions, start a new GCM Network Manager request. |
*/ |
public static void schedule(Context context, TriggerConditions triggerConditions) { |
- // TODO(dougarnett): Use trigger conditions in task builder config. |
- schedule(context, 0 /* delayStartSecs */); |
+ schedule(context, triggerConditions, NO_DELAY, OVERWRITE); |
+ } |
+ |
+ /** |
+ * If there is no currently scheduled task, then start a GCM Network Manager request |
+ * for the given Triggering conditions but delayed to run after {@code delayStartSecs}. |
+ * Typically, the Request Coordinator will overwrite this task after task processing |
+ * and/or queue updates. This is a backup task in case processing is killed by the |
+ * system. |
+ */ |
+ public static void backupSchedule( |
+ Context context, TriggerConditions triggerConditions, long delayStartSecs) { |
+ schedule(context, triggerConditions, delayStartSecs, !OVERWRITE); |
+ } |
+ |
+ /** |
+ * Cancel any outstanding GCM Network Manager requests. |
+ */ |
+ public static void unschedule(Context context) { |
+ // Get the GCM Network Scheduler. |
+ GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(context); |
+ gcmNetworkManager.cancelTask(OfflinePageUtils.TASK_TAG, ChromeBackgroundService.class); |
} |
/** |
* For the given Triggering conditions, start a new GCM Network Manager request allowed |
* to run after {@code delayStartSecs} seconds. |
*/ |
- public static void schedule(Context context, long delayStartSecs) { |
+ private static void schedule(Context context, TriggerConditions triggerConditions, |
+ long delayStartSecs, boolean overwrite) { |
// Get the GCM Network Scheduler. |
GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(context); |
- // TODO(petewil): Add the triggering conditions into the argument bundle. |
- // Triggering conditions will include network state and charging requirements, maybe |
- // also battery percentage. |
Bundle taskExtras = new Bundle(); |
TaskExtrasPacker.packTimeInBundle(taskExtras); |
+ TaskExtrasPacker.packTriggerConditionsInBundle(taskExtras, triggerConditions); |
Task task = new OneoffTask.Builder() |
- .setService(ChromeBackgroundService.class) |
- .setExecutionWindow(delayStartSecs, ONE_WEEK_IN_SECONDS) |
- .setTag(OfflinePageUtils.TASK_TAG) |
- .setUpdateCurrent(true) |
- .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED) |
- .setRequiresCharging(false) |
- .setExtras(taskExtras) |
- .build(); |
+ .setService(ChromeBackgroundService.class) |
+ .setExecutionWindow(delayStartSecs, ONE_WEEK_IN_SECONDS) |
+ .setTag(OfflinePageUtils.TASK_TAG) |
+ .setUpdateCurrent(overwrite) |
+ .setRequiredNetwork(triggerConditions.requireUnmeteredNetwork() |
+ ? Task.NETWORK_STATE_UNMETERED |
+ : Task.NETWORK_STATE_CONNECTED) |
+ .setRequiresCharging(triggerConditions.requirePowerConnected()) |
+ .setExtras(taskExtras) |
+ .build(); |
gcmNetworkManager.schedule(task); |
} |
- |
- /** |
- * Cancel any outstanding GCM Network Manager requests. |
- */ |
- public static void unschedule(Context context) { |
- // Get the GCM Network Scheduler. |
- GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(context); |
- gcmNetworkManager.cancelTask(OfflinePageUtils.TASK_TAG, ChromeBackgroundService.class); |
- } |
} |