Commit 7c602a3c authored by Peter Kotwicz's avatar Peter Kotwicz Committed by Commit Bot

Revert "Background task scheduler : Split code into public and internal"

This reverts commit f8a4ba13.

Reason for revert:
GN modifications broke components_background_task_scheduler_junit_tests

Original change's description:
> Background task scheduler : Split code into public and internal
> 
> This CL separates the public interfaces from the internal code of background
> task scheduler's Java code.
> 
> 1 - The public classes/interfaces are left at top level components/background_task_scheduler
>     while the implementation code is moved to internal/
> 2 - Internal code is moved to a separate package as well.
> 3 - The factory will be a separate target that depends on public and internal.
> 4 - Some classes need to be referenced from both chrome/ and internal code,
>   e.g. BackgroundTaskSchedulerFactory, Uma classes, SharedPref. To handle this,
>   have two classes, e.g. BackgroundTaskSchedulerFactory and BackgroundTaskSchedulerFactoryInternal
> 
> We should probably move the NativeBackgroundTask as well to components/ which
> will greatly help the dependent code to live in components/. Will think about it in a future CL.
> 
> Bug: 1045765
> Change-Id: Idddb3ed33789a735e920f33b7c0f3cb40e5e844a
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2021857
> Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
> Reviewed-by: David Trainor <dtrainor@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#738560}

TBR=nyquist@chromium.org,dtrainor@chromium.org,shaktisahu@chromium.org

Change-Id: I33c04539e01afae186023e7e011842994d8589ec
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 1045765
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2040373Reviewed-by: default avatarPeter Kotwicz <pkotwicz@chromium.org>
Commit-Queue: Peter Kotwicz <pkotwicz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738707}
parent bc642433
......@@ -790,8 +790,8 @@ android_library("chrome_test_java") {
"//chrome/test/android/test_trusted_web_activity:test_trusted_web_activity_java",
"//components/autofill/android:autofill_java",
"//components/background_task_scheduler:background_task_scheduler_java",
"//components/background_task_scheduler:background_task_scheduler_javatests",
"//components/background_task_scheduler:background_task_scheduler_task_ids_java",
"//components/background_task_scheduler/internal:background_task_scheduler_javatests",
"//components/bookmarks/common/android:bookmarks_java",
"//components/browser_ui/modaldialog/android:java",
"//components/browser_ui/modaldialog/android:javatests",
......
......@@ -1105,12 +1105,12 @@ by a child template that "extends" this file.
android:permission="android.permission.BIND_JOB_SERVICE"/>
<!-- Background Task Scheduler job service -->
<service android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskJobService"
<service android:name="org.chromium.components.background_task_scheduler.BackgroundTaskJobService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"/>
<!-- Background Task Scheduler GCM task service -->
<service android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskGcmTaskService"
<service android:name="org.chromium.components.background_task_scheduler.BackgroundTaskGcmTaskService"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"
android:exported="true">
<intent-filter>
......@@ -1119,7 +1119,7 @@ by a child template that "extends" this file.
</service>
<!-- Background Task Scheduler alarm receiver -->
<receiver android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskBroadcastReceiver"
<receiver android:name="org.chromium.components.background_task_scheduler.BackgroundTaskBroadcastReceiver"
android:exported="false" />
<!-- GcmTaskService implementation to wake Chrome on scheduled events -->
......
......@@ -1432,7 +1432,7 @@
</receiver>
<receiver
android:exported="false"
android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskBroadcastReceiver"/>
android:name="org.chromium.components.background_task_scheduler.BackgroundTaskBroadcastReceiver"/>
<receiver
android:exported="true"
android:name="com.google.android.gms.gcm.GcmReceiver"
......@@ -1654,7 +1654,7 @@
android:name="org.chromium.chrome.browser.tracing.TracingNotificationService"/>
<service
android:exported="false"
android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskJobService"
android:name="org.chromium.components.background_task_scheduler.BackgroundTaskJobService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
<service
android:exported="true"
......@@ -1687,7 +1687,7 @@
</service>
<service
android:exported="true"
android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskGcmTaskService"
android:name="org.chromium.components.background_task_scheduler.BackgroundTaskGcmTaskService"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
<intent-filter>
<action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
......
......@@ -20,7 +20,6 @@ import org.chromium.chrome.browser.init.EmptyBrowserParts;
import org.chromium.chrome.browser.metrics.BackgroundTaskMemoryMetricsEmitter;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerExternalUma;
import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
import org.chromium.components.background_task_scheduler.TaskParameters;
import org.chromium.content_public.browser.BrowserStartupController;
import org.chromium.content_public.browser.UiThreadTaskTraits;
......@@ -68,7 +67,7 @@ public abstract class NativeBackgroundTask implements BackgroundTask {
private BackgroundTaskSchedulerExternalUma mExternalUma;
protected NativeBackgroundTask() {
this(BackgroundTaskSchedulerFactory.getUmaReporter());
this(BackgroundTaskSchedulerExternalUma.getInstance());
}
@VisibleForTesting
......
......@@ -38,7 +38,8 @@ import org.chromium.chrome.browser.download.DownloadManagerService;
import org.chromium.chrome.browser.services.GoogleServicesManager;
import org.chromium.chrome.browser.webapps.ActivityAssigner;
import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerExternalUma;
import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerPrefs;
import org.chromium.components.crash.browser.ChildProcessCrashObserver;
import org.chromium.components.minidump_uploader.CrashFileManager;
import org.chromium.components.module_installer.util.ModuleUtil;
......@@ -197,12 +198,12 @@ public class ChromeBrowserInitializer {
PostTask.postTask(TaskTraits.BEST_EFFORT_MAY_BLOCK, () -> {
ActivityAssigner.warmUpSharedPrefs();
DownloadManagerService.warmUpSharedPrefs();
BackgroundTaskSchedulerFactory.warmUpSharedPrefs();
BackgroundTaskSchedulerPrefs.warmUpSharedPrefs();
});
} else {
ActivityAssigner.warmUpSharedPrefs();
DownloadManagerService.warmUpSharedPrefs();
BackgroundTaskSchedulerFactory.warmUpSharedPrefs();
BackgroundTaskSchedulerPrefs.warmUpSharedPrefs();
}
}
......@@ -309,7 +310,7 @@ public class ChromeBrowserInitializer {
int startupMode =
getBrowserStartupController().getStartupMode(delegate.startServiceManagerOnly());
tasks.add(UiThreadTaskTraits.DEFAULT, () -> {
BackgroundTaskSchedulerFactory.getUmaReporter().reportStartupMode(startupMode);
BackgroundTaskSchedulerExternalUma.getInstance().reportStartupMode(startupMode);
});
if (isAsync) {
......
......@@ -14,16 +14,7 @@ group("background_task_scheduler") {
if (is_android) {
deps = [
":background_task_scheduler_java",
"internal:background_task_scheduler_javatests",
]
}
}
if (is_android) {
java_group("background_task_scheduler_java") {
deps = [
"//components/background_task_scheduler:factory_java",
"//components/background_task_scheduler:public_java",
":background_task_scheduler_javatests",
]
}
}
......@@ -36,35 +27,102 @@ if (is_android) {
sources = [ "android/java/src/org/chromium/components/background_task_scheduler/TaskIds.java" ]
}
android_library("public_java") {
android_library("background_task_scheduler_java") {
sources = [
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTask.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskBroadcastReceiver.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskFactory.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskGcmTaskService.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskJobService.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskScheduler.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerAlarmManager.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerDelegate.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerExternalUma.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerFactory.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerImpl.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobService.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefs.java",
"android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerUma.java",
"android/java/src/org/chromium/components/background_task_scheduler/BundleToPersistableBundleConverter.java",
"android/java/src/org/chromium/components/background_task_scheduler/ExtrasToProtoConverter.java",
"android/java/src/org/chromium/components/background_task_scheduler/TaskInfo.java",
"android/java/src/org/chromium/components/background_task_scheduler/TaskParameters.java",
]
deps = [
":background_task_scheduler_task_ids_java",
":scheduled_task_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",
"//content/public/android:content_java",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//third_party/android_deps:com_google_protobuf_protobuf_lite_java",
]
}
android_library("factory_java") {
sources = [ "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerFactory.java" ]
android_library("background_task_scheduler_javatests") {
testonly = true
sources = [
"android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerImplWithMockTest.java",
"android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java",
"android/javatests/src/org/chromium/components/background_task_scheduler/BundleToPersistableBundleConverterTest.java",
"android/javatests/src/org/chromium/components/background_task_scheduler/MockBackgroundTaskSchedulerDelegate.java",
]
deps = [
":public_java",
"internal:internal_java",
":background_task_scheduler_java",
":background_task_scheduler_task_ids_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",
"//content/public/test/android:content_java_test_support",
"//third_party/android_support_test_runner:runner_java",
"//third_party/junit",
]
}
group("components_background_task_scheduler_junit_tests") {
testonly = true
junit_binary("components_background_task_scheduler_junit_tests") {
sources = [
"android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskGcmTaskServiceTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskJobServiceTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerAlarmManagerTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManagerTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerImplTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefsTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerUmaTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/BroadcastReceiverRobolectricTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/ExtrasToProtoConverterTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/ShadowGcmNetworkManager.java",
"android/junit/src/org/chromium/components/background_task_scheduler/TaskInfoTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/TestBackgroundTask.java",
"android/junit/src/org/chromium/components/background_task_scheduler/TestBackgroundTaskFactory.java",
]
deps = [
":background_task_scheduler_java",
"$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",
"//base:base_java",
"//base:base_java_test_support",
"//base:base_junit_test_support",
"//third_party/junit",
]
}
deps =
[ "internal:components_internal_background_task_scheduler_junit_tests" ]
proto_java_library("scheduled_task_java") {
proto_path =
"android/java/src/org/chromium/components/background_task_scheduler"
sources = [ "$proto_path/scheduled_task.proto" ]
}
}
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.content.BroadcastReceiver;
import android.content.Context;
......@@ -20,9 +20,6 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.task.PostTask;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.TaskInfo;
import org.chromium.components.background_task_scheduler.TaskParameters;
import org.chromium.content_public.browser.UiThreadTaskTraits;
/**
......@@ -129,12 +126,12 @@ public class BackgroundTaskBroadcastReceiver extends BroadcastReceiver {
}
final BackgroundTask backgroundTask =
BackgroundTaskSchedulerFactoryInternal.getBackgroundTaskFromTaskId(taskId);
BackgroundTaskSchedulerFactory.getBackgroundTaskFromTaskId(taskId);
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(
BackgroundTaskSchedulerFactory.getScheduler().cancel(
ContextUtils.getApplicationContext(), taskParams.getTaskId());
return;
}
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.os.Build;
......@@ -15,8 +15,6 @@ 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;
......@@ -98,13 +96,12 @@ public class BackgroundTaskGcmTaskService extends GcmTaskService {
BackgroundTaskSchedulerGcmNetworkManager.getTaskParametersFromTaskParams(params);
final BackgroundTask backgroundTask =
BackgroundTaskSchedulerFactoryInternal.getBackgroundTaskFromTaskId(
taskParams.getTaskId());
BackgroundTaskSchedulerFactory.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(
BackgroundTaskSchedulerFactory.getScheduler().cancel(
ContextUtils.getApplicationContext(), taskParams.getTaskId());
return GcmNetworkManager.RESULT_FAILURE;
}
......@@ -154,7 +151,7 @@ public class BackgroundTaskGcmTaskService extends GcmTaskService {
public void onInitializeTasks() {
// Ignore the event on OSs supporting JobScheduler.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) return;
BackgroundTaskSchedulerFactoryInternal.getScheduler().reschedule(
BackgroundTaskSchedulerFactory.getScheduler().reschedule(
ContextUtils.getApplicationContext());
}
}
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.annotation.TargetApi;
import android.app.job.JobParameters;
......@@ -14,8 +14,6 @@ import androidx.annotation.VisibleForTesting;
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.HashMap;
import java.util.Map;
......@@ -78,13 +76,12 @@ public class BackgroundTaskJobService extends JobService {
public boolean onStartJob(JobParameters params) {
ThreadUtils.assertOnUiThread();
BackgroundTask backgroundTask =
BackgroundTaskSchedulerFactoryInternal.getBackgroundTaskFromTaskId(
params.getJobId());
BackgroundTaskSchedulerFactory.getBackgroundTaskFromTaskId(params.getJobId());
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(
BackgroundTaskSchedulerFactory.getScheduler().cancel(
ContextUtils.getApplicationContext(), params.getJobId());
return false;
}
......@@ -112,8 +109,7 @@ public class BackgroundTaskJobService extends JobService {
public boolean onStopJob(JobParameters params) {
ThreadUtils.assertOnUiThread();
if (!mCurrentTasks.containsKey(params.getJobId())) {
Log.w(TAG,
"Failed to stop job, because job with job id " + params.getJobId()
Log.w(TAG, "Failed to stop job, because job with job id " + params.getJobId()
+ " does not exist.");
return false;
}
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.app.AlarmManager;
import android.app.PendingIntent;
......@@ -15,8 +15,6 @@ 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;
/**
* An implementation of {@link BackgroundTaskSchedulerDelegate} that uses the system API
......
......@@ -2,14 +2,12 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.content.Context;
import androidx.annotation.VisibleForTesting;
import org.chromium.components.background_task_scheduler.TaskInfo;
/**
* The internal representation of a {@link BackgroundTaskScheduler} to make it possible to use
* system APIs ({@link android.app.job.JobScheduler} on newer platforms and GCM
......
......@@ -10,35 +10,21 @@ import androidx.annotation.VisibleForTesting;
* Helper class to allow external code (typically Chrome-specific BackgroundTaskScheduler code) to
* report UMA.
*/
public abstract class BackgroundTaskSchedulerExternalUma {
// BackgroundTaskId defined in tools/metrics/histograms/enums.xml
public static final int BACKGROUND_TASK_TEST = 0;
public static final int BACKGROUND_TASK_OMAHA = 1;
public static final int BACKGROUND_TASK_GCM = 2;
public static final int BACKGROUND_TASK_NOTIFICATIONS = 3;
public static final int BACKGROUND_TASK_WEBVIEW_MINIDUMP = 4;
public static final int BACKGROUND_TASK_CHROME_MINIDUMP = 5;
public static final int BACKGROUND_TASK_OFFLINE_PAGES = 6;
public static final int BACKGROUND_TASK_OFFLINE_PREFETCH = 7;
public static final int BACKGROUND_TASK_DOWNLOAD_SERVICE = 8;
public static final int BACKGROUND_TASK_DOWNLOAD_CLEANUP = 9;
public static final int BACKGROUND_TASK_WEBVIEW_VARIATIONS = 10;
public static final int BACKGROUND_TASK_OFFLINE_CONTENT_NOTIFICATION = 11;
public static final int BACKGROUND_TASK_WEBAPK_UPDATE = 12;
public static final int BACKGROUND_TASK_DOWNLOAD_RESUMPTION = 13;
public static final int BACKGROUND_TASK_FEED_REFRESH = 14;
public static final int BACKGROUND_TASK_COMPONENT_UPDATE = 15;
public static final int BACKGROUND_TASK_DEPRECATED_EXPLORE_SITES_REFRESH = 16;
public static final int BACKGROUND_TASK_EXPLORE_SITES_REFRESH = 17;
public static final int BACKGROUND_TASK_DOWNLOAD_AUTO_RESUMPTION = 18;
public static final int BACKGROUND_TASK_ONE_SHOT_SYNC_WAKE_UP = 19;
public static final int BACKGROUND_TASK_NOTIFICATION_SCHEDULER = 20;
public static final int BACKGROUND_TASK_NOTIFICATION_TRIGGER = 21;
public static final int BACKGROUND_TASK_PERIODIC_SYNC_WAKE_UP = 22;
// Keep this one at the end and increment appropriately when adding new tasks.
public static final int BACKGROUND_TASK_COUNT = 23;
public class BackgroundTaskSchedulerExternalUma {
@VisibleForTesting
BackgroundTaskSchedulerExternalUma() {}
protected BackgroundTaskSchedulerExternalUma() {}
private static class LazyHolder {
static final BackgroundTaskSchedulerExternalUma INSTANCE =
new BackgroundTaskSchedulerExternalUma();
}
/**
* @return the BackgroundTaskSchedulerExternalUma singleton
*/
public static BackgroundTaskSchedulerExternalUma getInstance() {
return LazyHolder.INSTANCE;
}
/**
* Reports metrics for when a NativeBackgroundTask loads the native library.
......@@ -46,7 +32,10 @@ public abstract class BackgroundTaskSchedulerExternalUma {
* @param serviceManagerOnlyMode Whether the task will start native in Service Manager Only Mode
* (Reduced Mode) instead of Full Browser Mode.
*/
public abstract void reportTaskStartedNative(int taskId, boolean serviceManagerOnlyMode);
public void reportTaskStartedNative(int taskId, boolean serviceManagerOnlyMode) {
BackgroundTaskSchedulerUma.getInstance().reportTaskStartedNative(
taskId, serviceManagerOnlyMode);
}
/**
* Report metrics for starting a NativeBackgroundTask. This does not consider tasks that are
......@@ -55,7 +44,10 @@ public abstract class BackgroundTaskSchedulerExternalUma {
* @param serviceManagerOnlyMode Whether the task will run in Service Manager Only Mode (Reduced
* Mode) instead of Full Browser Mode.
*/
public abstract void reportNativeTaskStarted(int taskId, boolean serviceManagerOnlyMode);
public void reportNativeTaskStarted(int taskId, boolean serviceManagerOnlyMode) {
BackgroundTaskSchedulerUma.getInstance().reportNativeTaskStarted(
taskId, serviceManagerOnlyMode);
}
/**
* Reports metrics that a NativeBackgroundTask has been finished cleanly (i.e., no unexpected
......@@ -65,7 +57,10 @@ public abstract class BackgroundTaskSchedulerExternalUma {
* @param serviceManagerOnlyMode Whether the task will run in Service Manager Only Mode (Reduced
* Mode) instead of Full Browser Mode.
*/
public abstract void reportNativeTaskFinished(int taskId, boolean serviceManagerOnlyMode);
public void reportNativeTaskFinished(int taskId, boolean serviceManagerOnlyMode) {
BackgroundTaskSchedulerUma.getInstance().reportNativeTaskFinished(
taskId, serviceManagerOnlyMode);
}
/**
* Reports metrics of how Chrome is launched, either in ServiceManager only mode or as full
......@@ -73,7 +68,9 @@ public abstract class BackgroundTaskSchedulerExternalUma {
* See {@link org.chromium.content.browser.ServicificationStartupUma} for more details.
* @param startupMode Chrome's startup mode.
*/
public abstract void reportStartupMode(int startupMode);
public void reportStartupMode(int startupMode) {
BackgroundTaskSchedulerUma.getInstance().reportStartupMode(startupMode);
}
/**
* Returns an affix identifying a given task type in names of memory histograms specific to that
......@@ -91,60 +88,4 @@ public abstract class BackgroundTaskSchedulerExternalUma {
return null;
}
}
@VisibleForTesting
public static int toUmaEnumValueFromTaskId(int taskId) {
switch (taskId) {
case TaskIds.TEST:
return BACKGROUND_TASK_TEST;
case TaskIds.OMAHA_JOB_ID:
return BACKGROUND_TASK_OMAHA;
case TaskIds.GCM_BACKGROUND_TASK_JOB_ID:
return BACKGROUND_TASK_GCM;
case TaskIds.NOTIFICATION_SERVICE_JOB_ID:
return BACKGROUND_TASK_NOTIFICATIONS;
case TaskIds.WEBVIEW_MINIDUMP_UPLOADING_JOB_ID:
return BACKGROUND_TASK_WEBVIEW_MINIDUMP;
case TaskIds.CHROME_MINIDUMP_UPLOADING_JOB_ID:
return BACKGROUND_TASK_CHROME_MINIDUMP;
case TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID:
return BACKGROUND_TASK_OFFLINE_PAGES;
case TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID:
return BACKGROUND_TASK_OFFLINE_PREFETCH;
case TaskIds.DOWNLOAD_SERVICE_JOB_ID:
return BACKGROUND_TASK_DOWNLOAD_SERVICE;
case TaskIds.DOWNLOAD_CLEANUP_JOB_ID:
return BACKGROUND_TASK_DOWNLOAD_CLEANUP;
case TaskIds.DOWNLOAD_AUTO_RESUMPTION_JOB_ID:
return BACKGROUND_TASK_DOWNLOAD_AUTO_RESUMPTION;
case TaskIds.WEBVIEW_VARIATIONS_SEED_FETCH_JOB_ID:
return BACKGROUND_TASK_WEBVIEW_VARIATIONS;
case TaskIds.OFFLINE_PAGES_PREFETCH_NOTIFICATION_JOB_ID:
return BACKGROUND_TASK_OFFLINE_CONTENT_NOTIFICATION;
case TaskIds.WEBAPK_UPDATE_JOB_ID:
return BACKGROUND_TASK_WEBAPK_UPDATE;
case TaskIds.DOWNLOAD_RESUMPTION_JOB_ID:
return BACKGROUND_TASK_DOWNLOAD_RESUMPTION;
case TaskIds.FEED_REFRESH_JOB_ID:
return BACKGROUND_TASK_FEED_REFRESH;
case TaskIds.COMPONENT_UPDATE_JOB_ID:
return BACKGROUND_TASK_COMPONENT_UPDATE;
case TaskIds.DEPRECATED_EXPLORE_SITES_REFRESH_JOB_ID:
return BACKGROUND_TASK_DEPRECATED_EXPLORE_SITES_REFRESH;
case TaskIds.EXPLORE_SITES_REFRESH_JOB_ID:
return BACKGROUND_TASK_EXPLORE_SITES_REFRESH;
case TaskIds.BACKGROUND_SYNC_ONE_SHOT_JOB_ID:
return BACKGROUND_TASK_ONE_SHOT_SYNC_WAKE_UP;
case TaskIds.NOTIFICATION_SCHEDULER_JOB_ID:
return BACKGROUND_TASK_NOTIFICATION_SCHEDULER;
case TaskIds.NOTIFICATION_TRIGGER_JOB_ID:
return BACKGROUND_TASK_NOTIFICATION_TRIGGER;
case TaskIds.PERIODIC_BACKGROUND_SYNC_CHROME_WAKEUP_TASK_JOB_ID:
return BACKGROUND_TASK_PERIODIC_SYNC_WAKE_UP;
default:
assert false;
}
// Returning a value that is not expected to ever be reported.
return BACKGROUND_TASK_TEST;
}
}
// Copyright 2019 The Chromium Authors. All rights reserved.
// 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;
import android.os.Build;
import androidx.annotation.VisibleForTesting;
import org.chromium.components.background_task_scheduler.internal.BackgroundTaskSchedulerFactoryInternal;
import org.chromium.components.background_task_scheduler.internal.BackgroundTaskSchedulerPrefs;
import org.chromium.components.background_task_scheduler.internal.BackgroundTaskSchedulerUma;
import org.chromium.base.ThreadUtils;
/**
* A factory for {@link BackgroundTaskScheduler}.
* A factory for {@link BackgroundTaskScheduler} that ensures there is only ever a single instance.
*/
public final class BackgroundTaskSchedulerFactory {
private static BackgroundTaskSchedulerExternalUma sUmaReporter;
private static BackgroundTaskScheduler sBackgroundTaskScheduler;
private static BackgroundTaskFactory sBackgroundTaskFactory;
static BackgroundTaskSchedulerDelegate getSchedulerDelegateForSdk(int sdkInt) {
if (sdkInt >= Build.VERSION_CODES.M) {
return new BackgroundTaskSchedulerJobService();
} else {
return new BackgroundTaskSchedulerGcmNetworkManager();
}
}
/**
* @return the current instance of the {@link BackgroundTaskScheduler}. Creates one if none
* exist.
*/
public static BackgroundTaskScheduler getScheduler() {
return BackgroundTaskSchedulerFactoryInternal.getScheduler();
ThreadUtils.assertOnUiThread();
if (sBackgroundTaskScheduler == null) {
sBackgroundTaskScheduler = new BackgroundTaskSchedulerImpl(
getSchedulerDelegateForSdk(Build.VERSION.SDK_INT),
new BackgroundTaskSchedulerAlarmManager());
}
return sBackgroundTaskScheduler;
}
@VisibleForTesting
public static void setSchedulerForTesting(BackgroundTaskScheduler backgroundTaskScheduler) {
BackgroundTaskSchedulerFactoryInternal.setSchedulerForTesting(backgroundTaskScheduler);
}
/**
* @param backgroundTaskFactory specific implementation of {@link BackgroundTaskFactory} of
* the caller.
*/
public static void setBackgroundTaskFactory(BackgroundTaskFactory backgroundTaskFactory) {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(backgroundTaskFactory);
sBackgroundTaskScheduler = backgroundTaskScheduler;
}
/**
* @return The helper class to report UMA.
* @param taskId id of the scheduled task.
* @return instance of the {@link BackgroundTask} that implements the functionality for the
* task id.
*/
public static BackgroundTaskSchedulerExternalUma getUmaReporter() {
if (sUmaReporter == null) {
sUmaReporter = new BackgroundTaskSchedulerUma();
}
return sUmaReporter;
public static BackgroundTask getBackgroundTaskFromTaskId(int taskId) {
assert sBackgroundTaskFactory != null;
return sBackgroundTaskFactory.getBackgroundTaskFromTaskId(taskId);
}
/**
* Pre-load shared prefs to avoid being blocked on the disk reads in the future.
* @param backgroundTaskFactory specific implementation of {@link BackgroundTaskFactory} of
* the caller.
*/
public static void warmUpSharedPrefs() {
BackgroundTaskSchedulerPrefs.warmUpSharedPrefs();
public static void setBackgroundTaskFactory(BackgroundTaskFactory backgroundTaskFactory) {
sBackgroundTaskFactory = backgroundTaskFactory;
}
// Do not instantiate.
private BackgroundTaskSchedulerFactory() {}
}
\ No newline at end of file
}
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.content.Context;
import android.os.Bundle;
......@@ -20,8 +20,6 @@ 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 java.util.concurrent.TimeUnit;
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.content.Context;
import android.os.Build;
......@@ -12,9 +12,6 @@ import org.chromium.base.CommandLine;
import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.TraceEvent;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.BackgroundTaskScheduler;
import org.chromium.components.background_task_scheduler.TaskInfo;
import java.util.Map;
import java.util.Set;
......@@ -175,7 +172,7 @@ class BackgroundTaskSchedulerImpl implements BackgroundTaskScheduler {
// Explicitly create and invoke old delegate type to cancel all scheduled tasks.
// All preference entries are kept until reschedule call, which removes then then.
BackgroundTaskSchedulerDelegate oldDelegate =
BackgroundTaskSchedulerFactoryInternal.getSchedulerDelegateForSdk(oldSdkInt);
BackgroundTaskSchedulerFactory.getSchedulerDelegateForSdk(oldSdkInt);
Set<Integer> scheduledTaskIds = BackgroundTaskSchedulerPrefs.getScheduledTaskIds();
for (int taskId : scheduledTaskIds) {
oldDelegate.cancel(context, taskId);
......@@ -195,8 +192,7 @@ class BackgroundTaskSchedulerImpl implements BackgroundTaskScheduler {
for (Map.Entry<Integer, ScheduledTaskProto.ScheduledTask> entry :
scheduledTasks.entrySet()) {
final BackgroundTask backgroundTask =
BackgroundTaskSchedulerFactoryInternal.getBackgroundTaskFromTaskId(
entry.getKey());
BackgroundTaskSchedulerFactory.getBackgroundTaskFromTaskId(entry.getKey());
if (backgroundTask == null) {
Log.w(TAG,
"Cannot reschedule task for task id " + entry.getKey() + ". Could not "
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.annotation.TargetApi;
import android.app.job.JobInfo;
......@@ -18,8 +18,6 @@ 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.List;
......@@ -206,8 +204,7 @@ class BackgroundTaskSchedulerJobService implements BackgroundTaskSchedulerDelega
BundleToPersistableBundleConverter.Result convertedData =
BundleToPersistableBundleConverter.convert(taskExtras);
if (convertedData.hasErrors()) {
Log.w(TAG,
"Failed converting extras to PersistableBundle: "
Log.w(TAG, "Failed converting extras to PersistableBundle: "
+ convertedData.getFailedKeysErrorString());
}
return convertedData.getPersistableBundle();
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.content.Context;
import android.content.SharedPreferences;
......@@ -17,7 +17,6 @@ import com.google.protobuf.InvalidProtocolBufferException;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.base.TraceEvent;
import org.chromium.components.background_task_scheduler.TaskInfo;
import java.util.HashMap;
import java.util.HashSet;
......@@ -309,4 +308,4 @@ public class BackgroundTaskSchedulerPrefs {
return ScheduledTaskProto.ScheduledTask.RequiredNetworkType.NONE;
}
}
}
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.content.SharedPreferences;
......@@ -12,15 +12,38 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerExternalUma;
import java.util.HashSet;
import java.util.Set;
/**
* Helper class to report UMA.
*/
public class BackgroundTaskSchedulerUma extends BackgroundTaskSchedulerExternalUma {
class BackgroundTaskSchedulerUma {
// BackgroundTaskId defined in tools/metrics/histograms/enums.xml
static final int BACKGROUND_TASK_TEST = 0;
static final int BACKGROUND_TASK_OMAHA = 1;
static final int BACKGROUND_TASK_GCM = 2;
static final int BACKGROUND_TASK_NOTIFICATIONS = 3;
static final int BACKGROUND_TASK_WEBVIEW_MINIDUMP = 4;
static final int BACKGROUND_TASK_CHROME_MINIDUMP = 5;
static final int BACKGROUND_TASK_OFFLINE_PAGES = 6;
static final int BACKGROUND_TASK_OFFLINE_PREFETCH = 7;
static final int BACKGROUND_TASK_DOWNLOAD_SERVICE = 8;
static final int BACKGROUND_TASK_DOWNLOAD_CLEANUP = 9;
static final int BACKGROUND_TASK_WEBVIEW_VARIATIONS = 10;
static final int BACKGROUND_TASK_OFFLINE_CONTENT_NOTIFICATION = 11;
static final int BACKGROUND_TASK_WEBAPK_UPDATE = 12;
static final int BACKGROUND_TASK_DOWNLOAD_RESUMPTION = 13;
static final int BACKGROUND_TASK_FEED_REFRESH = 14;
static final int BACKGROUND_TASK_COMPONENT_UPDATE = 15;
static final int BACKGROUND_TASK_DEPRECATED_EXPLORE_SITES_REFRESH = 16;
static final int BACKGROUND_TASK_EXPLORE_SITES_REFRESH = 17;
static final int BACKGROUND_TASK_DOWNLOAD_AUTO_RESUMPTION = 18;
static final int BACKGROUND_TASK_ONE_SHOT_SYNC_WAKE_UP = 19;
static final int BACKGROUND_TASK_NOTIFICATION_SCHEDULER = 20;
static final int BACKGROUND_TASK_NOTIFICATION_TRIGGER = 21;
static final int BACKGROUND_TASK_PERIODIC_SYNC_WAKE_UP = 22;
// Keep this one at the end and increment appropriately when adding new tasks.
static final int BACKGROUND_TASK_COUNT = 23;
static final String KEY_CACHED_UMA = "bts_cached_uma";
private static BackgroundTaskSchedulerUma sInstance;
......@@ -161,7 +184,12 @@ public class BackgroundTaskSchedulerUma extends BackgroundTaskSchedulerExternalU
toUmaEnumValueFromTaskId(taskId));
}
@Override
/**
* Reports metrics for when a NativeBackgroundTask loads the native library.
* @param taskId An id from {@link TaskIds}.
* @param serviceManagerOnlyMode Whether the task will start native in Service Manager Only Mode
* (Reduced Mode) instead of Full Browser Mode.
*/
public void reportTaskStartedNative(int taskId, boolean serviceManagerOnlyMode) {
int umaEnumValue = toUmaEnumValueFromTaskId(taskId);
cacheEvent("Android.BackgroundTaskScheduler.TaskLoadedNative", umaEnumValue);
......@@ -174,7 +202,13 @@ public class BackgroundTaskSchedulerUma extends BackgroundTaskSchedulerExternalU
}
}
@Override
/**
* Report metrics for starting a NativeBackgroundTask. This does not consider tasks that are
* short-circuited before any work is done.
* @param taskId An id from {@link TaskIds}.
* @param serviceManagerOnlyMode Whether the task will run in Service Manager Only Mode (Reduced
* Mode) instead of Full Browser Mode.
*/
public void reportNativeTaskStarted(int taskId, boolean serviceManagerOnlyMode) {
int umaEnumValue = toUmaEnumValueFromTaskId(taskId);
cacheEvent("Android.NativeBackgroundTask.TaskStarted", umaEnumValue);
......@@ -185,7 +219,14 @@ public class BackgroundTaskSchedulerUma extends BackgroundTaskSchedulerExternalU
}
}
@Override
/**
* Reports metrics that a NativeBackgroundTask has been finished cleanly (i.e., no unexpected
* exits because of chrome crash or OOM). This includes tasks that have been stopped due to
* timeout.
* @param taskId An id from {@link TaskIds}.
* @param serviceManagerOnlyMode Whether the task will run in Service Manager Only Mode (Reduced
* Mode) instead of Full Browser Mode.
*/
public void reportNativeTaskFinished(int taskId, boolean serviceManagerOnlyMode) {
int umaEnumValue = toUmaEnumValueFromTaskId(taskId);
cacheEvent("Android.NativeBackgroundTask.TaskFinished", umaEnumValue);
......@@ -196,7 +237,12 @@ public class BackgroundTaskSchedulerUma extends BackgroundTaskSchedulerExternalU
}
}
@Override
/**
* Reports metrics of how Chrome is launched, either in ServiceManager only mode or as full
* browser, as well as either cold start or warm start.
* See {@link org.chromium.content.browser.ServicificationStartupUma} for more details.
* @param startupMode Chrome's startup mode.
*/
public void reportStartupMode(int startupMode) {
// We don't record full browser's warm startup since most of the full browser warm startup
// don't even reach here.
......@@ -269,6 +315,62 @@ public class BackgroundTaskSchedulerUma extends BackgroundTaskSchedulerExternalU
updateCachedUma(prefs, setToWriteBack);
}
@VisibleForTesting
static int toUmaEnumValueFromTaskId(int taskId) {
switch (taskId) {
case TaskIds.TEST:
return BACKGROUND_TASK_TEST;
case TaskIds.OMAHA_JOB_ID:
return BACKGROUND_TASK_OMAHA;
case TaskIds.GCM_BACKGROUND_TASK_JOB_ID:
return BACKGROUND_TASK_GCM;
case TaskIds.NOTIFICATION_SERVICE_JOB_ID:
return BACKGROUND_TASK_NOTIFICATIONS;
case TaskIds.WEBVIEW_MINIDUMP_UPLOADING_JOB_ID:
return BACKGROUND_TASK_WEBVIEW_MINIDUMP;
case TaskIds.CHROME_MINIDUMP_UPLOADING_JOB_ID:
return BACKGROUND_TASK_CHROME_MINIDUMP;
case TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID:
return BACKGROUND_TASK_OFFLINE_PAGES;
case TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID:
return BACKGROUND_TASK_OFFLINE_PREFETCH;
case TaskIds.DOWNLOAD_SERVICE_JOB_ID:
return BACKGROUND_TASK_DOWNLOAD_SERVICE;
case TaskIds.DOWNLOAD_CLEANUP_JOB_ID:
return BACKGROUND_TASK_DOWNLOAD_CLEANUP;
case TaskIds.DOWNLOAD_AUTO_RESUMPTION_JOB_ID:
return BACKGROUND_TASK_DOWNLOAD_AUTO_RESUMPTION;
case TaskIds.WEBVIEW_VARIATIONS_SEED_FETCH_JOB_ID:
return BACKGROUND_TASK_WEBVIEW_VARIATIONS;
case TaskIds.OFFLINE_PAGES_PREFETCH_NOTIFICATION_JOB_ID:
return BACKGROUND_TASK_OFFLINE_CONTENT_NOTIFICATION;
case TaskIds.WEBAPK_UPDATE_JOB_ID:
return BACKGROUND_TASK_WEBAPK_UPDATE;
case TaskIds.DOWNLOAD_RESUMPTION_JOB_ID:
return BACKGROUND_TASK_DOWNLOAD_RESUMPTION;
case TaskIds.FEED_REFRESH_JOB_ID:
return BACKGROUND_TASK_FEED_REFRESH;
case TaskIds.COMPONENT_UPDATE_JOB_ID:
return BACKGROUND_TASK_COMPONENT_UPDATE;
case TaskIds.DEPRECATED_EXPLORE_SITES_REFRESH_JOB_ID:
return BACKGROUND_TASK_DEPRECATED_EXPLORE_SITES_REFRESH;
case TaskIds.EXPLORE_SITES_REFRESH_JOB_ID:
return BACKGROUND_TASK_EXPLORE_SITES_REFRESH;
case TaskIds.BACKGROUND_SYNC_ONE_SHOT_JOB_ID:
return BACKGROUND_TASK_ONE_SHOT_SYNC_WAKE_UP;
case TaskIds.NOTIFICATION_SCHEDULER_JOB_ID:
return BACKGROUND_TASK_NOTIFICATION_SCHEDULER;
case TaskIds.NOTIFICATION_TRIGGER_JOB_ID:
return BACKGROUND_TASK_NOTIFICATION_TRIGGER;
case TaskIds.PERIODIC_BACKGROUND_SYNC_CHROME_WAKEUP_TASK_JOB_ID:
return BACKGROUND_TASK_PERIODIC_SYNC_WAKE_UP;
default:
assert false;
}
// Returning a value that is not expected to ever be reported.
return BACKGROUND_TASK_TEST;
}
@VisibleForTesting
static Set<String> getCachedUmaEntries(SharedPreferences prefs) {
return prefs.getStringSet(KEY_CACHED_UMA, new HashSet<String>(1));
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.annotation.TargetApi;
import android.os.Build;
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.os.Bundle;
......
......@@ -10,8 +10,8 @@ package org.chromium.components.background_task_scheduler;
*/
public final class TaskIds {
// When adding your job id to the list below, remember to make a corresponding update to the
// BackgroundTaskSchedulerExternalUma#toUmaEnumValueFromTaskId(int) method. Also, if the new
// task id is related to a BackgroundTask class in //chrome, remember to update
// BackgroundTaskSchedulerUma#toUmaEnumValueFromTaskId(int) method. Also, if the new task id
// is related to a BackgroundTask class in //chrome, remember to update
// ChromeBackgroundTaskFactory#getBackgroundTaskFromTaskId(int).
// Id from 111000000 to 111999999 are reserved for internal usage.
public static final int TEST = 0x00008378;
......
......@@ -113,7 +113,7 @@ public class TaskInfo {
* @param currentTimeMs the current time to check for expiration.
* @return true if the task expired and false otherwise.
*/
public static boolean getExpirationStatus(
static boolean getExpirationStatus(
long scheduleTimeMs, long endTimeMs, long currentTimeMs) {
return currentTimeMs >= scheduleTimeMs + endTimeMs;
}
......@@ -238,7 +238,7 @@ public class TaskInfo {
* @param currentTimeMs the current time to check for expiration.
* @return true if the task expired and false otherwise.
*/
public static boolean getExpirationStatus(
static boolean getExpirationStatus(
long scheduleTimeMs, long intervalTimeMs, long flexTimeMs, long currentTimeMs) {
// Whether the task is executed during the wanted time window is determined here. The
// position of the current time in relation to the time window is calculated here.
......
......@@ -8,7 +8,7 @@ option optimize_for = LITE_RUNTIME;
package background_task_scheduler;
option java_package = "org.chromium.components.background_task_scheduler.internal";
option java_package = "org.chromium.components.background_task_scheduler";
option java_outer_classname = "ScheduledTaskProto";
message ScheduledTask {
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.support.test.filters.SmallTest;
......@@ -12,9 +12,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.components.background_task_scheduler.BackgroundTaskScheduler;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import java.util.concurrent.TimeUnit;
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.annotation.TargetApi;
import android.app.job.JobInfo;
......@@ -19,8 +19,6 @@ import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import java.util.concurrent.TimeUnit;
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.annotation.TargetApi;
import android.os.Build;
......
......@@ -2,12 +2,10 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.content.Context;
import org.chromium.components.background_task_scheduler.TaskInfo;
/**
* Mock of BackgroundTaskSchedulerDelegate that tracks which methods are called.
* This is used for all delegates that cannot be included in end-to-end testing.
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
......@@ -29,11 +29,6 @@ import org.robolectric.util.ReflectionHelpers;
import org.chromium.base.ContextUtils;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.BackgroundTaskFactory;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import org.chromium.components.background_task_scheduler.TaskParameters;
import java.util.concurrent.TimeUnit;
......@@ -58,7 +53,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
BackgroundTaskSchedulerFactoryInternal.setSchedulerForTesting(
BackgroundTaskSchedulerFactory.setSchedulerForTesting(
new BackgroundTaskSchedulerImpl(mDelegate, mAlarmManagerDelegate));
BackgroundTaskSchedulerUma.setInstanceForTesting(mBackgroundTaskSchedulerUma);
sReturnThroughCallback = false;
......@@ -86,7 +81,7 @@ public class BackgroundTaskGcmTaskServiceTest {
}
}
private static class TestBackgroundTaskWithParamsFactory implements BackgroundTaskFactory {
public class TestBackgroundTaskWithParamsFactory implements BackgroundTaskFactory {
@Override
public BackgroundTask getBackgroundTaskFromTaskId(int taskId) {
return new TestBackgroundTaskWithParams();
......@@ -96,7 +91,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testStartsAnytimeWithoutDeadline() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(
new TestBackgroundTaskWithParamsFactory());
Bundle taskExtras = new Bundle();
......@@ -118,7 +113,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testOneOffTaskDoesNotStartExactlyAtDeadline() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(
new TestBackgroundTaskWithParamsFactory());
TaskParams taskParams = buildOneOffTaskParams(TaskIds.TEST, new Bundle(), new Long(0));
......@@ -135,7 +130,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testOneOffTaskDoesNotStartAfterDeadline() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(
new TestBackgroundTaskWithParamsFactory());
TaskParams taskParams =
......@@ -153,7 +148,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testOneOffTaskStartsBeforeDeadline() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(
new TestBackgroundTaskWithParamsFactory());
TaskParams taskParams =
......@@ -174,7 +169,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testOneOffTaskOnRuntaskNeedsReschedulingFromCallback() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(
new TestBackgroundTaskWithParamsFactory());
sReturnThroughCallback = true;
sNeedsRescheduling = true;
......@@ -187,7 +182,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testOneOffTaskOnRuntaskDontRescheduleFromCallback() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(
new TestBackgroundTaskWithParamsFactory());
sReturnThroughCallback = true;
......@@ -201,8 +196,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testOneOffTaskOnInitializeTasksOnPreM() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
ReflectionHelpers.setStaticField(
Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.LOLLIPOP);
......@@ -219,8 +213,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testOneOffTaskOnInitializeTasksOnMPlus() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
ReflectionHelpers.setStaticField(Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.M);
TaskInfo.TimingInfo timingInfo =
......@@ -236,10 +229,9 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testCancelTaskIfTaskIdNotFound() {
BackgroundTaskSchedulerFactoryInternal.setSchedulerForTesting(mBackgroundTaskSchedulerImpl);
BackgroundTaskSchedulerFactory.setSchedulerForTesting(mBackgroundTaskSchedulerImpl);
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
TaskParams taskParams = buildOneOffTaskParams(
TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID, new Bundle(), sClock.currentTimeMillis());
......@@ -257,8 +249,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testPeriodicTaskStartsAnytimeWithoutDeadline() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
TaskParams taskParams =
buildPeriodicTaskParams(TaskIds.TEST, new Bundle(), null, null, null);
......@@ -272,8 +263,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testPeriodicTaskStartsWithinDeadlineTimeFrame() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
TaskParams taskParams = buildPeriodicTaskParams(TaskIds.TEST, new Bundle(),
sClock.currentTimeMillis() - TimeUnit.MINUTES.toMillis(14),
......@@ -290,8 +280,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testPeriodicTaskDoesNotStartExactlyAtDeadline() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
TaskParams taskParams = buildPeriodicTaskParams(TaskIds.TEST, new Bundle(),
sClock.currentTimeMillis(), TimeUnit.MINUTES.toMillis(15), null);
......@@ -306,7 +295,7 @@ public class BackgroundTaskGcmTaskServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testPeriodicTaskDoesNotStartAfterDeadline() {
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(
new TestBackgroundTaskWithParamsFactory());
TaskParams taskParams = buildPeriodicTaskParams(TaskIds.TEST, new Bundle(),
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
......@@ -23,7 +23,6 @@ import org.robolectric.annotation.Config;
import org.chromium.base.ContextUtils;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.components.background_task_scheduler.TaskIds;
import java.util.concurrent.TimeUnit;
......@@ -45,12 +44,11 @@ public class BackgroundTaskJobServiceTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
BackgroundTaskSchedulerFactoryInternal.setSchedulerForTesting(
BackgroundTaskSchedulerFactory.setSchedulerForTesting(
new BackgroundTaskSchedulerImpl(mDelegate, mAlarmManagerDelegate));
BackgroundTaskSchedulerUma.setInstanceForTesting(mBackgroundTaskSchedulerUma);
TestBackgroundTask.reset();
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
}
@Test
......@@ -110,7 +108,7 @@ public class BackgroundTaskJobServiceTest {
@Test
@Feature({"BackgroundTaskScheduler"})
public void testCancelOneOffTaskIfTaskIdNotFound() {
BackgroundTaskSchedulerFactoryInternal.setSchedulerForTesting(mBackgroundTaskSchedulerImpl);
BackgroundTaskSchedulerFactory.setSchedulerForTesting(mBackgroundTaskSchedulerImpl);
JobParameters jobParameters =
buildOneOffJobParameters(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID, null, null);
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
......@@ -16,8 +16,6 @@ import org.robolectric.annotation.Config;
import org.chromium.base.ContextUtils;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import java.util.concurrent.TimeUnit;
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
......@@ -31,10 +31,6 @@ import org.robolectric.shadows.gms.common.ShadowGoogleApiAvailability;
import org.chromium.base.ContextUtils;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import org.chromium.components.background_task_scheduler.TaskParameters;
import java.util.concurrent.TimeUnit;
......@@ -64,8 +60,7 @@ public class BackgroundTaskSchedulerGcmNetworkManagerTest {
mGcmNetworkManager = (ShadowGcmNetworkManager) Shadow.extract(
GcmNetworkManager.getInstance(ContextUtils.getApplicationContext()));
BackgroundTaskSchedulerGcmNetworkManager.setClockForTesting(mClock);
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
}
@Test
......@@ -264,9 +259,8 @@ public class BackgroundTaskSchedulerGcmNetworkManagerTest {
@Feature({"BackgroundTaskScheduler"})
public void testGetBackgroundTaskFromTaskParams() {
TaskParams params = new TaskParams(Integer.toString(TaskIds.TEST), new Bundle());
BackgroundTask backgroundTask =
BackgroundTaskSchedulerFactoryInternal.getBackgroundTaskFromTaskId(
Integer.valueOf(params.getTag()));
BackgroundTask backgroundTask = BackgroundTaskSchedulerFactory.getBackgroundTaskFromTaskId(
Integer.valueOf(params.getTag()));
assertNotNull(backgroundTask);
assertTrue(backgroundTask instanceof TestBackgroundTask);
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
......@@ -34,9 +34,6 @@ import org.robolectric.util.ReflectionHelpers;
import org.chromium.base.ContextUtils;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.components.background_task_scheduler.BackgroundTaskScheduler;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import java.util.concurrent.TimeUnit;
......@@ -60,7 +57,7 @@ public class BackgroundTaskSchedulerImplTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
BackgroundTaskSchedulerFactoryInternal.setSchedulerForTesting(
BackgroundTaskSchedulerFactory.setSchedulerForTesting(
new BackgroundTaskSchedulerImpl(mDelegate, mAlarmManagerDelegate));
BackgroundTaskSchedulerUma.setInstanceForTesting(mBackgroundTaskSchedulerUma);
TestBackgroundTask.reset();
......@@ -84,15 +81,14 @@ public class BackgroundTaskSchedulerImplTest {
TaskInfo.ExactInfo.create().setTriggerAtMs(1415926535000L).build();
mExactTask = TaskInfo.createTask(TaskIds.TEST, exactTimingInfo).build();
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testScheduleTaskSuccessful() {
doReturn(true).when(mDelegate).schedule(eq(RuntimeEnvironment.application), eq(mTask));
BackgroundTaskSchedulerFactoryInternal.getScheduler().schedule(
BackgroundTaskSchedulerFactory.getScheduler().schedule(
RuntimeEnvironment.application, mTask);
verify(mDelegate, times(1)).schedule(eq(RuntimeEnvironment.application), eq(mTask));
verify(mAlarmManagerDelegate, times(0))
......@@ -108,7 +104,7 @@ public class BackgroundTaskSchedulerImplTest {
public void testScheduleTaskWithExpirationSuccessful() {
doReturn(true).when(mDelegate).schedule(
eq(RuntimeEnvironment.application), eq(mExpirationTask));
BackgroundTaskSchedulerFactoryInternal.getScheduler().schedule(
BackgroundTaskSchedulerFactory.getScheduler().schedule(
RuntimeEnvironment.application, mExpirationTask);
verify(mBackgroundTaskSchedulerUma, times(1))
.reportTaskCreatedAndExpirationState(eq(TaskIds.TEST), eq(true));
......@@ -120,7 +116,7 @@ public class BackgroundTaskSchedulerImplTest {
doReturn(true)
.when(mAlarmManagerDelegate)
.schedule(eq(RuntimeEnvironment.application), eq(mExactTask));
BackgroundTaskSchedulerFactoryInternal.getScheduler().schedule(
BackgroundTaskSchedulerFactory.getScheduler().schedule(
RuntimeEnvironment.application, mExactTask);
verify(mAlarmManagerDelegate, times(1))
.schedule(eq(RuntimeEnvironment.application), eq(mExactTask));
......@@ -133,7 +129,7 @@ public class BackgroundTaskSchedulerImplTest {
@Feature({"BackgroundTaskScheduler"})
public void testScheduleTaskFailed() {
doReturn(false).when(mDelegate).schedule(eq(RuntimeEnvironment.application), eq(mTask));
BackgroundTaskSchedulerFactoryInternal.getScheduler().schedule(
BackgroundTaskSchedulerFactory.getScheduler().schedule(
RuntimeEnvironment.application, mTask);
verify(mDelegate, times(1)).schedule(eq(RuntimeEnvironment.application), eq(mTask));
}
......@@ -144,7 +140,7 @@ public class BackgroundTaskSchedulerImplTest {
BackgroundTaskSchedulerPrefs.addScheduledTask(mTask);
doNothing().when(mDelegate).cancel(eq(RuntimeEnvironment.application), eq(TaskIds.TEST));
BackgroundTaskSchedulerFactoryInternal.getScheduler().cancel(
BackgroundTaskSchedulerFactory.getScheduler().cancel(
RuntimeEnvironment.application, TaskIds.TEST);
verify(mDelegate, times(1)).cancel(eq(RuntimeEnvironment.application), eq(TaskIds.TEST));
verify(mAlarmManagerDelegate, times(0))
......@@ -159,7 +155,7 @@ public class BackgroundTaskSchedulerImplTest {
doNothing()
.when(mAlarmManagerDelegate)
.cancel(eq(RuntimeEnvironment.application), eq(TaskIds.TEST));
BackgroundTaskSchedulerFactoryInternal.getScheduler().cancel(
BackgroundTaskSchedulerFactory.getScheduler().cancel(
RuntimeEnvironment.application, TaskIds.TEST);
verify(mDelegate, times(0)).cancel(eq(RuntimeEnvironment.application), eq(TaskIds.TEST));
verify(mAlarmManagerDelegate, times(1))
......@@ -173,8 +169,7 @@ public class BackgroundTaskSchedulerImplTest {
assertEquals(0, TestBackgroundTask.getRescheduleCalls());
assertFalse(BackgroundTaskSchedulerPrefs.getScheduledTaskIds().isEmpty());
BackgroundTaskSchedulerFactoryInternal.getScheduler().reschedule(
RuntimeEnvironment.application);
BackgroundTaskSchedulerFactory.getScheduler().reschedule(RuntimeEnvironment.application);
assertEquals(1, TestBackgroundTask.getRescheduleCalls());
assertTrue(BackgroundTaskSchedulerPrefs.getScheduledTaskIds().isEmpty());
......@@ -191,7 +186,7 @@ public class BackgroundTaskSchedulerImplTest {
BackgroundTaskSchedulerPrefs.addScheduledTask(mTask);
ReflectionHelpers.setStaticField(Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.M);
BackgroundTaskSchedulerFactoryInternal.getScheduler().checkForOSUpgrade(
BackgroundTaskSchedulerFactory.getScheduler().checkForOSUpgrade(
RuntimeEnvironment.application);
assertEquals(Build.VERSION_CODES.M, BackgroundTaskSchedulerPrefs.getLastSdkVersion());
......@@ -209,7 +204,7 @@ public class BackgroundTaskSchedulerImplTest {
ReflectionHelpers.setStaticField(
Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.LOLLIPOP);
BackgroundTaskSchedulerFactoryInternal.getScheduler().checkForOSUpgrade(
BackgroundTaskSchedulerFactory.getScheduler().checkForOSUpgrade(
RuntimeEnvironment.application);
assertEquals(
......@@ -225,7 +220,7 @@ public class BackgroundTaskSchedulerImplTest {
BackgroundTaskSchedulerPrefs.addScheduledTask(mTask);
ReflectionHelpers.setStaticField(Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.N);
BackgroundTaskSchedulerFactoryInternal.getScheduler().checkForOSUpgrade(
BackgroundTaskSchedulerFactory.getScheduler().checkForOSUpgrade(
RuntimeEnvironment.application);
assertEquals(Build.VERSION_CODES.N, BackgroundTaskSchedulerPrefs.getLastSdkVersion());
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
......@@ -19,7 +19,6 @@ import android.os.Build;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.robolectric.annotation.Config;
......@@ -28,10 +27,6 @@ import org.robolectric.util.ReflectionHelpers;
import org.chromium.base.ContextUtils;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.BackgroundTaskFactory;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import java.util.HashSet;
import java.util.Map;
......@@ -68,7 +63,7 @@ public class BackgroundTaskSchedulerPrefsTest {
TaskInfo.OneOffInfo.create().setWindowEndTimeMs(TimeUnit.DAYS.toMillis(1)).build();
mTask2 = TaskInfo.createTask(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID, timingInfo2).build();
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(
new AllValidTestBackgroundTaskFactory());
}
......@@ -114,8 +109,7 @@ public class BackgroundTaskSchedulerPrefsTest {
assertTrue(taskIds.contains(mTask2.getTaskId()));
assertTrue(taskIds.contains(task3.getTaskId()));
assertEquals("mTask1 class name in scheduled tasks.", TestBackgroundTask.class,
BackgroundTaskSchedulerFactoryInternal
.getBackgroundTaskFromTaskId(mTask1.getTaskId())
BackgroundTaskSchedulerFactory.getBackgroundTaskFromTaskId(mTask1.getTaskId())
.getClass());
}
......@@ -136,8 +130,7 @@ public class BackgroundTaskSchedulerPrefsTest {
assertFalse(taskIds.contains(mTask1.getTaskId()));
assertTrue(taskIds.contains(mTask2.getTaskId()));
assertEquals("mTask1 class name in scheduled tasks.", TestBackgroundTask.class,
BackgroundTaskSchedulerFactoryInternal
.getBackgroundTaskFromTaskId(mTask1.getTaskId())
BackgroundTaskSchedulerFactory.getBackgroundTaskFromTaskId(mTask1.getTaskId())
.getClass());
ScheduledTaskProto.ScheduledTask scheduledTask1 =
......@@ -215,27 +208,24 @@ public class BackgroundTaskSchedulerPrefsTest {
BackgroundTaskSchedulerPrefs.migrateStoredTasksToProto();
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.MigrationToProto"),
ArgumentMatchers.eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_TEST));
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_TEST));
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.MigrationToProto"),
ArgumentMatchers.eq(
BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_PAGES));
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_PAGES));
Set<Integer> taskIds = BackgroundTaskSchedulerPrefs.getScheduledTaskIds();
assertTrue(taskIds.contains(mTask1.getTaskId()));
assertTrue(taskIds.contains(mTask2.getTaskId()));
assertEquals("mTask1 class name in scheduled tasks.", TestBackgroundTask.class,
BackgroundTaskSchedulerFactoryInternal
.getBackgroundTaskFromTaskId(mTask1.getTaskId())
BackgroundTaskSchedulerFactory.getBackgroundTaskFromTaskId(mTask1.getTaskId())
.getClass());
BackgroundTaskSchedulerPrefs.migrateStoredTasksToProto();
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.MigrationToProto"),
ArgumentMatchers.eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_TEST));
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_TEST));
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.MigrationToProto"),
ArgumentMatchers.eq(
BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_PAGES));
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_PAGES));
}
}
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.robolectric.Shadows.shadowOf;
......@@ -26,11 +26,6 @@ import org.chromium.base.ThreadUtils;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.BackgroundTaskFactory;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import org.chromium.components.background_task_scheduler.TaskParameters;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
......@@ -91,8 +86,7 @@ public final class BroadcastReceiverRobolectricTest {
mStopped = 0;
mRescheduled = 0;
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
mBatteryManager = (BatteryManager) ContextUtils.getApplicationContext().getSystemService(
Context.BATTERY_SERVICE);
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import com.google.android.gms.gcm.GcmNetworkManager;
import com.google.android.gms.gcm.GcmTaskService;
......
......@@ -2,7 +2,7 @@
// 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;
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
......@@ -15,8 +15,6 @@ import org.robolectric.annotation.Config;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.background_task_scheduler.TaskInfo;
import java.util.concurrent.TimeUnit;
......@@ -31,8 +29,7 @@ public class TaskInfoTest {
@Before
public void setUp() {
TestBackgroundTask.reset();
BackgroundTaskSchedulerFactoryInternal.setBackgroundTaskFactory(
new TestBackgroundTaskFactory());
BackgroundTaskSchedulerFactory.setBackgroundTaskFactory(new TestBackgroundTaskFactory());
}
@Test
......@@ -46,7 +43,7 @@ public class TaskInfoTest {
assertEquals(TaskIds.TEST, oneOffTask.getTaskId());
assertEquals(TestBackgroundTask.class,
BackgroundTaskSchedulerFactoryInternal.getBackgroundTaskFromTaskId(TaskIds.TEST)
BackgroundTaskSchedulerFactory.getBackgroundTaskFromTaskId(TaskIds.TEST)
.getClass());
}
......
......@@ -2,13 +2,10 @@
// 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;
package org.chromium.components.background_task_scheduler;
import android.content.Context;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.TaskParameters;
/** Dummy implementation of a background task used for testing. */
class TestBackgroundTask implements BackgroundTask {
private static int sRescheduleCalls;
......
......@@ -2,11 +2,7 @@
// 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 org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.BackgroundTaskFactory;
import org.chromium.components.background_task_scheduler.TaskIds;
package org.chromium.components.background_task_scheduler;
/**
* Implementation of {@link BackgroundTaskFactory} for testing.
......
# Copyright 2020 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.
if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
}
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",
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerFactoryInternal.java",
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManager.java",
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerImpl.java",
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerJobService.java",
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerPrefs.java",
"android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerUma.java",
"android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java",
"android/java/src/org/chromium/components/background_task_scheduler/internal/ExtrasToProtoConverter.java",
]
deps = [
":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",
"//components/background_task_scheduler:public_java",
"//content/public/android:content_java",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//third_party/android_deps:com_google_protobuf_protobuf_lite_java",
]
}
proto_java_library("proto_java") {
proto_path = "proto"
sources = [ "$proto_path/scheduled_task.proto" ]
}
android_library("background_task_scheduler_javatests") {
testonly = true
sources = [
"android/javatests/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerImplWithMockTest.java",
"android/javatests/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerJobServiceTest.java",
"android/javatests/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverterTest.java",
"android/javatests/src/org/chromium/components/background_task_scheduler/internal/MockBackgroundTaskSchedulerDelegate.java",
]
deps = [
":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",
"//components/background_task_scheduler:background_task_scheduler_task_ids_java",
"//components/background_task_scheduler:public_java",
"//content/public/test/android:content_java_test_support",
"//third_party/android_support_test_runner:runner_java",
"//third_party/junit",
]
}
junit_binary("components_internal_background_task_scheduler_junit_tests") {
sources = [
"android/junit/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskServiceTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskJobServiceTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerAlarmManagerTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManagerTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerImplTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerPrefsTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerUmaTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/BroadcastReceiverRobolectricTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/ExtrasToProtoConverterTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/ShadowGcmNetworkManager.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/TaskInfoTest.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/TestBackgroundTask.java",
"android/junit/src/org/chromium/components/background_task_scheduler/internal/TestBackgroundTaskFactory.java",
]
deps = [
":internal_java",
":proto_java",
"$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",
"//base:base_java",
"//base:base_java_test_support",
"//base:base_junit_test_support",
"//components/background_task_scheduler:public_java",
"//third_party/junit",
]
}
}
// Copyright 2020 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 org.chromium.base.ThreadUtils;
import org.chromium.components.background_task_scheduler.BackgroundTask;
import org.chromium.components.background_task_scheduler.BackgroundTaskFactory;
import org.chromium.components.background_task_scheduler.BackgroundTaskScheduler;
/**
* A factory for {@link BackgroundTaskScheduler} that ensures there is only ever a single instance.
*/
public final class BackgroundTaskSchedulerFactoryInternal {
private static BackgroundTaskScheduler sBackgroundTaskScheduler;
private static BackgroundTaskFactory sBackgroundTaskFactory;
static BackgroundTaskSchedulerDelegate getSchedulerDelegateForSdk(int sdkInt) {
if (sdkInt >= Build.VERSION_CODES.M) {
return new BackgroundTaskSchedulerJobService();
} else {
return new BackgroundTaskSchedulerGcmNetworkManager();
}
}
/**
* @return the current instance of the {@link BackgroundTaskScheduler}. Creates one if none
* exist.
*/
public static BackgroundTaskScheduler getScheduler() {
ThreadUtils.assertOnUiThread();
if (sBackgroundTaskScheduler == null) {
sBackgroundTaskScheduler = new BackgroundTaskSchedulerImpl(
getSchedulerDelegateForSdk(Build.VERSION.SDK_INT),
new BackgroundTaskSchedulerAlarmManager());
}
return sBackgroundTaskScheduler;
}
@VisibleForTesting
public static void setSchedulerForTesting(BackgroundTaskScheduler backgroundTaskScheduler) {
sBackgroundTaskScheduler = backgroundTaskScheduler;
}
/** See {@code BackgroundTaskSchedulerFactory#getBackgroundTaskFromTaskId}. */
public static BackgroundTask getBackgroundTaskFromTaskId(int taskId) {
assert sBackgroundTaskFactory != null;
return sBackgroundTaskFactory.getBackgroundTaskFromTaskId(taskId);
}
/** See {@code BackgroundTaskSchedulerFactory#setBackgroundTaskFactory}. */
public static void setBackgroundTaskFactory(BackgroundTaskFactory backgroundTaskFactory) {
sBackgroundTaskFactory = backgroundTaskFactory;
}
// Do not instantiate.
private BackgroundTaskSchedulerFactoryInternal() {}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment