| Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
|
| index c27abfc27322015806994fedb0e175f22f46ec60..b452d8a510a77d6158bba5db2835aa270687ddd3 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
|
| @@ -5,7 +5,6 @@
|
| package org.chromium.chrome.browser;
|
|
|
| import android.content.Context;
|
| -import android.os.Bundle;
|
|
|
| import com.google.android.gms.gcm.GcmNetworkManager;
|
| import com.google.android.gms.gcm.GcmTaskService;
|
| @@ -15,48 +14,29 @@ import org.chromium.base.Log;
|
| import org.chromium.base.ThreadUtils;
|
| import org.chromium.base.VisibleForTesting;
|
| import org.chromium.base.annotations.SuppressFBWarnings;
|
| -import org.chromium.base.library_loader.LibraryProcessType;
|
| import org.chromium.base.library_loader.ProcessInitException;
|
| import org.chromium.chrome.browser.download.DownloadResumptionScheduler;
|
| import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
|
| import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge;
|
| import org.chromium.chrome.browser.ntp.snippets.SnippetsLauncher;
|
| -import org.chromium.chrome.browser.offlinepages.BackgroundOfflinerTask;
|
| import org.chromium.chrome.browser.offlinepages.BackgroundScheduler;
|
| -import org.chromium.chrome.browser.offlinepages.BackgroundSchedulerProcessorImpl;
|
| import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
|
| import org.chromium.chrome.browser.precache.PrecacheController;
|
| import org.chromium.chrome.browser.precache.PrecacheUMA;
|
| -import org.chromium.content.browser.BrowserStartupController;
|
|
|
| /**
|
| * {@link ChromeBackgroundService} is scheduled through the {@link GcmNetworkManager} when the
|
| * browser needs to be launched for scheduled tasks, or in response to changing network or power
|
| * conditions.
|
| - *
|
| - * If HOLD_WAKELOCK is set to true in a bundle in the task params, then the ChromeBackgroundService
|
| - * will wait until the task reports done before returning control to the {@link GcmNetworkManager}.
|
| - * This both guarantees that the wakelock keeps chrome awake and that the GcmNetworkManager does not
|
| - * start another task in place of the one just started. The GcmNetworkManager can start more than
|
| - * one task concurrently, thought, so it does not guarantee that a different task won't start.
|
| */
|
| public class ChromeBackgroundService extends GcmTaskService {
|
| private static final String TAG = "BackgroundService";
|
| - /** Bundle key to use to specify we should block the GcmNetworkManager thread until the task on
|
| - * the UI thread is done before returning to the GcmNetworkManager.
|
| - */
|
| - public static final String HOLD_WAKELOCK = "HoldWakelock";
|
| - // GCM will return our wakelock after 3 minutes, we should be a second less than that.
|
| - private static final int WAKELOCK_TIMEOUT_SECONDS = 3 * 60 - 1;
|
| -
|
| - private BackgroundOfflinerTask mBackgroundOfflinerTask;
|
|
|
| @Override
|
| @VisibleForTesting
|
| public int onRunTask(final TaskParams params) {
|
| final String taskTag = params.getTag();
|
| Log.i(TAG, "[" + taskTag + "] Woken up at " + new java.util.Date().toString());
|
| - final ChromeBackgroundServiceWaiter waiter = getWaiterIfNeeded(params.getExtras());
|
| final Context context = this;
|
| ThreadUtils.runOnUiThread(new Runnable() {
|
| @Override
|
| @@ -67,8 +47,10 @@ public class ChromeBackgroundService extends GcmTaskService {
|
| break;
|
|
|
| case OfflinePageUtils.TASK_TAG:
|
| - handleOfflinePageBackgroundLoad(
|
| - context, params.getExtras(), waiter, taskTag);
|
| + // Offline pages are migrating to BackgroundTaskScheduler, therefore getting
|
| + // a task through ChromeBackgroundSerivce should cause a rescheduling using
|
| + // the new component.
|
| + rescheduleOfflinePages();
|
| break;
|
|
|
| case SnippetsLauncher.TASK_TAG_WIFI:
|
| @@ -92,8 +74,6 @@ public class ChromeBackgroundService extends GcmTaskService {
|
| }
|
| }
|
| });
|
| - // If needed, block the GcmNetworkManager thread until the UI thread has finished its work.
|
| - waitForTaskIfNeeded(waiter);
|
|
|
| return GcmNetworkManager.RESULT_SUCCESS;
|
| }
|
| @@ -144,46 +124,6 @@ public class ChromeBackgroundService extends GcmTaskService {
|
| PrecacheController.get(context).precache(tag);
|
| }
|
|
|
| - private void handleOfflinePageBackgroundLoad(
|
| - Context context, Bundle bundle, ChromeBackgroundServiceWaiter waiter, String tag) {
|
| - if (!BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER)
|
| - .isStartupSuccessfullyCompleted()) {
|
| - launchBrowser(context, tag);
|
| - }
|
| -
|
| - // Call BackgroundTask, provide context.
|
| - if (mBackgroundOfflinerTask == null) {
|
| - mBackgroundOfflinerTask =
|
| - new BackgroundOfflinerTask(new BackgroundSchedulerProcessorImpl());
|
| - }
|
| - mBackgroundOfflinerTask.startBackgroundRequests(context, bundle, waiter);
|
| - }
|
| -
|
| - /**
|
| - * If the bundle contains the special HOLD_WAKELOCK key set to true, then we create a
|
| - * CountDownLatch for use later in the wait step, and set its initial count to one.
|
| - */
|
| - @VisibleForTesting
|
| - public ChromeBackgroundServiceWaiter getWaiterIfNeeded(Bundle bundle) {
|
| - // If wait_needed is set to true, wait.
|
| - if (bundle != null && bundle.getBoolean(HOLD_WAKELOCK, false)) {
|
| - return new ChromeBackgroundServiceWaiter(WAKELOCK_TIMEOUT_SECONDS);
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - /**
|
| - * Some tasks need to block the GcmNetworkManager thread (and thus hold the wake lock) until the
|
| - * task is done. If we have a waiter, then start waiting.
|
| - */
|
| - @VisibleForTesting
|
| - public void waitForTaskIfNeeded(ChromeBackgroundServiceWaiter waiter) {
|
| - if (waiter != null) {
|
| - // Block current thread until the onWaitDone method is called, or a timeout occurs.
|
| - waiter.startWaiting();
|
| - }
|
| - }
|
| -
|
| @VisibleForTesting
|
| @SuppressFBWarnings("DM_EXIT")
|
| protected void launchBrowser(Context context, String tag) {
|
| @@ -227,8 +167,9 @@ public class ChromeBackgroundService extends GcmTaskService {
|
| }
|
| }
|
|
|
| - protected void rescheduleOfflinePagesTasksOnUpgrade() {
|
| - BackgroundScheduler.getInstance(this).rescheduleOfflinePagesTasksOnUpgrade();
|
| + /** Reschedules offline pages (using appropriate version of Background Task Scheduler). */
|
| + protected void rescheduleOfflinePages() {
|
| + BackgroundScheduler.getInstance().reschedule();
|
| }
|
|
|
| @Override
|
| @@ -236,6 +177,5 @@ public class ChromeBackgroundService extends GcmTaskService {
|
| rescheduleBackgroundSyncTasksOnUpgrade();
|
| reschedulePrecacheTasksOnUpgrade();
|
| rescheduleSnippetsTasksOnUpgrade();
|
| - rescheduleOfflinePagesTasksOnUpgrade();
|
| }
|
| }
|
|
|