blob: 83f8c351418ee2f625fafdbe788b8ab9e093888e [file] [log] [blame]
jkarlindb185222015-05-29 12:02:001// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
iclelland8467f462015-10-21 14:03:135#include "chrome/browser/android/background_sync_launcher_android.h"
jkarlindb185222015-05-29 12:02:006
Mugdha Lakhani1f1ea8e2019-02-27 16:01:327#include <utility>
8
9#include "base/android/callback_android.h"
10#include "base/barrier_closure.h"
Mugdha Lakhanieef76422019-03-22 18:04:4911#include "base/bind.h"
Mugdha Lakhanife82692b2019-02-08 13:08:4012#include "base/feature_list.h"
Andrew Grieve4a42c22e2019-06-24 16:14:2913#include "chrome/android/chrome_jni_headers/BackgroundSyncBackgroundTaskScheduler_jni.h"
14#include "chrome/android/chrome_jni_headers/BackgroundSyncBackgroundTask_jni.h"
Mugdha Lakhaniec9c3ae72019-09-20 09:40:3415#include "chrome/android/chrome_jni_headers/GooglePlayServicesChecker_jni.h"
Mugdha Lakhanieab4b182019-06-25 10:52:1616#include "chrome/android/chrome_jni_headers/PeriodicBackgroundSyncChromeWakeUpTask_jni.h"
Henrique Nakashima476b0b52020-01-24 22:28:0317#include "chrome/browser/flags/android/chrome_feature_list.h"
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3218#include "chrome/browser/profiles/profile_manager.h"
19#include "content/public/browser/background_sync_context.h"
Mugdha Lakhanie07dd9e2019-07-18 17:25:2320#include "content/public/browser/background_sync_parameters.h"
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3221#include "content/public/browser/browser_context.h"
jkarlindb185222015-05-29 12:02:0022#include "content/public/browser/browser_thread.h"
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3223#include "content/public/browser/storage_partition.h"
jkarlindb185222015-05-29 12:02:0024
iclelland8467f462015-10-21 14:03:1325using content::BrowserThread;
jkarlindb185222015-05-29 12:02:0026
27namespace {
scottmg5e65e3a2017-03-08 08:48:4628base::LazyInstance<BackgroundSyncLauncherAndroid>::DestructorAtExit
29 g_background_sync_launcher = LAZY_INSTANCE_INITIALIZER;
iclellandd054a6f2016-01-11 20:16:1430
31// Disables the Play Services version check for testing on Chromium build bots.
32// TODO(iclelland): Remove this once the bots have their play services package
33// updated before every test run. (https://crbug.com/514449)
34bool disable_play_services_version_check_for_tests = false;
35
Mugdha Lakhanie07dd9e2019-07-18 17:25:2336// Returns 0 to create a ONE_SHOT_SYNC_CHROME_WAKE_UP task, or 1 to create a
37// PERIODIC_SYNC_CHROME_WAKE_UP task, based on |sync_type|.
38int GetBackgroundTaskType(blink::mojom::BackgroundSyncType sync_type) {
39 return static_cast<int>(sync_type);
40}
41
iclellandd054a6f2016-01-11 20:16:1442} // namespace
jkarlindb185222015-05-29 12:02:0043
44// static
Mugdha Lakhanieab4b182019-06-25 10:52:1645void JNI_BackgroundSyncBackgroundTask_FireOneShotBackgroundSyncEvents(
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3246 JNIEnv* env,
47 const base::android::JavaParamRef<jobject>& j_runnable) {
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3248
Mugdha Lakhanieab4b182019-06-25 10:52:1649 BackgroundSyncLauncherAndroid::Get()->FireBackgroundSyncEvents(
50 blink::mojom::BackgroundSyncType::ONE_SHOT, j_runnable);
51}
52
53void JNI_PeriodicBackgroundSyncChromeWakeUpTask_FirePeriodicBackgroundSyncEvents(
54 JNIEnv* env,
55 const base::android::JavaParamRef<jobject>& j_runnable) {
56 BackgroundSyncLauncherAndroid::Get()->FireBackgroundSyncEvents(
57 blink::mojom::BackgroundSyncType::PERIODIC, j_runnable);
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3258}
59
Mugdha Lakhanib7d218f02019-09-09 14:48:2360void JNI_BackgroundSyncBackgroundTaskScheduler_SetPlayServicesVersionCheckDisabledForTests(
61 JNIEnv* env,
62 jboolean disabled) {
63 BackgroundSyncLauncherAndroid::SetPlayServicesVersionCheckDisabledForTests(
64 disabled);
65}
66
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3267// static
jkarlindb185222015-05-29 12:02:0068BackgroundSyncLauncherAndroid* BackgroundSyncLauncherAndroid::Get() {
69 DCHECK_CURRENTLY_ON(BrowserThread::UI);
70
71 return g_background_sync_launcher.Pointer();
72}
73
74// static
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3275void BackgroundSyncLauncherAndroid::SetPlayServicesVersionCheckDisabledForTests(
76 bool disabled) {
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3277 disable_play_services_version_check_for_tests = disabled;
78}
79
80// static
Mugdha Lakhanieb39fc232019-11-14 14:54:2581void BackgroundSyncLauncherAndroid::ScheduleBrowserWakeUpWithDelay(
82 blink::mojom::BackgroundSyncType sync_type,
83 base::TimeDelta delay) {
84 DCHECK_CURRENTLY_ON(BrowserThread::UI);
85
86 Get()->ScheduleBrowserWakeUpWithDelayImpl(sync_type, delay);
87}
88
89// static
90void BackgroundSyncLauncherAndroid::CancelBrowserWakeup(
91 blink::mojom::BackgroundSyncType sync_type) {
92 DCHECK_CURRENTLY_ON(BrowserThread::UI);
93 Get()->CancelBrowserWakeupImpl(sync_type);
94}
95
96// static
Mugdha Lakhani1f1ea8e2019-02-27 16:01:3297bool BackgroundSyncLauncherAndroid::ShouldDisableBackgroundSync() {
98 DCHECK_CURRENTLY_ON(BrowserThread::UI);
99 if (disable_play_services_version_check_for_tests)
100 return false;
Mugdha Lakhaniec9c3ae72019-09-20 09:40:34101 return Java_GooglePlayServicesChecker_shouldDisableBackgroundSync(
Mugdha Lakhani1f1ea8e2019-02-27 16:01:32102 base::android::AttachCurrentThread());
103}
104
Mugdha Lakhanieb39fc232019-11-14 14:54:25105void BackgroundSyncLauncherAndroid::ScheduleBrowserWakeUpWithDelayImpl(
Mugdha Lakhanie07dd9e2019-07-18 17:25:23106 blink::mojom::BackgroundSyncType sync_type,
Mugdha Lakhanieef76422019-03-22 18:04:49107 base::TimeDelta soonest_wakeup_delta) {
jkarlindb185222015-05-29 12:02:00108 DCHECK_CURRENTLY_ON(BrowserThread::UI);
109
jkarlinfe08f132015-11-06 13:18:41110 JNIEnv* env = base::android::AttachCurrentThread();
Mugdha Lakhanieef76422019-03-22 18:04:49111 int64_t min_delay_ms = soonest_wakeup_delta.InMilliseconds();
Mugdha Lakhanife82692b2019-02-08 13:08:40112
Mugdha Lakhanibc994fa2019-11-14 16:20:29113 Java_BackgroundSyncBackgroundTaskScheduler_scheduleOneOffTask(
Mugdha Lakhanife82692b2019-02-08 13:08:40114 env, java_background_sync_background_task_scheduler_launcher_,
Mugdha Lakhanibc994fa2019-11-14 16:20:29115 GetBackgroundTaskType(sync_type), min_delay_ms);
jkarlindb185222015-05-29 12:02:00116}
117
Mugdha Lakhanieb39fc232019-11-14 14:54:25118void BackgroundSyncLauncherAndroid::CancelBrowserWakeupImpl(
119 blink::mojom::BackgroundSyncType sync_type) {
120 DCHECK_CURRENTLY_ON(BrowserThread::UI);
121
122 JNIEnv* env = base::android::AttachCurrentThread();
123
Mugdha Lakhanibc994fa2019-11-14 16:20:29124 Java_BackgroundSyncBackgroundTaskScheduler_cancelOneOffTask(
Mugdha Lakhanieb39fc232019-11-14 14:54:25125 env, java_background_sync_background_task_scheduler_launcher_,
Mugdha Lakhanibc994fa2019-11-14 16:20:29126 GetBackgroundTaskType(sync_type));
Mugdha Lakhanieb39fc232019-11-14 14:54:25127}
128
Mugdha Lakhani1f1ea8e2019-02-27 16:01:32129void BackgroundSyncLauncherAndroid::FireBackgroundSyncEvents(
Mugdha Lakhanieab4b182019-06-25 10:52:16130 blink::mojom::BackgroundSyncType sync_type,
Mugdha Lakhani1f1ea8e2019-02-27 16:01:32131 const base::android::JavaParamRef<jobject>& j_runnable) {
iclellandd054a6f2016-01-11 20:16:14132 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Mugdha Lakhani1f1ea8e2019-02-27 16:01:32133
134 auto* profile = ProfileManager::GetLastUsedProfile();
135 DCHECK(profile);
136
Mugdha Lakhanieef76422019-03-22 18:04:49137 content::BackgroundSyncContext::FireBackgroundSyncEventsAcrossPartitions(
Mugdha Lakhanieab4b182019-06-25 10:52:16138 profile, sync_type, j_runnable);
iclellandd054a6f2016-01-11 20:16:14139}
140
jkarlindb185222015-05-29 12:02:00141BackgroundSyncLauncherAndroid::BackgroundSyncLauncherAndroid() {
142 DCHECK_CURRENTLY_ON(BrowserThread::UI);
143
144 JNIEnv* env = base::android::AttachCurrentThread();
Mugdha Lakhanife82692b2019-02-08 13:08:40145
Mugdha Lakhanife82692b2019-02-08 13:08:40146 java_background_sync_background_task_scheduler_launcher_.Reset(
147 Java_BackgroundSyncBackgroundTaskScheduler_getInstance(env));
jkarlindb185222015-05-29 12:02:00148}
149
150BackgroundSyncLauncherAndroid::~BackgroundSyncLauncherAndroid() {
151 DCHECK_CURRENTLY_ON(BrowserThread::UI);
jkarlindb185222015-05-29 12:02:00152}