From: Wengling Chen 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 | 11 -- components/background_task_scheduler/BUILD.gn | 1 - .../internal/BUILD.gn | 3 - .../BackgroundTaskGcmTaskService.java | 160 ------------------ ...ackgroundTaskSchedulerFactoryInternal.java | 6 +- ...kgroundTaskSchedulerGcmNetworkManager.java | 60 ------- .../gms/ChromiumPlayServicesAvailability.java | 10 +- 7 files changed, 3 insertions(+), 248 deletions(-) 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 @@ -283,7 +283,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", @@ -995,7 +994,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", @@ -1950,7 +1948,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", @@ -2089,8 +2086,6 @@ android_library("base_monochrome_module_java") { # enable_chrome_module is true and //chrome code is in a DFM. android_library("base_module_java") { sources = [ - "java/src/com/google/ipc/invalidation/ticl/android2/channel/GcmRegistrationTaskService.java", - "java/src/org/chromium/chrome/browser/ChromeBackgroundService.java", "java/src/org/chromium/chrome/browser/ChromeBackupAgent.java", "java/src/org/chromium/chrome/browser/base/MainDexApplicationImpl.java", "java/src/org/chromium/chrome/browser/base/SplitChromeApplication.java", @@ -2098,8 +2093,6 @@ android_library("base_module_java") { "java/src/org/chromium/chrome/browser/base/SplitCompatApplication.java", "java/src/org/chromium/chrome/browser/base/SplitCompatBackupAgent.java", "java/src/org/chromium/chrome/browser/base/SplitCompatCustomTabsService.java", - "java/src/org/chromium/chrome/browser/base/SplitCompatGcmListenerService.java", - "java/src/org/chromium/chrome/browser/base/SplitCompatGcmTaskService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatIntentService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatJobService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatMinidumpUploadJobService.java", @@ -2121,14 +2114,10 @@ android_library("base_module_java") { "java/src/org/chromium/chrome/browser/omaha/OmahaClient.java", "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java", "java/src/org/chromium/chrome/browser/prerender/ChromePrerenderService.java", - "java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java", - "java/src/org/chromium/chrome/browser/services/gcm/GCMBackgroundService.java", - "java/src/org/chromium/chrome/browser/services/gcm/InvalidationGcmUpstreamSender.java", "java/src/org/chromium/chrome/browser/tracing/TracingNotificationService.java", ] deps = [ ":chrome_base_module_resources", - "$google_play_services_package:google_play_services_gcm_java", "//base:base_java", "//components/embedder_support/android:application_java", "//components/media_router/browser/android:cast_options_provider_java", 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", @@ -100,7 +98,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,60 +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 com.google.android.gms.gcm.GcmNetworkManager; -import com.google.android.gms.gcm.OneoffTask; -import com.google.android.gms.gcm.PeriodicTask; -import com.google.android.gms.gcm.Task; -import com.google.android.gms.gcm.TaskParams; - -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 org.chromium.gms.ChromiumPlayServicesAvailability; - -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) { - } - - private static String taskIdToTaskTag(int taskId) { - return Integer.toString(taskId); - } -} diff --git a/third_party/android_deps/util/org/chromium/gms/ChromiumPlayServicesAvailability.java b/third_party/android_deps/util/org/chromium/gms/ChromiumPlayServicesAvailability.java --- a/third_party/android_deps/util/org/chromium/gms/ChromiumPlayServicesAvailability.java +++ b/third_party/android_deps/util/org/chromium/gms/ChromiumPlayServicesAvailability.java @@ -5,9 +5,6 @@ package org.chromium.gms; import android.content.Context; -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.GoogleApiAvailability; - public final class ChromiumPlayServicesAvailability { /** * The minimum GMS version we're requesting. isGooglePlayServicesAvailable will fail if the @@ -30,8 +27,7 @@ public final class ChromiumPlayServicesAvailability { * PM/UX. */ public static int getGooglePlayServicesConnectionResult(final Context context) { - return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable( - context, GMS_VERSION_NUMBER); + return 16; // API_UNAVAILABLE } /** @@ -44,8 +40,6 @@ public final class ChromiumPlayServicesAvailability { * PM/UX. */ public static boolean isGooglePlayServicesAvailable(final Context context) { - return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable( - context, GMS_VERSION_NUMBER) - == ConnectionResult.SUCCESS; + return false; } } -- 2.17.1