| 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);
|
| - }
|
| }
|
|
|