Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(763)

Side by Side Diff: chrome/browser/sync/profile_sync_service_android.cc

Issue 1247853007: [Sync] Add auto-generated ModelType in Java. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add SYNC_EXPORT and rebase. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/profile_sync_service_android.h" 5 #include "chrome/browser/sync/profile_sync_service_android.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h"
8 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
9 #include "base/bind.h" 10 #include "base/bind.h"
10 #include "base/i18n/time_formatting.h" 11 #include "base/i18n/time_formatting.h"
11 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
12 #include "base/logging.h" 13 #include "base/logging.h"
13 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
14 #include "base/metrics/field_trial.h" 15 #include "base/metrics/field_trial.h"
15 #include "base/prefs/pref_service.h" 16 #include "base/prefs/pref_service.h"
16 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
17 #include "base/time/time.h" 18 #include "base/time/time.h"
(...skipping 19 matching lines...) Expand all
37 38
38 using base::android::AttachCurrentThread; 39 using base::android::AttachCurrentThread;
39 using base::android::CheckException; 40 using base::android::CheckException;
40 using base::android::ConvertJavaStringToUTF8; 41 using base::android::ConvertJavaStringToUTF8;
41 using base::android::ConvertUTF8ToJavaString; 42 using base::android::ConvertUTF8ToJavaString;
42 using base::android::ScopedJavaLocalRef; 43 using base::android::ScopedJavaLocalRef;
43 using content::BrowserThread; 44 using content::BrowserThread;
44 45
45 namespace { 46 namespace {
46 47
47 // This enum contains the list of sync ModelTypes that Android can register for
48 // invalidations for.
49 //
50 // A Java counterpart will be generated for this enum.
51 // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.sync
52 enum ModelTypeSelection {
53 AUTOFILL = 1 << 0,
54 BOOKMARK = 1 << 1,
55 PASSWORD = 1 << 2,
56 SESSION = 1 << 3,
57 TYPED_URL = 1 << 4,
58 AUTOFILL_PROFILE = 1 << 5,
59 HISTORY_DELETE_DIRECTIVE = 1 << 6,
60 PROXY_TABS = 1 << 7,
61 FAVICON_IMAGE = 1 << 8,
62 FAVICON_TRACKING = 1 << 9,
63 NIGORI = 1 << 10,
64 DEVICE_INFO = 1 << 11,
65 EXPERIMENTS = 1 << 12,
66 SUPERVISED_USER_SETTING = 1 << 13,
67 SUPERVISED_USER_WHITELIST = 1 << 14,
68 AUTOFILL_WALLET = 1 << 15,
69 AUTOFILL_WALLET_METADATA = 1 << 16,
70 PREFERENCE = 1 << 17,
71 PRIORITY_PREFERENCE = 1 << 18,
72 };
73
74 // Native callback for the JNI GetAllNodes method. When 48 // Native callback for the JNI GetAllNodes method. When
75 // ProfileSyncService::GetAllNodes completes, this method is called and the 49 // ProfileSyncService::GetAllNodes completes, this method is called and the
76 // results are sent to the Java callback. 50 // results are sent to the Java callback.
77 void NativeGetAllNodesCallback( 51 void NativeGetAllNodesCallback(
78 const base::android::ScopedJavaGlobalRef<jobject>& callback, 52 const base::android::ScopedJavaGlobalRef<jobject>& callback,
79 scoped_ptr<base::ListValue> result) { 53 scoped_ptr<base::ListValue> result) {
80 JNIEnv* env = base::android::AttachCurrentThread(); 54 JNIEnv* env = base::android::AttachCurrentThread();
81 std::string json_string; 55 std::string json_string;
82 if (!result.get() || !base::JSONWriter::Write(*result, &json_string)) { 56 if (!result.get() || !base::JSONWriter::Write(*result, &json_string)) {
83 DVLOG(1) << "Writing as JSON failed. Passing empty string to Java code."; 57 DVLOG(1) << "Writing as JSON failed. Passing empty string to Java code.";
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 } 328 }
355 329
356 jboolean ProfileSyncServiceAndroid::IsSyncKeystoreMigrationDone( 330 jboolean ProfileSyncServiceAndroid::IsSyncKeystoreMigrationDone(
357 JNIEnv* env, jobject) { 331 JNIEnv* env, jobject) {
358 DCHECK_CURRENTLY_ON(BrowserThread::UI); 332 DCHECK_CURRENTLY_ON(BrowserThread::UI);
359 syncer::SyncStatus status; 333 syncer::SyncStatus status;
360 bool is_status_valid = sync_service_->QueryDetailedSyncStatus(&status); 334 bool is_status_valid = sync_service_->QueryDetailedSyncStatus(&status);
361 return is_status_valid && !status.keystore_migration_time.is_null(); 335 return is_status_valid && !status.keystore_migration_time.is_null();
362 } 336 }
363 337
364 jlong ProfileSyncServiceAndroid::GetActiveDataTypes( 338 ScopedJavaLocalRef<jintArray> ProfileSyncServiceAndroid::GetActiveDataTypes(
365 JNIEnv* env, jobject obj) { 339 JNIEnv* env, jobject obj) {
366 syncer::ModelTypeSet types = sync_service_->GetActiveDataTypes(); 340 syncer::ModelTypeSet types = sync_service_->GetActiveDataTypes();
367 types.PutAll(syncer::ControlTypes()); 341 types.PutAll(syncer::ControlTypes());
368 return ModelTypeSetToSelection(types); 342 return ModelTypeSetToJavaIntArray(env, types);
369 } 343 }
370 344
371 jlong ProfileSyncServiceAndroid::GetPreferredDataTypes( 345 ScopedJavaLocalRef<jintArray> ProfileSyncServiceAndroid::GetPreferredDataTypes(
372 JNIEnv* env, jobject obj) { 346 JNIEnv* env, jobject obj) {
373 syncer::ModelTypeSet types = sync_service_->GetPreferredDataTypes(); 347 syncer::ModelTypeSet types = sync_service_->GetPreferredDataTypes();
374 types.PutAll(syncer::ControlTypes()); 348 types.PutAll(syncer::ControlTypes());
375 return ModelTypeSetToSelection(types); 349 return ModelTypeSetToJavaIntArray(env, types);
376 } 350 }
377 351
378 void ProfileSyncServiceAndroid::SetPreferredDataTypes( 352 void ProfileSyncServiceAndroid::SetPreferredDataTypes(
379 JNIEnv* env, jobject obj, 353 JNIEnv* env, jobject obj,
380 jboolean sync_everything, 354 jboolean sync_everything,
381 jlong model_type_selection) { 355 jintArray model_type_array) {
382 DCHECK_CURRENTLY_ON(BrowserThread::UI); 356 DCHECK_CURRENTLY_ON(BrowserThread::UI);
357 std::vector<int> types_vector;
358 base::android::JavaIntArrayToIntVector(env, model_type_array, &types_vector);
383 syncer::ModelTypeSet types; 359 syncer::ModelTypeSet types;
384 // Note: only user selectable types should be included here. 360 for (size_t i = 0; i < types_vector.size(); i++) {
385 if (model_type_selection & AUTOFILL) 361 types.Put(static_cast<syncer::ModelType>(types_vector[i]));
386 types.Put(syncer::AUTOFILL); 362 }
387 if (model_type_selection & BOOKMARK) 363 types.RetainAll(syncer::UserSelectableTypes());
388 types.Put(syncer::BOOKMARKS);
389 if (model_type_selection & PASSWORD)
390 types.Put(syncer::PASSWORDS);
391 if (model_type_selection & PROXY_TABS)
392 types.Put(syncer::PROXY_TABS);
393 if (model_type_selection & TYPED_URL)
394 types.Put(syncer::TYPED_URLS);
395 if (model_type_selection & PREFERENCE)
396 types.Put(syncer::PREFERENCES);
397 DCHECK(syncer::UserSelectableTypes().HasAll(types));
398 sync_service_->OnUserChoseDatatypes(sync_everything, types); 364 sync_service_->OnUserChoseDatatypes(sync_everything, types);
399 } 365 }
400 366
401 void ProfileSyncServiceAndroid::SetSetupInProgress( 367 void ProfileSyncServiceAndroid::SetSetupInProgress(
402 JNIEnv* env, jobject obj, jboolean in_progress) { 368 JNIEnv* env, jobject obj, jboolean in_progress) {
403 DCHECK_CURRENTLY_ON(BrowserThread::UI); 369 DCHECK_CURRENTLY_ON(BrowserThread::UI);
404 sync_service_->SetSetupInProgress(in_progress); 370 sync_service_->SetSetupInProgress(in_progress);
405 } 371 }
406 372
407 void ProfileSyncServiceAndroid::SetSyncSetupCompleted( 373 void ProfileSyncServiceAndroid::SetSyncSetupCompleted(
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 JNIEnv* env, 436 JNIEnv* env,
471 jobject obj, 437 jobject obj,
472 jlong network_resources) { 438 jlong network_resources) {
473 syncer::NetworkResources* resources = 439 syncer::NetworkResources* resources =
474 reinterpret_cast<syncer::NetworkResources*>(network_resources); 440 reinterpret_cast<syncer::NetworkResources*>(network_resources);
475 sync_service_->OverrideNetworkResourcesForTest( 441 sync_service_->OverrideNetworkResourcesForTest(
476 make_scoped_ptr<syncer::NetworkResources>(resources)); 442 make_scoped_ptr<syncer::NetworkResources>(resources));
477 } 443 }
478 444
479 // static 445 // static
480 jlong ProfileSyncServiceAndroid::ModelTypeSetToSelection( 446 ScopedJavaLocalRef<jintArray>
447 ProfileSyncServiceAndroid::ModelTypeSetToJavaIntArray(
448 JNIEnv* env,
481 syncer::ModelTypeSet types) { 449 syncer::ModelTypeSet types) {
482 jlong model_type_selection = 0; 450 std::vector<int> type_vector;
483 if (types.Has(syncer::BOOKMARKS)) { 451 for (syncer::ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) {
484 model_type_selection |= BOOKMARK; 452 type_vector.push_back(it.Get());
485 } 453 }
486 if (types.Has(syncer::AUTOFILL)) { 454 return base::android::ToJavaIntArray(env, type_vector);
487 model_type_selection |= AUTOFILL;
488 }
489 if (types.Has(syncer::AUTOFILL_PROFILE)) {
490 model_type_selection |= AUTOFILL_PROFILE;
491 }
492 if (types.Has(syncer::AUTOFILL_WALLET_DATA)) {
493 model_type_selection |= AUTOFILL_WALLET;
494 }
495 if (types.Has(syncer::AUTOFILL_WALLET_METADATA)) {
496 model_type_selection |= AUTOFILL_WALLET_METADATA;
497 }
498 if (types.Has(syncer::PASSWORDS)) {
499 model_type_selection |= PASSWORD;
500 }
501 if (types.Has(syncer::PREFERENCES)) {
502 model_type_selection |= PREFERENCE;
503 }
504 if (types.Has(syncer::PRIORITY_PREFERENCES)) {
505 model_type_selection |= PRIORITY_PREFERENCE;
506 }
507 if (types.Has(syncer::TYPED_URLS)) {
508 model_type_selection |= TYPED_URL;
509 }
510 if (types.Has(syncer::SESSIONS)) {
511 model_type_selection |= SESSION;
512 }
513 if (types.Has(syncer::HISTORY_DELETE_DIRECTIVES)) {
514 model_type_selection |= HISTORY_DELETE_DIRECTIVE;
515 }
516 if (types.Has(syncer::PROXY_TABS)) {
517 model_type_selection |= PROXY_TABS;
518 }
519 if (types.Has(syncer::FAVICON_IMAGES)) {
520 model_type_selection |= FAVICON_IMAGE;
521 }
522 if (types.Has(syncer::FAVICON_TRACKING)) {
523 model_type_selection |= FAVICON_TRACKING;
524 }
525 if (types.Has(syncer::DEVICE_INFO)) {
526 model_type_selection |= DEVICE_INFO;
527 }
528 if (types.Has(syncer::NIGORI)) {
529 model_type_selection |= NIGORI;
530 }
531 if (types.Has(syncer::EXPERIMENTS)) {
532 model_type_selection |= EXPERIMENTS;
533 }
534 if (types.Has(syncer::SUPERVISED_USER_SETTINGS)) {
535 model_type_selection |= SUPERVISED_USER_SETTING;
536 }
537 if (types.Has(syncer::SUPERVISED_USER_WHITELISTS)) {
538 model_type_selection |= SUPERVISED_USER_WHITELIST;
539 }
540 return model_type_selection;
541 } 455 }
542 456
543 // static 457 // static
544 std::string ProfileSyncServiceAndroid::ModelTypeSelectionToStringForTest(
545 jlong model_type_selection) {
546 ScopedJavaLocalRef<jstring> string =
547 Java_ProfileSyncService_modelTypeSelectionToStringForTest(
548 AttachCurrentThread(), model_type_selection);
549 return ConvertJavaStringToUTF8(string);
550 }
551
552 // static
553 ProfileSyncServiceAndroid* 458 ProfileSyncServiceAndroid*
554 ProfileSyncServiceAndroid::GetProfileSyncServiceAndroid() { 459 ProfileSyncServiceAndroid::GetProfileSyncServiceAndroid() {
555 return reinterpret_cast<ProfileSyncServiceAndroid*>( 460 return reinterpret_cast<ProfileSyncServiceAndroid*>(
556 Java_ProfileSyncService_getProfileSyncServiceAndroid( 461 Java_ProfileSyncService_getProfileSyncServiceAndroid(
557 AttachCurrentThread(), base::android::GetApplicationContext())); 462 AttachCurrentThread(), base::android::GetApplicationContext()));
558 } 463 }
559 464
560 static jlong Init(JNIEnv* env, jobject obj) { 465 static jlong Init(JNIEnv* env, jobject obj) {
561 ProfileSyncServiceAndroid* profile_sync_service_android = 466 ProfileSyncServiceAndroid* profile_sync_service_android =
562 new ProfileSyncServiceAndroid(env, obj); 467 new ProfileSyncServiceAndroid(env, obj);
563 profile_sync_service_android->Init(); 468 profile_sync_service_android->Init();
564 return reinterpret_cast<intptr_t>(profile_sync_service_android); 469 return reinterpret_cast<intptr_t>(profile_sync_service_android);
565 } 470 }
566 471
567 // static 472 // static
568 bool ProfileSyncServiceAndroid::Register(JNIEnv* env) { 473 bool ProfileSyncServiceAndroid::Register(JNIEnv* env) {
569 return RegisterNativesImpl(env); 474 return RegisterNativesImpl(env);
570 } 475 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698