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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/android/chrome_backup_agent.cc
diff --git a/chrome/browser/android/chrome_backup_agent.cc b/chrome/browser/android/chrome_backup_agent.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e04d413918eada4097ec67a5a56be59c95f2fe5e
--- /dev/null
+++ b/chrome/browser/android/chrome_backup_agent.cc
@@ -0,0 +1,121 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <jni.h>
+
+#include <iterator>
+#include <string>
+#include <vector>
+
+#include "base/android/jni_array.h"
+#include "chrome/browser/android/chrome_backup_agent.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "components/prefs/pref_service.h"
+#include "components/sync/base/pref_names.h"
+#include "jni/ChromeBackupAgent_jni.h"
+
+namespace {
+
+const char* backed_up_preferences_[] = {
+ syncer::prefs::kSyncFirstSetupComplete,
+ syncer::prefs::kSyncKeepEverythingSynced,
+ syncer::prefs::kSyncAutofillProfile,
+ syncer::prefs::kSyncAutofillWallet,
+ syncer::prefs::kSyncAutofillWalletMetadata,
+ syncer::prefs::kSyncAutofill,
+ syncer::prefs::kSyncBookmarks,
+ syncer::prefs::kSyncDeviceInfo,
+ syncer::prefs::kSyncFaviconImages,
+ syncer::prefs::kSyncFaviconTracking,
+ syncer::prefs::kSyncHistoryDeleteDirectives,
+ syncer::prefs::kSyncPasswords,
+ syncer::prefs::kSyncPreferences,
+ syncer::prefs::kSyncPriorityPreferences,
+ syncer::prefs::kSyncSessions,
+ syncer::prefs::kSyncSupervisedUserSettings,
+ syncer::prefs::kSyncSupervisedUserSharedSettings,
+ syncer::prefs::kSyncSupervisedUserWhitelists,
+ syncer::prefs::kSyncTabs,
+ syncer::prefs::kSyncTypedUrls,
+ syncer::prefs::kSyncSuppressStart,
+};
+
+} // namespace
+
+static base::android::ScopedJavaLocalRef<jobjectArray> GetBoolBackupNames(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcaller) {
+ return base::android::ToJavaArrayOfStrings(
+ env, chrome::android::GetBackupPrefNames());
+}
+
+static base::android::ScopedJavaLocalRef<jbooleanArray> GetBoolBackupValues(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcaller) {
+ PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs();
+ constexpr int pref_count = arraysize(backed_up_preferences_);
+ jboolean values[pref_count];
+
+ for (int i = 0; i < pref_count; i++) {
+ values[i] = prefs->GetBoolean(backed_up_preferences_[i]);
+ }
+ jbooleanArray array = env->NewBooleanArray(pref_count);
+ env->SetBooleanArrayRegion(array, 0, pref_count, values);
+ return base::android::ScopedJavaLocalRef<jbooleanArray>(env, array);
+}
+
+static void SetBoolBackupPrefs(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcaller,
+ const base::android::JavaParamRef<jobjectArray>& names,
+ const base::android::JavaParamRef<jbooleanArray>& values) {
+ std::vector<std::string> pref_names;
+ base::android::AppendJavaStringArrayToStringVector(env, names, &pref_names);
+ jboolean* pref_values = env->GetBooleanArrayElements(values, nullptr);
+ std::unordered_set<std::string> valid_prefs(
+ std::begin(backed_up_preferences_), std::end(backed_up_preferences_));
+
+ PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs();
+ for (unsigned int i = 0; i < pref_names.size(); i++) {
+ if (valid_prefs.count(pref_names[i])) {
+ prefs->SetBoolean(pref_names[i], pref_values[i]);
+ }
+ }
+ prefs->CommitPendingWrite();
+}
+
+namespace chrome {
+namespace android {
+
+std::vector<std::string> GetBackupPrefNames() {
+ return std::vector<std::string>(std::begin(backed_up_preferences_),
+ std::end(backed_up_preferences_));
+}
+
+bool RegisterBackupAgent(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
+base::android::ScopedJavaLocalRef<jobjectArray> GetBoolBackupNamesForTesting(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcaller) {
+ return GetBoolBackupNames(env, jcaller);
+}
+
+base::android::ScopedJavaLocalRef<jbooleanArray> GetBoolBackupValuesForTesting(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcaller) {
+ return GetBoolBackupValues(env, jcaller);
+}
+
+void SetBoolBackupPrefsForTesting(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcaller,
+ const base::android::JavaParamRef<jobjectArray>& names,
+ const base::android::JavaParamRef<jbooleanArray>& values) {
+ SetBoolBackupPrefs(env, jcaller, names, values);
+}
+
+} // namespace android
+} // namespace chrome
« 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