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

Side by Side Diff: chrome/browser/android/chrome_backup_agent.cc

Issue 2511713002: Implement Android key/value backup (Closed)
Patch Set: Created 4 years, 1 month 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
(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
OLDNEW
« no previous file with comments | « chrome/browser/android/chrome_backup_agent.h ('k') | chrome/browser/android/chrome_backup_agent_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698