blob: ba6b09e9ea3e93e66fe445b67227a1b1d0695f30 [file] [log] [blame]
aberentd56b7ec2016-11-16 16:43:271// 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
aberentd56b7ec2016-11-16 16:43:275#include <iterator>
6#include <string>
7#include <vector>
8
9#include "base/android/jni_array.h"
10#include "chrome/browser/android/chrome_backup_agent.h"
11#include "chrome/browser/profiles/profile_manager.h"
aberent07cbcdc2017-04-27 09:04:2512#include "chrome/common/pref_names.h"
aberentd56b7ec2016-11-16 16:43:2713#include "components/prefs/pref_service.h"
14#include "components/sync/base/pref_names.h"
15#include "jni/ChromeBackupAgent_jni.h"
16
17namespace {
18
19const char* backed_up_preferences_[] = {
aberent07cbcdc2017-04-27 09:04:2520 prefs::kDataSaverEnabled,
aberentd56b7ec2016-11-16 16:43:2721 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
Daniel Bratell7aacf952017-11-21 17:51:2546static base::android::ScopedJavaLocalRef<jobjectArray>
47JNI_ChromeBackupAgent_GetBoolBackupNames(
aberentd56b7ec2016-11-16 16:43:2748 JNIEnv* env,
49 const base::android::JavaParamRef<jobject>& jcaller) {
cm.sanchie965ca32017-11-20 12:46:2450 return base::android::ToJavaArrayOfStrings(env,
51 android::GetBackupPrefNames());
aberentd56b7ec2016-11-16 16:43:2752}
53
Daniel Bratell7aacf952017-11-21 17:51:2554static base::android::ScopedJavaLocalRef<jbooleanArray>
55JNI_ChromeBackupAgent_GetBoolBackupValues(
aberentd56b7ec2016-11-16 16:43:2756 JNIEnv* env,
57 const base::android::JavaParamRef<jobject>& jcaller) {
58 PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs();
59 constexpr int pref_count = arraysize(backed_up_preferences_);
60 jboolean values[pref_count];
61
62 for (int i = 0; i < pref_count; i++) {
63 values[i] = prefs->GetBoolean(backed_up_preferences_[i]);
64 }
65 jbooleanArray array = env->NewBooleanArray(pref_count);
66 env->SetBooleanArrayRegion(array, 0, pref_count, values);
67 return base::android::ScopedJavaLocalRef<jbooleanArray>(env, array);
68}
69
Daniel Bratell7aacf952017-11-21 17:51:2570static void JNI_ChromeBackupAgent_SetBoolBackupPrefs(
aberentd56b7ec2016-11-16 16:43:2771 JNIEnv* env,
72 const base::android::JavaParamRef<jobject>& jcaller,
73 const base::android::JavaParamRef<jobjectArray>& names,
74 const base::android::JavaParamRef<jbooleanArray>& values) {
75 std::vector<std::string> pref_names;
76 base::android::AppendJavaStringArrayToStringVector(env, names, &pref_names);
vitaliiif5491922017-05-15 09:11:0777 std::vector<bool> pref_values;
78 JavaBooleanArrayToBoolVector(env, values, &pref_values);
aberentd56b7ec2016-11-16 16:43:2779 std::unordered_set<std::string> valid_prefs(
80 std::begin(backed_up_preferences_), std::end(backed_up_preferences_));
81
82 PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs();
83 for (unsigned int i = 0; i < pref_names.size(); i++) {
84 if (valid_prefs.count(pref_names[i])) {
85 prefs->SetBoolean(pref_names[i], pref_values[i]);
86 }
87 }
88 prefs->CommitPendingWrite();
89}
90
aberentd56b7ec2016-11-16 16:43:2791namespace android {
92
93std::vector<std::string> GetBackupPrefNames() {
94 return std::vector<std::string>(std::begin(backed_up_preferences_),
95 std::end(backed_up_preferences_));
96}
97
aberentd56b7ec2016-11-16 16:43:2798base::android::ScopedJavaLocalRef<jobjectArray> GetBoolBackupNamesForTesting(
99 JNIEnv* env,
100 const base::android::JavaParamRef<jobject>& jcaller) {
Daniel Bratell7aacf952017-11-21 17:51:25101 return JNI_ChromeBackupAgent_GetBoolBackupNames(env, jcaller);
aberentd56b7ec2016-11-16 16:43:27102}
103
104base::android::ScopedJavaLocalRef<jbooleanArray> GetBoolBackupValuesForTesting(
105 JNIEnv* env,
106 const base::android::JavaParamRef<jobject>& jcaller) {
Daniel Bratell7aacf952017-11-21 17:51:25107 return JNI_ChromeBackupAgent_GetBoolBackupValues(env, jcaller);
aberentd56b7ec2016-11-16 16:43:27108}
109
110void SetBoolBackupPrefsForTesting(
111 JNIEnv* env,
112 const base::android::JavaParamRef<jobject>& jcaller,
113 const base::android::JavaParamRef<jobjectArray>& names,
114 const base::android::JavaParamRef<jbooleanArray>& values) {
Daniel Bratell7aacf952017-11-21 17:51:25115 JNI_ChromeBackupAgent_SetBoolBackupPrefs(env, jcaller, names, values);
aberentd56b7ec2016-11-16 16:43:27116}
117
118} // namespace android