blob: f0224e3829fc9c45eb602c6184b01a76164c6203 [file] [log] [blame]
[email protected]9049a7b2013-03-07 22:22:031// Copyright 2013 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
5#include "chrome/browser/sync/profile_sync_service_android.h"
6
avi664c07b2015-12-26 02:18:317#include <stddef.h>
8#include <stdint.h>
9
dcheng0569a0e2016-04-14 17:37:0510#include <memory>
11
[email protected]9049a7b2013-03-07 22:22:0312#include "base/android/jni_android.h"
maxbogue47c75042015-08-12 18:05:0113#include "base/android/jni_array.h"
[email protected]9049a7b2013-03-07 22:22:0314#include "base/android/jni_string.h"
15#include "base/bind.h"
16#include "base/i18n/time_formatting.h"
17#include "base/json/json_writer.h"
18#include "base/logging.h"
dcheng0569a0e2016-04-14 17:37:0519#include "base/memory/ptr_util.h"
[email protected]e309f312013-06-07 21:50:0820#include "base/strings/utf_string_conversions.h"
[email protected]cc86ccfe2013-06-28 00:10:5021#include "base/time/time.h"
[email protected]9049a7b2013-03-07 22:22:0322#include "chrome/browser/browser_process.h"
23#include "chrome/browser/profiles/profile_manager.h"
[email protected]9049a7b2013-03-07 22:22:0324#include "chrome/browser/signin/signin_manager_factory.h"
[email protected]9049a7b2013-03-07 22:22:0325#include "chrome/browser/sync/profile_sync_service_factory.h"
[email protected]9049a7b2013-03-07 22:22:0326#include "chrome/browser/sync/sync_ui_util.h"
maxbogue93150a5d2015-08-31 21:08:3227#include "chrome/common/channel_info.h"
[email protected]af39f002014-08-22 10:18:1828#include "chrome/grit/generated_resources.h"
maxbogue26f40222016-09-16 20:22:1829#include "components/browser_sync/profile_sync_service.h"
brettwb1fc1b82016-02-02 00:19:0830#include "components/prefs/pref_service.h"
[email protected]7fbd3b12014-04-01 11:19:1631#include "components/signin/core/browser/signin_manager.h"
thestig4a2e88e2016-08-27 23:23:5132#include "components/strings/grit/components_strings.h"
Max Boguefef332d2016-07-28 22:09:0933#include "components/sync/core/network_resources.h"
34#include "components/sync/core/read_transaction.h"
maxbogue455a57e32016-08-14 00:08:3235#include "components/sync/driver/about_sync_util.h"
36#include "components/sync/driver/pref_names.h"
37#include "components/sync/driver/sync_prefs.h"
[email protected]dfe6a9b2014-01-31 21:37:5538#include "content/public/browser/browser_thread.h"
[email protected]9049a7b2013-03-07 22:22:0339#include "google/cacheinvalidation/types.pb.h"
40#include "google_apis/gaia/gaia_constants.h"
41#include "google_apis/gaia/google_service_auth_error.h"
[email protected]9049a7b2013-03-07 22:22:0342#include "jni/ProfileSyncService_jni.h"
[email protected]9049a7b2013-03-07 22:22:0343#include "ui/base/l10n/l10n_util.h"
44
45using base::android::AttachCurrentThread;
46using base::android::CheckException;
47using base::android::ConvertJavaStringToUTF8;
48using base::android::ConvertUTF8ToJavaString;
torne86560112016-08-04 15:59:0449using base::android::JavaParamRef;
[email protected]9049a7b2013-03-07 22:22:0350using base::android::ScopedJavaLocalRef;
51using content::BrowserThread;
52
53namespace {
[email protected]9049a7b2013-03-07 22:22:0354
pvalenzuelaff27ca202015-05-20 23:34:2155// Native callback for the JNI GetAllNodes method. When
56// ProfileSyncService::GetAllNodes completes, this method is called and the
57// results are sent to the Java callback.
58void NativeGetAllNodesCallback(
59 const base::android::ScopedJavaGlobalRef<jobject>& callback,
dcheng0569a0e2016-04-14 17:37:0560 std::unique_ptr<base::ListValue> result) {
pvalenzuelaff27ca202015-05-20 23:34:2161 JNIEnv* env = base::android::AttachCurrentThread();
62 std::string json_string;
63 if (!result.get() || !base::JSONWriter::Write(*result, &json_string)) {
64 DVLOG(1) << "Writing as JSON failed. Passing empty string to Java code.";
65 json_string = std::string();
66 }
67
68 ScopedJavaLocalRef<jstring> java_json_string =
69 ConvertUTF8ToJavaString(env, json_string);
torne948f3662016-08-16 15:10:4470 Java_ProfileSyncService_onGetAllNodesResult(env, callback, java_json_string);
pvalenzuelaff27ca202015-05-20 23:34:2171}
72
maxbogue28baa962015-10-01 17:21:3873ScopedJavaLocalRef<jintArray> ModelTypeSetToJavaIntArray(
74 JNIEnv* env,
75 syncer::ModelTypeSet types) {
76 std::vector<int> type_vector;
77 for (syncer::ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) {
78 type_vector.push_back(it.Get());
79 }
80 return base::android::ToJavaIntArray(env, type_vector);
81}
82
[email protected]9049a7b2013-03-07 22:22:0383} // namespace
84
85ProfileSyncServiceAndroid::ProfileSyncServiceAndroid(JNIEnv* env, jobject obj)
86 : profile_(NULL),
87 sync_service_(NULL),
88 weak_java_profile_sync_service_(env, obj) {
89 if (g_browser_process == NULL ||
90 g_browser_process->profile_manager() == NULL) {
91 NOTREACHED() << "Browser process or profile manager not initialized";
92 return;
93 }
94
[email protected]dd547a22013-12-12 18:37:4195 profile_ = ProfileManager::GetActiveUserProfile();
[email protected]9049a7b2013-03-07 22:22:0396 if (profile_ == NULL) {
97 NOTREACHED() << "Sync Init: Profile not found.";
98 return;
99 }
100
[email protected]34f54052014-03-20 21:33:40101 sync_prefs_.reset(new sync_driver::SyncPrefs(profile_->GetPrefs()));
[email protected]aa5b2ece2013-05-17 00:37:36102
[email protected]9049a7b2013-03-07 22:22:03103 sync_service_ =
104 ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_);
[email protected]9049a7b2013-03-07 22:22:03105}
106
cullinan3b803e22015-12-02 01:31:24107bool ProfileSyncServiceAndroid::Init() {
108 if (sync_service_) {
109 sync_service_->AddObserver(this);
maxbogue1a4f00902015-12-15 21:39:40110 sync_service_->SetPlatformSyncAllowedProvider(
111 base::Bind(&ProfileSyncServiceAndroid::IsSyncAllowedByAndroid,
112 base::Unretained(this)));
cullinan3b803e22015-12-02 01:31:24113 return true;
114 } else {
115 return false;
116 }
[email protected]9049a7b2013-03-07 22:22:03117}
118
maxbogue28baa962015-10-01 17:21:38119ProfileSyncServiceAndroid::~ProfileSyncServiceAndroid() {
maxbogue1a4f00902015-12-15 21:39:40120 if (sync_service_) {
[email protected]9049a7b2013-03-07 22:22:03121 sync_service_->RemoveObserver(this);
maxbogue1a4f00902015-12-15 21:39:40122 sync_service_->SetPlatformSyncAllowedProvider(
123 ProfileSyncService::PlatformSyncAllowedProvider());
[email protected]9049a7b2013-03-07 22:22:03124 }
125}
126
[email protected]9049a7b2013-03-07 22:22:03127void ProfileSyncServiceAndroid::OnStateChanged() {
[email protected]9049a7b2013-03-07 22:22:03128 // Notify the java world that our sync state has changed.
129 JNIEnv* env = AttachCurrentThread();
130 Java_ProfileSyncService_syncStateChanged(
torne948f3662016-08-16 15:10:44131 env, weak_java_profile_sync_service_.get(env));
[email protected]9049a7b2013-03-07 22:22:03132}
133
maxbogue1a4f00902015-12-15 21:39:40134bool ProfileSyncServiceAndroid::IsSyncAllowedByAndroid() const {
135 DCHECK_CURRENTLY_ON(BrowserThread::UI);
136 JNIEnv* env = AttachCurrentThread();
137 return Java_ProfileSyncService_isMasterSyncEnabled(
torne948f3662016-08-16 15:10:44138 env, weak_java_profile_sync_service_.get(env));
maxbogue1a4f00902015-12-15 21:39:40139}
140
maxbogue28baa962015-10-01 17:21:38141// Pure ProfileSyncService calls.
zeab1b09b72015-05-01 17:56:40142
maxbogue28baa962015-10-01 17:21:38143jboolean ProfileSyncServiceAndroid::IsSyncRequested(
torne0a4a3ab12015-12-10 19:45:52144 JNIEnv* env,
145 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38146 DCHECK_CURRENTLY_ON(BrowserThread::UI);
147 return sync_service_->IsSyncRequested();
zeab1b09b72015-05-01 17:56:40148}
149
torne0a4a3ab12015-12-10 19:45:52150void ProfileSyncServiceAndroid::RequestStart(JNIEnv* env,
151 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23152 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxboguecd3fad6b2015-06-09 00:44:53153 sync_service_->RequestStart();
[email protected]9049a7b2013-03-07 22:22:03154}
155
torne0a4a3ab12015-12-10 19:45:52156void ProfileSyncServiceAndroid::RequestStop(JNIEnv* env,
157 const JavaParamRef<jobject>&) {
maxboguef5c53a2d2015-07-08 20:47:29158 DCHECK_CURRENTLY_ON(BrowserThread::UI);
159 sync_service_->RequestStop(ProfileSyncService::KEEP_DATA);
160}
161
torne0a4a3ab12015-12-10 19:45:52162void ProfileSyncServiceAndroid::SignOutSync(JNIEnv* env,
163 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23164 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03165 DCHECK(profile_);
maxbogue699262c92015-06-19 19:24:58166 sync_service_->RequestStop(ProfileSyncService::CLEAR_DATA);
[email protected]9049a7b2013-03-07 22:22:03167}
168
torne0a4a3ab12015-12-10 19:45:52169jboolean ProfileSyncServiceAndroid::IsSyncActive(
170 JNIEnv* env,
171 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38172 DCHECK_CURRENTLY_ON(BrowserThread::UI);
173 return sync_service_->IsSyncActive();
174}
175
torne0a4a3ab12015-12-10 19:45:52176jboolean ProfileSyncServiceAndroid::IsBackendInitialized(
177 JNIEnv* env,
178 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38179 DCHECK_CURRENTLY_ON(BrowserThread::UI);
180 return sync_service_->IsBackendInitialized();
181}
182
maxbogue28baa962015-10-01 17:21:38183void ProfileSyncServiceAndroid::SetSetupInProgress(
torne0a4a3ab12015-12-10 19:45:52184 JNIEnv* env,
185 const JavaParamRef<jobject>& obj,
186 jboolean in_progress) {
maxbogue28baa962015-10-01 17:21:38187 DCHECK_CURRENTLY_ON(BrowserThread::UI);
tommyclif3a1551e2016-06-21 18:11:23188 if (in_progress) {
189 sync_blocker_ = sync_service_->GetSetupInProgressHandle();
190 } else {
191 sync_blocker_.reset();
192 }
maxbogue28baa962015-10-01 17:21:38193}
194
maxboguefe00952a2016-01-19 19:02:01195jboolean ProfileSyncServiceAndroid::IsFirstSetupComplete(
torne0a4a3ab12015-12-10 19:45:52196 JNIEnv* env,
197 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38198 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxboguefe00952a2016-01-19 19:02:01199 return sync_service_->IsFirstSetupComplete();
maxbogue28baa962015-10-01 17:21:38200}
201
maxboguefe00952a2016-01-19 19:02:01202void ProfileSyncServiceAndroid::SetFirstSetupComplete(
torne0a4a3ab12015-12-10 19:45:52203 JNIEnv* env,
204 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38205 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxboguefe00952a2016-01-19 19:02:01206 sync_service_->SetFirstSetupComplete();
maxbogue28baa962015-10-01 17:21:38207}
208
209ScopedJavaLocalRef<jintArray> ProfileSyncServiceAndroid::GetActiveDataTypes(
torne0a4a3ab12015-12-10 19:45:52210 JNIEnv* env,
211 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38212 syncer::ModelTypeSet types = sync_service_->GetActiveDataTypes();
213 return ModelTypeSetToJavaIntArray(env, types);
214}
215
216ScopedJavaLocalRef<jintArray> ProfileSyncServiceAndroid::GetPreferredDataTypes(
torne0a4a3ab12015-12-10 19:45:52217 JNIEnv* env,
218 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38219 syncer::ModelTypeSet types = sync_service_->GetPreferredDataTypes();
220 return ModelTypeSetToJavaIntArray(env, types);
221}
222
223void ProfileSyncServiceAndroid::SetPreferredDataTypes(
torne0a4a3ab12015-12-10 19:45:52224 JNIEnv* env,
225 const JavaParamRef<jobject>& obj,
maxbogue28baa962015-10-01 17:21:38226 jboolean sync_everything,
torne0a4a3ab12015-12-10 19:45:52227 const JavaParamRef<jintArray>& model_type_array) {
maxbogue28baa962015-10-01 17:21:38228 DCHECK_CURRENTLY_ON(BrowserThread::UI);
229 std::vector<int> types_vector;
230 base::android::JavaIntArrayToIntVector(env, model_type_array, &types_vector);
231 syncer::ModelTypeSet types;
232 for (size_t i = 0; i < types_vector.size(); i++) {
233 types.Put(static_cast<syncer::ModelType>(types_vector[i]));
234 }
235 sync_service_->OnUserChoseDatatypes(sync_everything, types);
236}
237
torne0a4a3ab12015-12-10 19:45:52238jboolean ProfileSyncServiceAndroid::IsCryptographerReady(
239 JNIEnv* env,
240 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38241 syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
242 return sync_service_->IsCryptographerReady(&trans);
243}
244
245jboolean ProfileSyncServiceAndroid::IsEncryptEverythingAllowed(
torne0a4a3ab12015-12-10 19:45:52246 JNIEnv* env,
247 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38248 DCHECK_CURRENTLY_ON(BrowserThread::UI);
249 return sync_service_->IsEncryptEverythingAllowed();
250}
251
252jboolean ProfileSyncServiceAndroid::IsEncryptEverythingEnabled(
torne0a4a3ab12015-12-10 19:45:52253 JNIEnv* env,
254 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38255 DCHECK_CURRENTLY_ON(BrowserThread::UI);
256 return sync_service_->IsEncryptEverythingEnabled();
257}
258
259void ProfileSyncServiceAndroid::EnableEncryptEverything(
torne0a4a3ab12015-12-10 19:45:52260 JNIEnv* env,
261 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38262 DCHECK_CURRENTLY_ON(BrowserThread::UI);
263 sync_service_->EnableEncryptEverything();
264}
265
maxbogue28baa962015-10-01 17:21:38266jboolean ProfileSyncServiceAndroid::IsPassphraseRequiredForDecryption(
torne0a4a3ab12015-12-10 19:45:52267 JNIEnv* env,
268 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38269 DCHECK_CURRENTLY_ON(BrowserThread::UI);
270 return sync_service_->IsPassphraseRequiredForDecryption();
271}
272
273jboolean ProfileSyncServiceAndroid::IsUsingSecondaryPassphrase(
torne0a4a3ab12015-12-10 19:45:52274 JNIEnv* env,
275 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38276 DCHECK_CURRENTLY_ON(BrowserThread::UI);
277 return sync_service_->IsUsingSecondaryPassphrase();
278}
279
maxbogue774f3172015-11-18 16:26:58280ScopedJavaLocalRef<jbyteArray>
torne0a4a3ab12015-12-10 19:45:52281ProfileSyncServiceAndroid::GetCustomPassphraseKey(
282 JNIEnv* env,
283 const JavaParamRef<jobject>& obj) {
maxbogue774f3172015-11-18 16:26:58284 std::string key = sync_service_->GetCustomPassphraseKey();
285 return base::android::ToJavaByteArray(
286 env, reinterpret_cast<const uint8_t*>(key.data()), key.size());
287}
288
torne0a4a3ab12015-12-10 19:45:52289jint ProfileSyncServiceAndroid::GetPassphraseType(
290 JNIEnv* env,
291 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38292 DCHECK_CURRENTLY_ON(BrowserThread::UI);
melandory5c441aa2016-08-30 06:09:10293 return static_cast<unsigned>(sync_service_->GetPassphraseType());
maxbogue28baa962015-10-01 17:21:38294}
295
296void ProfileSyncServiceAndroid::SetEncryptionPassphrase(
torne0a4a3ab12015-12-10 19:45:52297 JNIEnv* env,
298 const JavaParamRef<jobject>& obj,
299 const JavaParamRef<jstring>& passphrase) {
maxbogue28baa962015-10-01 17:21:38300 DCHECK_CURRENTLY_ON(BrowserThread::UI);
301 std::string key = ConvertJavaStringToUTF8(env, passphrase);
302 sync_service_->SetEncryptionPassphrase(key, ProfileSyncService::EXPLICIT);
303}
304
305jboolean ProfileSyncServiceAndroid::SetDecryptionPassphrase(
torne0a4a3ab12015-12-10 19:45:52306 JNIEnv* env,
307 const JavaParamRef<jobject>& obj,
308 const JavaParamRef<jstring>& passphrase) {
maxbogue28baa962015-10-01 17:21:38309 DCHECK_CURRENTLY_ON(BrowserThread::UI);
310 std::string key = ConvertJavaStringToUTF8(env, passphrase);
311 return sync_service_->SetDecryptionPassphrase(key);
312}
313
314jboolean ProfileSyncServiceAndroid::HasExplicitPassphraseTime(
torne0a4a3ab12015-12-10 19:45:52315 JNIEnv* env,
316 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38317 DCHECK_CURRENTLY_ON(BrowserThread::UI);
318 base::Time passphrase_time = sync_service_->GetExplicitPassphraseTime();
319 return !passphrase_time.is_null();
320}
321
322jlong ProfileSyncServiceAndroid::GetExplicitPassphraseTime(
torne0a4a3ab12015-12-10 19:45:52323 JNIEnv* env,
324 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38325 DCHECK_CURRENTLY_ON(BrowserThread::UI);
326 base::Time passphrase_time = sync_service_->GetExplicitPassphraseTime();
327 return passphrase_time.ToJavaTime();
328}
329
torne0a4a3ab12015-12-10 19:45:52330void ProfileSyncServiceAndroid::FlushDirectory(JNIEnv* env,
331 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23332 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxbogued4470ca2014-09-30 23:38:11333 sync_service_->FlushDirectory();
334}
335
[email protected]9049a7b2013-03-07 22:22:03336ScopedJavaLocalRef<jstring> ProfileSyncServiceAndroid::QuerySyncStatusSummary(
torne0a4a3ab12015-12-10 19:45:52337 JNIEnv* env,
338 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23339 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03340 DCHECK(profile_);
[email protected]9e8df052013-09-18 10:47:18341 std::string status(sync_service_->QuerySyncStatusSummaryString());
[email protected]9049a7b2013-03-07 22:22:03342 return ConvertUTF8ToJavaString(env, status);
343}
344
torne0a4a3ab12015-12-10 19:45:52345void ProfileSyncServiceAndroid::GetAllNodes(
346 JNIEnv* env,
347 const JavaParamRef<jobject>& obj,
348 const JavaParamRef<jobject>& callback) {
pvalenzuelaff27ca202015-05-20 23:34:21349 base::android::ScopedJavaGlobalRef<jobject> java_callback;
350 java_callback.Reset(env, callback);
351
dcheng0569a0e2016-04-14 17:37:05352 base::Callback<void(std::unique_ptr<base::ListValue>)> native_callback =
pvalenzuelaff27ca202015-05-20 23:34:21353 base::Bind(&NativeGetAllNodesCallback, java_callback);
354 sync_service_->GetAllNodes(native_callback);
355}
356
torne0a4a3ab12015-12-10 19:45:52357jint ProfileSyncServiceAndroid::GetAuthError(JNIEnv* env,
358 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38359 DCHECK_CURRENTLY_ON(BrowserThread::UI);
360 return sync_service_->GetAuthError().state();
361}
362
363jboolean ProfileSyncServiceAndroid::HasUnrecoverableError(
torne0a4a3ab12015-12-10 19:45:52364 JNIEnv* env,
365 const JavaParamRef<jobject>&) {
maxbogue28baa962015-10-01 17:21:38366 DCHECK_CURRENTLY_ON(BrowserThread::UI);
367 return sync_service_->HasUnrecoverableError();
368}
369
gogeralda2e00442016-08-17 05:59:06370jint ProfileSyncServiceAndroid::GetProtocolErrorClientAction(
371 JNIEnv* env,
372 const JavaParamRef<jobject>&) {
373 DCHECK_CURRENTLY_ON(BrowserThread::UI);
374 syncer::SyncStatus status;
375 sync_service_->QueryDetailedSyncStatus(&status);
376 return status.sync_protocol_error.action;
377}
378
maxbogue28baa962015-10-01 17:21:38379// Pure SyncPrefs calls.
380
torne0a4a3ab12015-12-10 19:45:52381jboolean ProfileSyncServiceAndroid::IsPassphrasePrompted(
382 JNIEnv* env,
383 const JavaParamRef<jobject>& obj) {
maxbogue28baa962015-10-01 17:21:38384 return sync_prefs_->IsPassphrasePrompted();
385}
386
torne0a4a3ab12015-12-10 19:45:52387void ProfileSyncServiceAndroid::SetPassphrasePrompted(
388 JNIEnv* env,
389 const JavaParamRef<jobject>& obj,
390 jboolean prompted) {
maxbogue28baa962015-10-01 17:21:38391 sync_prefs_->SetPassphrasePrompted(prompted);
392}
393
maxboguec7f232d2015-07-29 19:25:40394void ProfileSyncServiceAndroid::SetSyncSessionsId(
torne0a4a3ab12015-12-10 19:45:52395 JNIEnv* env,
396 const JavaParamRef<jobject>& obj,
397 const JavaParamRef<jstring>& tag) {
anujk.sharma86194482015-04-23 06:38:23398 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03399 DCHECK(profile_);
400 std::string machine_tag = ConvertJavaStringToUTF8(env, tag);
[email protected]aa5b2ece2013-05-17 00:37:36401 sync_prefs_->SetSyncSessionsGUID(machine_tag);
[email protected]9049a7b2013-03-07 22:22:03402}
403
maxbogue28baa962015-10-01 17:21:38404jboolean ProfileSyncServiceAndroid::HasKeepEverythingSynced(
torne0a4a3ab12015-12-10 19:45:52405 JNIEnv* env,
406 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23407 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxbogue28baa962015-10-01 17:21:38408 return sync_prefs_->HasKeepEverythingSynced();
[email protected]9049a7b2013-03-07 22:22:03409}
410
maxbogue28baa962015-10-01 17:21:38411// UI string getters.
maxboguec021ddcc2014-10-09 16:21:24412
[email protected]9049a7b2013-03-07 22:22:03413ScopedJavaLocalRef<jstring>
torne0a4a3ab12015-12-10 19:45:52414ProfileSyncServiceAndroid::GetSyncEnterGooglePassphraseBodyWithDateText(
415 JNIEnv* env,
416 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23417 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03418 base::Time passphrase_time = sync_service_->GetExplicitPassphraseTime();
[email protected]a04db822013-12-11 19:14:40419 base::string16 passphrase_time_str =
420 base::TimeFormatShortDate(passphrase_time);
[email protected]9049a7b2013-03-07 22:22:03421 return base::android::ConvertUTF16ToJavaString(env,
422 l10n_util::GetStringFUTF16(
423 IDS_SYNC_ENTER_GOOGLE_PASSPHRASE_BODY_WITH_DATE,
424 passphrase_time_str));
425}
426
427ScopedJavaLocalRef<jstring>
torne0a4a3ab12015-12-10 19:45:52428ProfileSyncServiceAndroid::GetSyncEnterCustomPassphraseBodyWithDateText(
429 JNIEnv* env,
430 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23431 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03432 base::Time passphrase_time = sync_service_->GetExplicitPassphraseTime();
[email protected]a04db822013-12-11 19:14:40433 base::string16 passphrase_time_str =
434 base::TimeFormatShortDate(passphrase_time);
[email protected]9049a7b2013-03-07 22:22:03435 return base::android::ConvertUTF16ToJavaString(env,
436 l10n_util::GetStringFUTF16(IDS_SYNC_ENTER_PASSPHRASE_BODY_WITH_DATE,
437 passphrase_time_str));
438}
439
440ScopedJavaLocalRef<jstring>
torne0a4a3ab12015-12-10 19:45:52441ProfileSyncServiceAndroid::GetCurrentSignedInAccountText(
442 JNIEnv* env,
443 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23444 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]4faa9de02013-03-26 10:17:20445 const std::string& sync_username =
bzanotti1b5be292015-08-31 12:10:05446 SigninManagerFactory::GetForProfile(profile_)
447 ->GetAuthenticatedAccountInfo()
448 .email;
[email protected]4faa9de02013-03-26 10:17:20449 return base::android::ConvertUTF16ToJavaString(env,
450 l10n_util::GetStringFUTF16(
451 IDS_SYNC_ACCOUNT_SYNCING_TO_USER,
[email protected]f911df52013-12-24 23:24:23452 base::ASCIIToUTF16(sync_username)));
[email protected]4faa9de02013-03-26 10:17:20453}
454
455ScopedJavaLocalRef<jstring>
torne0a4a3ab12015-12-10 19:45:52456ProfileSyncServiceAndroid::GetSyncEnterCustomPassphraseBodyText(
457 JNIEnv* env,
458 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23459 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03460 return ConvertUTF8ToJavaString(
461 env, l10n_util::GetStringUTF8(IDS_SYNC_ENTER_PASSPHRASE_BODY));
462}
463
maxbogue28baa962015-10-01 17:21:38464// Functionality only available for testing purposes.
[email protected]9049a7b2013-03-07 22:22:03465
466ScopedJavaLocalRef<jstring> ProfileSyncServiceAndroid::GetAboutInfoForTest(
torne0a4a3ab12015-12-10 19:45:52467 JNIEnv* env,
468 const JavaParamRef<jobject>&) {
anujk.sharma86194482015-04-23 06:38:23469 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03470
dcheng0569a0e2016-04-14 17:37:05471 std::unique_ptr<base::DictionaryValue> about_info =
droger5144c432015-09-17 10:53:11472 sync_driver::sync_ui_util::ConstructAboutInformation(
473 sync_service_, sync_service_->signin(), chrome::GetChannel());
[email protected]9049a7b2013-03-07 22:22:03474 std::string about_info_json;
estade8d046462015-05-16 01:02:34475 base::JSONWriter::Write(*about_info, &about_info_json);
[email protected]9049a7b2013-03-07 22:22:03476
477 return ConvertUTF8ToJavaString(env, about_info_json);
478}
479
[email protected]ed4d7052013-09-04 19:01:37480jlong ProfileSyncServiceAndroid::GetLastSyncedTimeForTest(
torne0a4a3ab12015-12-10 19:45:52481 JNIEnv* env,
482 const JavaParamRef<jobject>& obj) {
[email protected]ed4d7052013-09-04 19:01:37483 // Use profile preferences here instead of SyncPrefs to avoid an extra
484 // conversion, since SyncPrefs::GetLastSyncedTime() converts the stored value
485 // to to base::Time.
486 return static_cast<jlong>(
[email protected]34f54052014-03-20 21:33:40487 profile_->GetPrefs()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime));
[email protected]ed4d7052013-09-04 19:01:37488}
489
[email protected]be21aaa2014-08-21 21:26:38490void ProfileSyncServiceAndroid::OverrideNetworkResourcesForTest(
491 JNIEnv* env,
torne0a4a3ab12015-12-10 19:45:52492 const JavaParamRef<jobject>& obj,
[email protected]be21aaa2014-08-21 21:26:38493 jlong network_resources) {
494 syncer::NetworkResources* resources =
495 reinterpret_cast<syncer::NetworkResources*>(network_resources);
496 sync_service_->OverrideNetworkResourcesForTest(
dcheng0569a0e2016-04-14 17:37:05497 base::WrapUnique<syncer::NetworkResources>(resources));
[email protected]be21aaa2014-08-21 21:26:38498}
499
bauerbdab6c6f2014-08-28 09:20:23500// static
[email protected]332a83362013-03-26 08:45:55501ProfileSyncServiceAndroid*
502 ProfileSyncServiceAndroid::GetProfileSyncServiceAndroid() {
503 return reinterpret_cast<ProfileSyncServiceAndroid*>(
maxbogue89bee1d862015-08-26 21:00:07504 Java_ProfileSyncService_getProfileSyncServiceAndroid(
505 AttachCurrentThread()));
[email protected]332a83362013-03-26 08:45:55506}
507
maxbogue28baa962015-10-01 17:21:38508// static
509bool ProfileSyncServiceAndroid::Register(JNIEnv* env) {
510 return RegisterNativesImpl(env);
511}
512
torne89cc5d92015-09-04 11:16:35513static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
[email protected]9049a7b2013-03-07 22:22:03514 ProfileSyncServiceAndroid* profile_sync_service_android =
515 new ProfileSyncServiceAndroid(env, obj);
cullinan3b803e22015-12-02 01:31:24516 if (profile_sync_service_android->Init()) {
517 return reinterpret_cast<intptr_t>(profile_sync_service_android);
518 } else {
519 delete profile_sync_service_android;
520 return 0;
521 }
[email protected]9049a7b2013-03-07 22:22:03522}