| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2016 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 <jni.h> |
| 6 |
| 7 #include <iterator> |
| 8 #include <string> |
| 9 #include <vector> |
| 10 |
| 11 #include "base/android/jni_array.h" |
| 12 #include "chrome/browser/android/chrome_backup_agent.h" |
| 13 #include "chrome/browser/profiles/profile_manager.h" |
| 14 #include "components/prefs/pref_service.h" |
| 15 #include "components/sync/base/pref_names.h" |
| 16 #include "jni/ChromeBackupAgent_jni.h" |
| 17 |
| 18 namespace { |
| 19 |
| 20 const char* backed_up_preferences_[] = { |
| 21 syncer::prefs::kSyncFirstSetupComplete, |
| 22 syncer::prefs::kSyncKeepEverythingSynced, |
| 23 syncer::prefs::kSyncAutofillProfile, |
| 24 syncer::prefs::kSyncAutofillWallet, |
| 25 syncer::prefs::kSyncAutofillWalletMetadata, |
| 26 syncer::prefs::kSyncAutofill, |
| 27 syncer::prefs::kSyncBookmarks, |
| 28 syncer::prefs::kSyncDeviceInfo, |
| 29 syncer::prefs::kSyncFaviconImages, |
| 30 syncer::prefs::kSyncFaviconTracking, |
| 31 syncer::prefs::kSyncHistoryDeleteDirectives, |
| 32 syncer::prefs::kSyncPasswords, |
| 33 syncer::prefs::kSyncPreferences, |
| 34 syncer::prefs::kSyncPriorityPreferences, |
| 35 syncer::prefs::kSyncSessions, |
| 36 syncer::prefs::kSyncSupervisedUserSettings, |
| 37 syncer::prefs::kSyncSupervisedUserSharedSettings, |
| 38 syncer::prefs::kSyncSupervisedUserWhitelists, |
| 39 syncer::prefs::kSyncTabs, |
| 40 syncer::prefs::kSyncTypedUrls, |
| 41 syncer::prefs::kSyncSuppressStart, |
| 42 }; |
| 43 |
| 44 } // namespace |
| 45 |
| 46 static base::android::ScopedJavaLocalRef<jobjectArray> GetBoolBackupNames( |
| 47 JNIEnv* env, |
| 48 const base::android::JavaParamRef<jobject>& jcaller) { |
| 49 return base::android::ToJavaArrayOfStrings( |
| 50 env, chrome::android::GetBackupPrefNames()); |
| 51 } |
| 52 |
| 53 static base::android::ScopedJavaLocalRef<jbooleanArray> GetBoolBackupValues( |
| 54 JNIEnv* env, |
| 55 const base::android::JavaParamRef<jobject>& jcaller) { |
| 56 PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs(); |
| 57 constexpr int pref_count = arraysize(backed_up_preferences_); |
| 58 jboolean values[pref_count]; |
| 59 |
| 60 for (int i = 0; i < pref_count; i++) { |
| 61 values[i] = prefs->GetBoolean(backed_up_preferences_[i]); |
| 62 } |
| 63 jbooleanArray array = env->NewBooleanArray(pref_count); |
| 64 env->SetBooleanArrayRegion(array, 0, pref_count, values); |
| 65 return base::android::ScopedJavaLocalRef<jbooleanArray>(env, array); |
| 66 } |
| 67 |
| 68 static void SetBoolBackupPrefs( |
| 69 JNIEnv* env, |
| 70 const base::android::JavaParamRef<jobject>& jcaller, |
| 71 const base::android::JavaParamRef<jobjectArray>& names, |
| 72 const base::android::JavaParamRef<jbooleanArray>& values) { |
| 73 std::vector<std::string> pref_names; |
| 74 base::android::AppendJavaStringArrayToStringVector(env, names, &pref_names); |
| 75 jboolean* pref_values = env->GetBooleanArrayElements(values, nullptr); |
| 76 std::unordered_set<std::string> valid_prefs( |
| 77 std::begin(backed_up_preferences_), std::end(backed_up_preferences_)); |
| 78 |
| 79 PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs(); |
| 80 for (unsigned int i = 0; i < pref_names.size(); i++) { |
| 81 if (valid_prefs.count(pref_names[i])) { |
| 82 prefs->SetBoolean(pref_names[i], pref_values[i]); |
| 83 } |
| 84 } |
| 85 prefs->CommitPendingWrite(); |
| 86 } |
| 87 |
| 88 namespace chrome { |
| 89 namespace android { |
| 90 |
| 91 std::vector<std::string> GetBackupPrefNames() { |
| 92 return std::vector<std::string>(std::begin(backed_up_preferences_), |
| 93 std::end(backed_up_preferences_)); |
| 94 } |
| 95 |
| 96 bool RegisterBackupAgent(JNIEnv* env) { |
| 97 return RegisterNativesImpl(env); |
| 98 } |
| 99 |
| 100 base::android::ScopedJavaLocalRef<jobjectArray> GetBoolBackupNamesForTesting( |
| 101 JNIEnv* env, |
| 102 const base::android::JavaParamRef<jobject>& jcaller) { |
| 103 return GetBoolBackupNames(env, jcaller); |
| 104 } |
| 105 |
| 106 base::android::ScopedJavaLocalRef<jbooleanArray> GetBoolBackupValuesForTesting( |
| 107 JNIEnv* env, |
| 108 const base::android::JavaParamRef<jobject>& jcaller) { |
| 109 return GetBoolBackupValues(env, jcaller); |
| 110 } |
| 111 |
| 112 void SetBoolBackupPrefsForTesting( |
| 113 JNIEnv* env, |
| 114 const base::android::JavaParamRef<jobject>& jcaller, |
| 115 const base::android::JavaParamRef<jobjectArray>& names, |
| 116 const base::android::JavaParamRef<jbooleanArray>& values) { |
| 117 SetBoolBackupPrefs(env, jcaller, names, values); |
| 118 } |
| 119 |
| 120 } // namespace android |
| 121 } // namespace chrome |
| OLD | NEW |