569 lines
26 KiB
Diff
569 lines
26 KiB
Diff
From: Wengling Chen <feiyu2817@gmail.com>
|
|
Date: Sat, 2 Nov 2019 07:56:44 +0100
|
|
Subject: Remove dependency on com.google.android.gms.gcm
|
|
|
|
It also disalbes Snippets, auto-update of offline pages and launching browser from background service.
|
|
The snippets are already disabled in native codes, this will disable it on Java level.
|
|
---
|
|
chrome/android/BUILD.gn | 3 -
|
|
.../browser/ChromeBackgroundService.java | 4 -
|
|
.../gcm/ChromeGcmListenerService.java | 220 ------------------
|
|
components/background_task_scheduler/BUILD.gn | 1 -
|
|
.../internal/BUILD.gn | 3 -
|
|
.../BackgroundTaskGcmTaskService.java | 160 -------------
|
|
...ackgroundTaskSchedulerFactoryInternal.java | 6 +-
|
|
...kgroundTaskSchedulerGcmNetworkManager.java | 55 -----
|
|
8 files changed, 1 insertion(+), 451 deletions(-)
|
|
delete mode 100644 chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
|
|
delete mode 100644 components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskService.java
|
|
delete mode 100644 components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManager.java
|
|
|
|
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
|
|
--- a/chrome/android/BUILD.gn
|
|
+++ b/chrome/android/BUILD.gn
|
|
@@ -287,7 +287,6 @@ android_library("chrome_java") {
|
|
"$google_play_services_package:google_play_services_cast_framework_java",
|
|
"$google_play_services_package:google_play_services_cast_java",
|
|
"$google_play_services_package:google_play_services_fido_java",
|
|
- "$google_play_services_package:google_play_services_gcm_java",
|
|
"$google_play_services_package:google_play_services_iid_java",
|
|
"$google_play_services_package:google_play_services_tasks_java",
|
|
"//base:base_java",
|
|
@@ -966,7 +965,6 @@ android_library("chrome_test_java") {
|
|
"$google_play_services_package:google_play_services_cast_framework_java",
|
|
"$google_play_services_package:google_play_services_cast_java",
|
|
"$google_play_services_package:google_play_services_fido_java",
|
|
- "$google_play_services_package:google_play_services_gcm_java",
|
|
"$google_play_services_package:google_play_services_iid_java",
|
|
"$google_play_services_package:google_play_services_tasks_java",
|
|
"//base:base_java",
|
|
@@ -1915,7 +1913,6 @@ android_library("browser_java_test_support") {
|
|
]
|
|
deps = [
|
|
":chrome_java",
|
|
- "$google_play_services_package:google_play_services_gcm_java",
|
|
"//base:base_java",
|
|
"//base:base_java_test_support",
|
|
"//chrome/browser/profiles/android: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
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
|
|
@@ -8,10 +8,6 @@ import android.content.Context;
|
|
|
|
import androidx.annotation.VisibleForTesting;
|
|
|
|
-import com.google.android.gms.gcm.GcmNetworkManager;
|
|
-import com.google.android.gms.gcm.GcmTaskService;
|
|
-import com.google.android.gms.gcm.TaskParams;
|
|
-
|
|
import org.chromium.base.Log;
|
|
import org.chromium.base.task.PostTask;
|
|
import org.chromium.chrome.browser.background_sync.BackgroundSyncBackgroundTaskScheduler;
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java b/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
|
|
deleted file mode 100644
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
|
|
+++ /dev/null
|
|
@@ -1,220 +0,0 @@
|
|
-// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
-// Use of this source code is governed by a BSD-style license that can be
|
|
-// found in the LICENSE file.
|
|
-
|
|
-package org.chromium.chrome.browser.services.gcm;
|
|
-
|
|
-import android.content.Context;
|
|
-import android.content.Intent;
|
|
-import android.os.Build;
|
|
-import android.os.Bundle;
|
|
-import android.text.TextUtils;
|
|
-
|
|
-import com.google.android.gms.gcm.GcmListenerService;
|
|
-
|
|
-import org.chromium.base.ContextUtils;
|
|
-import org.chromium.base.Log;
|
|
-import org.chromium.base.ThreadUtils;
|
|
-import org.chromium.base.task.PostTask;
|
|
-import org.chromium.chrome.browser.device.DeviceConditions;
|
|
-import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
|
|
-import org.chromium.chrome.browser.init.ProcessInitializationHandler;
|
|
-import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
|
|
-import org.chromium.components.background_task_scheduler.TaskIds;
|
|
-import org.chromium.components.background_task_scheduler.TaskInfo;
|
|
-import org.chromium.components.gcm_driver.GCMDriver;
|
|
-import org.chromium.components.gcm_driver.GCMMessage;
|
|
-import org.chromium.components.gcm_driver.InstanceIDFlags;
|
|
-import org.chromium.components.gcm_driver.LazySubscriptionsManager;
|
|
-import org.chromium.components.gcm_driver.SubscriptionFlagManager;
|
|
-import org.chromium.content_public.browser.UiThreadTaskTraits;
|
|
-
|
|
-/**
|
|
- * Receives Downstream messages and status of upstream messages from GCM.
|
|
- */
|
|
-public class ChromeGcmListenerService extends GcmListenerService {
|
|
- private static final String TAG = "ChromeGcmListener";
|
|
-
|
|
- @Override
|
|
- public void onCreate() {
|
|
- ProcessInitializationHandler.getInstance().initializePreNative();
|
|
- super.onCreate();
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void onMessageReceived(final String from, final Bundle data) {
|
|
- boolean hasCollapseKey = !TextUtils.isEmpty(data.getString("collapse_key"));
|
|
- GcmUma.recordDataMessageReceived(ContextUtils.getApplicationContext(), hasCollapseKey);
|
|
-
|
|
- // Dispatch the message to the GCM Driver for native features.
|
|
- PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
|
|
- GCMMessage message = null;
|
|
- try {
|
|
- message = new GCMMessage(from, data);
|
|
- } catch (IllegalArgumentException e) {
|
|
- Log.e(TAG, "Received an invalid GCM Message", e);
|
|
- return;
|
|
- }
|
|
-
|
|
- scheduleOrDispatchMessageToDriver(message);
|
|
- });
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void onMessageSent(String msgId) {
|
|
- Log.d(TAG, "Message sent successfully. Message id: " + msgId);
|
|
- GcmUma.recordGcmUpstreamHistogram(
|
|
- ContextUtils.getApplicationContext(), GcmUma.UMA_UPSTREAM_SUCCESS);
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void onSendError(String msgId, String error) {
|
|
- Log.w(TAG, "Error in sending message. Message id: " + msgId + " Error: " + error);
|
|
- GcmUma.recordGcmUpstreamHistogram(
|
|
- ContextUtils.getApplicationContext(), GcmUma.UMA_UPSTREAM_SEND_FAILED);
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void onDeletedMessages() {
|
|
- // TODO(johnme): Ask GCM to include the subtype in this event.
|
|
- Log.w(TAG, "Push messages were deleted, but we can't tell the Service Worker as we don't"
|
|
- + "know what subtype (app ID) it occurred for.");
|
|
- GcmUma.recordDeletedMessages(ContextUtils.getApplicationContext());
|
|
- }
|
|
-
|
|
- /**
|
|
- * Returns if we deliver the GCMMessage with a background service by calling
|
|
- * Context#startService. This will only work if Android has put us in a whitelist to allow
|
|
- * background services to be started.
|
|
- */
|
|
- private static boolean maybeBypassScheduler(GCMMessage message) {
|
|
- // Android only puts us on a whitelist for high priority messages.
|
|
- if (message.getOriginalPriority() != GCMMessage.Priority.HIGH) {
|
|
- return false;
|
|
- }
|
|
-
|
|
- final String subscriptionId = SubscriptionFlagManager.buildSubscriptionUniqueId(
|
|
- message.getAppId(), message.getSenderId());
|
|
- if (!SubscriptionFlagManager.hasFlags(subscriptionId, InstanceIDFlags.BYPASS_SCHEDULER)) {
|
|
- return false;
|
|
- }
|
|
-
|
|
- try {
|
|
- Context context = ContextUtils.getApplicationContext();
|
|
- Intent intent = new Intent(context, GCMBackgroundService.class);
|
|
- intent.putExtras(message.toBundle());
|
|
- context.startService(intent);
|
|
- return true;
|
|
- } catch (IllegalStateException e) {
|
|
- // Failed to start service, maybe we're not whitelisted? Fallback to using
|
|
- // BackgroundTaskScheduler to start Chrome.
|
|
- // TODO(knollr): Add metrics for this.
|
|
- Log.e(TAG, "Could not start background service", e);
|
|
- return false;
|
|
- }
|
|
- }
|
|
-
|
|
- /**
|
|
- * Returns if the |message| is sent from a lazy subscription and we persist it to be delivered
|
|
- * the next time Chrome is launched into foreground.
|
|
- */
|
|
- private static boolean maybePersistLazyMessage(GCMMessage message) {
|
|
- if (isFullBrowserLoaded()) {
|
|
- return false;
|
|
- }
|
|
-
|
|
- final String subscriptionId = LazySubscriptionsManager.buildSubscriptionUniqueId(
|
|
- message.getAppId(), message.getSenderId());
|
|
-
|
|
- boolean isSubscriptionLazy = LazySubscriptionsManager.isSubscriptionLazy(subscriptionId);
|
|
- boolean isHighPriority = message.getOriginalPriority() == GCMMessage.Priority.HIGH;
|
|
- // TODO(crbug.com/945402): Add metrics for the new high priority message logic.
|
|
- boolean shouldPersistMessage = isSubscriptionLazy && !isHighPriority;
|
|
- if (shouldPersistMessage) {
|
|
- LazySubscriptionsManager.persistMessage(subscriptionId, message);
|
|
- }
|
|
-
|
|
- return shouldPersistMessage;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Schedules a background task via Job Scheduler to deliver the |message|. Delivery might get
|
|
- * delayed by Android if the device is currently in doze mode.
|
|
- */
|
|
- private static void scheduleBackgroundTask(GCMMessage message) {
|
|
- // TODO(peter): Add UMA for measuring latency introduced by the BackgroundTaskScheduler.
|
|
- TaskInfo backgroundTask =
|
|
- TaskInfo.createOneOffTask(TaskIds.GCM_BACKGROUND_TASK_JOB_ID, 0 /* immediately */)
|
|
- .setExtras(message.toBundle())
|
|
- .build();
|
|
- BackgroundTaskSchedulerFactory.getScheduler().schedule(
|
|
- ContextUtils.getApplicationContext(), backgroundTask);
|
|
- }
|
|
-
|
|
- private static void recordWebPushMetrics(GCMMessage message) {
|
|
- Context context = ContextUtils.getApplicationContext();
|
|
- boolean inIdleMode = DeviceConditions.isCurrentlyInIdleMode(context);
|
|
- boolean isHighPriority = message.getOriginalPriority() == GCMMessage.Priority.HIGH;
|
|
-
|
|
- @GcmUma.WebPushDeviceState
|
|
- int state;
|
|
- if (inIdleMode) {
|
|
- state = isHighPriority ? GcmUma.WebPushDeviceState.IDLE_HIGH_PRIORITY
|
|
- : GcmUma.WebPushDeviceState.IDLE_NOT_HIGH_PRIORITY;
|
|
- } else {
|
|
- state = isHighPriority ? GcmUma.WebPushDeviceState.NOT_IDLE_HIGH_PRIORITY
|
|
- : GcmUma.WebPushDeviceState.NOT_IDLE_NOT_HIGH_PRIORITY;
|
|
- }
|
|
- GcmUma.recordWebPushReceivedDeviceState(state);
|
|
- }
|
|
-
|
|
- /**
|
|
- * If Chrome is backgrounded, messages coming from lazy subscriptions are
|
|
- * persisted on disk and replayed next time Chrome is forgrounded. If Chrome is forgrounded or
|
|
- * if the message isn't coming from a lazy subscription, this method either schedules |message|
|
|
- * to be dispatched through the Job Scheduler, which we use on Android N and beyond, or
|
|
- * immediately dispatches the message on other versions of Android. Some subscriptions bypass
|
|
- * the Job Scheduler and use Context#startService instead if the |message| has a high priority.
|
|
- * Must be called on the UI thread both for the BackgroundTaskScheduler and for dispatching the
|
|
- * |message| to the GCMDriver.
|
|
- */
|
|
- static void scheduleOrDispatchMessageToDriver(GCMMessage message) {
|
|
- ThreadUtils.assertOnUiThread();
|
|
-
|
|
- // GCMMessage#getAppId never returns null.
|
|
- if (message.getAppId().startsWith("wp:")) {
|
|
- recordWebPushMetrics(message);
|
|
- }
|
|
-
|
|
- // Check if we should only persist the message for now.
|
|
- if (maybePersistLazyMessage(message)) {
|
|
- return;
|
|
- }
|
|
-
|
|
- // Dispatch message immediately on pre N versions of Android.
|
|
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
|
- dispatchMessageToDriver(message);
|
|
- return;
|
|
- }
|
|
-
|
|
- // Check if we should bypass the scheduler for high priority messages.
|
|
- if (!maybeBypassScheduler(message)) {
|
|
- scheduleBackgroundTask(message);
|
|
- }
|
|
- }
|
|
-
|
|
- /**
|
|
- * To be called when a GCM message is ready to be dispatched. Will initialise the native code
|
|
- * of the browser process, and forward the message to the GCM Driver. Must be called on the UI
|
|
- * thread.
|
|
- */
|
|
- static void dispatchMessageToDriver(GCMMessage message) {
|
|
- ThreadUtils.assertOnUiThread();
|
|
- ChromeBrowserInitializer.getInstance().handleSynchronousStartup();
|
|
- GCMDriver.dispatchMessage(message);
|
|
- }
|
|
-
|
|
- private static boolean isFullBrowserLoaded() {
|
|
- return ChromeBrowserInitializer.getInstance().isFullBrowserInitialized();
|
|
- }
|
|
-}
|
|
diff --git a/components/background_task_scheduler/BUILD.gn b/components/background_task_scheduler/BUILD.gn
|
|
--- a/components/background_task_scheduler/BUILD.gn
|
|
+++ b/components/background_task_scheduler/BUILD.gn
|
|
@@ -123,7 +123,6 @@ if (is_android) {
|
|
"$google_play_services_package:google_play_services_auth_base_java",
|
|
"$google_play_services_package:google_play_services_base_java",
|
|
"$google_play_services_package:google_play_services_basement_java",
|
|
- "$google_play_services_package:google_play_services_gcm_java",
|
|
"$google_play_services_package:google_play_services_tasks_java",
|
|
"internal:internal_java",
|
|
"internal:proto_java",
|
|
diff --git a/components/background_task_scheduler/internal/BUILD.gn b/components/background_task_scheduler/internal/BUILD.gn
|
|
--- a/components/background_task_scheduler/internal/BUILD.gn
|
|
+++ b/components/background_task_scheduler/internal/BUILD.gn
|
|
@@ -11,7 +11,6 @@ if (is_android) {
|
|
android_library("internal_java") {
|
|
sources = [
|
|
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskBroadcastReceiver.java",
|
|
- "android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskService.java",
|
|
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskJobService.java",
|
|
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerAlarmManager.java",
|
|
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerDelegate.java",
|
|
@@ -28,7 +27,6 @@ if (is_android) {
|
|
":proto_java",
|
|
"$google_play_services_package:google_play_services_base_java",
|
|
"$google_play_services_package:google_play_services_basement_java",
|
|
- "$google_play_services_package:google_play_services_gcm_java",
|
|
"$google_play_services_package:google_play_services_tasks_java",
|
|
"//base:base_java",
|
|
"//components/background_task_scheduler:background_task_scheduler_task_ids_java",
|
|
@@ -99,7 +97,6 @@ if (is_android) {
|
|
":internal_java",
|
|
"$google_play_services_package:google_play_services_base_java",
|
|
"$google_play_services_package:google_play_services_basement_java",
|
|
- "$google_play_services_package:google_play_services_gcm_java",
|
|
"$google_play_services_package:google_play_services_tasks_java",
|
|
"//base:base_java",
|
|
"//base:base_java_test_support",
|
|
diff --git a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskService.java b/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskService.java
|
|
deleted file mode 100644
|
|
--- a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskService.java
|
|
+++ /dev/null
|
|
@@ -1,160 +0,0 @@
|
|
-// Copyright 2017 The Chromium Authors. All rights reserved.
|
|
-// Use of this source code is governed by a BSD-style license that can be
|
|
-// found in the LICENSE file.
|
|
-
|
|
-package org.chromium.components.background_task_scheduler.internal;
|
|
-
|
|
-import android.os.Build;
|
|
-
|
|
-import androidx.annotation.VisibleForTesting;
|
|
-
|
|
-import com.google.android.gms.gcm.GcmNetworkManager;
|
|
-import com.google.android.gms.gcm.GcmTaskService;
|
|
-import com.google.android.gms.gcm.TaskParams;
|
|
-
|
|
-import org.chromium.base.ContextUtils;
|
|
-import org.chromium.base.Log;
|
|
-import org.chromium.base.ThreadUtils;
|
|
-import org.chromium.components.background_task_scheduler.BackgroundTask;
|
|
-import org.chromium.components.background_task_scheduler.TaskParameters;
|
|
-
|
|
-import java.util.concurrent.CountDownLatch;
|
|
-import java.util.concurrent.TimeUnit;
|
|
-import java.util.concurrent.atomic.AtomicBoolean;
|
|
-
|
|
-/** Delegates calls out to various tasks that need to run in the background. */
|
|
-public class BackgroundTaskGcmTaskService extends GcmTaskService {
|
|
- private static final String TAG = "BkgrdTaskGcmTS";
|
|
-
|
|
- private BackgroundTaskSchedulerGcmNetworkManager.Clock mClock = System::currentTimeMillis;
|
|
-
|
|
- @VisibleForTesting
|
|
- void setClockForTesting(BackgroundTaskSchedulerGcmNetworkManager.Clock clock) {
|
|
- mClock = clock;
|
|
- }
|
|
-
|
|
- /** Class that waits for the processing to be done. */
|
|
- private static class Waiter {
|
|
- // Wakelock is only held for 3 minutes by default for GcmTaskService.
|
|
- private static final long MAX_TIMEOUT_SECONDS = 179;
|
|
- private final CountDownLatch mLatch;
|
|
- private long mWaiterTimeoutSeconds;
|
|
- private boolean mIsRescheduleNeeded;
|
|
- private boolean mHasTaskTimedOut;
|
|
-
|
|
- public Waiter(long waiterTimeoutSeconds) {
|
|
- mLatch = new CountDownLatch(1);
|
|
- mWaiterTimeoutSeconds = Math.min(waiterTimeoutSeconds, MAX_TIMEOUT_SECONDS);
|
|
- }
|
|
-
|
|
- /** Start waiting for the processing to finish. */
|
|
- public void startWaiting() {
|
|
- try {
|
|
- mHasTaskTimedOut = !mLatch.await(mWaiterTimeoutSeconds, TimeUnit.SECONDS);
|
|
- } catch (InterruptedException e) {
|
|
- Log.d(TAG, "Waiter interrupted while waiting.");
|
|
- }
|
|
- }
|
|
-
|
|
- /** Called to finish waiting. */
|
|
- public void onWaitDone(boolean needsRescheduling) {
|
|
- mIsRescheduleNeeded = needsRescheduling;
|
|
- mLatch.countDown();
|
|
- }
|
|
-
|
|
- /** @return Whether last task timed out. */
|
|
- public boolean hasTaskTimedOut() {
|
|
- return mHasTaskTimedOut;
|
|
- }
|
|
-
|
|
- /** @return Whether task needs to be rescheduled. */
|
|
- public boolean isRescheduleNeeded() {
|
|
- return mIsRescheduleNeeded;
|
|
- }
|
|
- }
|
|
-
|
|
- private static class TaskFinishedCallbackGcmTaskService
|
|
- implements BackgroundTask.TaskFinishedCallback {
|
|
- private final Waiter mWaiter;
|
|
-
|
|
- public TaskFinishedCallbackGcmTaskService(Waiter waiter) {
|
|
- mWaiter = waiter;
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void taskFinished(final boolean needsReschedule) {
|
|
- ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
|
- @Override
|
|
- public void run() {
|
|
- mWaiter.onWaitDone(needsReschedule);
|
|
- }
|
|
- });
|
|
- }
|
|
- }
|
|
-
|
|
- @Override
|
|
- public int onRunTask(TaskParams params) {
|
|
- final TaskParameters taskParams =
|
|
- BackgroundTaskSchedulerGcmNetworkManager.getTaskParametersFromTaskParams(params);
|
|
-
|
|
- final BackgroundTask backgroundTask =
|
|
- BackgroundTaskSchedulerFactoryInternal.getBackgroundTaskFromTaskId(
|
|
- taskParams.getTaskId());
|
|
- if (backgroundTask == null) {
|
|
- Log.w(TAG, "Failed to start task. Could not instantiate BackgroundTask class.");
|
|
- // Cancel task if the BackgroundTask class is not found anymore. We assume this means
|
|
- // that the task has been deprecated.
|
|
- BackgroundTaskSchedulerFactoryInternal.getScheduler().cancel(
|
|
- ContextUtils.getApplicationContext(), taskParams.getTaskId());
|
|
- return GcmNetworkManager.RESULT_FAILURE;
|
|
- }
|
|
-
|
|
- if (BackgroundTaskSchedulerGcmNetworkManager.didTaskExpire(
|
|
- params, mClock.currentTimeMillis())) {
|
|
- BackgroundTaskSchedulerUma.getInstance().reportTaskExpired(taskParams.getTaskId());
|
|
- return GcmNetworkManager.RESULT_FAILURE;
|
|
- }
|
|
-
|
|
- final Waiter waiter = new Waiter(Waiter.MAX_TIMEOUT_SECONDS);
|
|
-
|
|
- final AtomicBoolean taskNeedsBackgroundProcessing = new AtomicBoolean();
|
|
- ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
|
- @Override
|
|
- public void run() {
|
|
- BackgroundTaskSchedulerUma.getInstance().reportTaskStarted(taskParams.getTaskId());
|
|
- taskNeedsBackgroundProcessing.set(
|
|
- backgroundTask.onStartTask(ContextUtils.getApplicationContext(), taskParams,
|
|
- new TaskFinishedCallbackGcmTaskService(waiter)));
|
|
- }
|
|
- });
|
|
-
|
|
- if (!taskNeedsBackgroundProcessing.get()) return GcmNetworkManager.RESULT_SUCCESS;
|
|
-
|
|
- waiter.startWaiting();
|
|
-
|
|
- if (waiter.isRescheduleNeeded()) return GcmNetworkManager.RESULT_RESCHEDULE;
|
|
- if (!waiter.hasTaskTimedOut()) return GcmNetworkManager.RESULT_SUCCESS;
|
|
-
|
|
- final AtomicBoolean taskNeedsRescheduling = new AtomicBoolean();
|
|
- ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
|
- @Override
|
|
- public void run() {
|
|
- BackgroundTaskSchedulerUma.getInstance().reportTaskStopped(taskParams.getTaskId());
|
|
- taskNeedsRescheduling.set(backgroundTask.onStopTask(
|
|
- ContextUtils.getApplicationContext(), taskParams));
|
|
- }
|
|
- });
|
|
-
|
|
- if (taskNeedsRescheduling.get()) return GcmNetworkManager.RESULT_RESCHEDULE;
|
|
-
|
|
- return GcmNetworkManager.RESULT_SUCCESS;
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void onInitializeTasks() {
|
|
- // Ignore the event on OSs supporting JobScheduler.
|
|
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) return;
|
|
- BackgroundTaskSchedulerFactoryInternal.getScheduler().reschedule(
|
|
- ContextUtils.getApplicationContext());
|
|
- }
|
|
-}
|
|
diff --git a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerFactoryInternal.java b/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerFactoryInternal.java
|
|
--- a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerFactoryInternal.java
|
|
+++ b/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerFactoryInternal.java
|
|
@@ -21,11 +21,7 @@ public final class BackgroundTaskSchedulerFactoryInternal {
|
|
private static BackgroundTaskFactory sBackgroundTaskFactory;
|
|
|
|
static BackgroundTaskSchedulerDelegate getSchedulerDelegateForSdk(int sdkInt) {
|
|
- if (sdkInt >= Build.VERSION_CODES.M) {
|
|
- return new BackgroundTaskSchedulerJobService();
|
|
- } else {
|
|
- return new BackgroundTaskSchedulerGcmNetworkManager();
|
|
- }
|
|
+ return new BackgroundTaskSchedulerJobService();
|
|
}
|
|
|
|
/**
|
|
diff --git a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManager.java b/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManager.java
|
|
deleted file mode 100644
|
|
--- a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManager.java
|
|
+++ /dev/null
|
|
@@ -1,55 +0,0 @@
|
|
-// Copyright 2017 The Chromium Authors. All rights reserved.
|
|
-// Use of this source code is governed by a BSD-style license that can be
|
|
-// found in the LICENSE file.
|
|
-
|
|
-package org.chromium.components.background_task_scheduler.internal;
|
|
-
|
|
-import android.content.Context;
|
|
-import android.os.Bundle;
|
|
-
|
|
-import androidx.annotation.NonNull;
|
|
-import androidx.annotation.VisibleForTesting;
|
|
-
|
|
-import org.chromium.base.Log;
|
|
-import org.chromium.base.ThreadUtils;
|
|
-import org.chromium.components.background_task_scheduler.TaskInfo;
|
|
-import org.chromium.components.background_task_scheduler.TaskParameters;
|
|
-
|
|
-import java.util.concurrent.TimeUnit;
|
|
-
|
|
-/**
|
|
- * An implementation of {@link BackgroundTaskSchedulerDelegate} that uses the Play Services
|
|
- * {@link GcmNetworkManager} to schedule jobs.
|
|
- */
|
|
-class BackgroundTaskSchedulerGcmNetworkManager implements BackgroundTaskSchedulerDelegate {
|
|
- private static final String TAG = "BkgrdTaskSchedGcmNM";
|
|
-
|
|
- /** Delta time for expiration checks, after the end time. */
|
|
- static final long DEADLINE_DELTA_MS = 1000;
|
|
-
|
|
- /** Clock to use so we can mock time in tests. */
|
|
- public interface Clock { long currentTimeMillis(); }
|
|
-
|
|
- private static Clock sClock = System::currentTimeMillis;
|
|
-
|
|
- @VisibleForTesting
|
|
- static void setClockForTesting(Clock clock) {
|
|
- sClock = clock;
|
|
- }
|
|
-
|
|
- @Override
|
|
- public boolean schedule(Context context, @NonNull TaskInfo taskInfo) {
|
|
- ThreadUtils.assertOnUiThread();
|
|
-
|
|
- return false;
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void cancel(Context context, int taskId) {
|
|
- ThreadUtils.assertOnUiThread();
|
|
- }
|
|
-
|
|
- private static String taskIdToTaskTag(int taskId) {
|
|
- return Integer.toString(taskId);
|
|
- }
|
|
-}
|
|
--
|
|
2.17.1
|
|
|