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

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

Issue 2830843002: [Offline pages] Updates to background scheduling to use BTS (Closed)
Patch Set: Addressing code review comments Created 3 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
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();
}
}

Powered by Google App Engine
This is Rietveld 408576698