blob: 9eb720833190497b24c5636bf71ea7036cc713af [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"
Avi Drissmand251e912018-12-26 15:46:3710#include "base/stl_util.h"
aberentd56b7ec2016-11-16 16:43:2711#include "chrome/browser/android/chrome_backup_agent.h"
12#include "chrome/browser/profiles/profile_manager.h"
Robert Ogden90c19df2019-03-22 20:15:4613#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h"
aberentd56b7ec2016-11-16 16:43:2714#include "components/prefs/pref_service.h"
15#include "components/sync/base/pref_names.h"
Finditddef7842019-06-22 02:15:1616#include "jni/ChromeBackupAgent_jni.h"
aberentd56b7ec2016-11-16 16:43:2717
18namespace {
19
20const char* backed_up_preferences_[] = {
Robert Ogden90c19df2019-03-22 20:15:4621 data_reduction_proxy::prefs::kDataSaverEnabled,
aberentd56b7ec2016-11-16 16:43:2722 syncer::prefs::kSyncFirstSetupComplete,
23 syncer::prefs::kSyncKeepEverythingSynced,
24 syncer::prefs::kSyncAutofillProfile,
25 syncer::prefs::kSyncAutofillWallet,
26 syncer::prefs::kSyncAutofillWalletMetadata,
27 syncer::prefs::kSyncAutofill,
28 syncer::prefs::kSyncBookmarks,
29 syncer::prefs::kSyncDeviceInfo,
30 syncer::prefs::kSyncFaviconImages,
31 syncer::prefs::kSyncFaviconTracking,
32 syncer::prefs::kSyncHistoryDeleteDirectives,
33 syncer::prefs::kSyncPasswords,
34 syncer::prefs::kSyncPreferences,
35 syncer::prefs::kSyncPriorityPreferences,
36 syncer::prefs::kSyncSessions,
37 syncer::prefs::kSyncSupervisedUserSettings,
38 syncer::prefs::kSyncSupervisedUserSharedSettings,
39 syncer::prefs::kSyncSupervisedUserWhitelists,
40 syncer::prefs::kSyncTabs,
41 syncer::prefs::kSyncTypedUrls,
42 syncer::prefs::kSyncSuppressStart,
43};
44
45} // namespace
46
Daniel Bratell7aacf952017-11-21 17:51:2547static base::android::ScopedJavaLocalRef<jobjectArray>
48JNI_ChromeBackupAgent_GetBoolBackupNames(
aberentd56b7ec2016-11-16 16:43:2749 JNIEnv* env,
50 const base::android::JavaParamRef<jobject>& jcaller) {
cm.sanchie965ca32017-11-20 12:46:2451 return base::android::ToJavaArrayOfStrings(env,
52 android::GetBackupPrefNames());
aberentd56b7ec2016-11-16 16:43:2753}
54
Daniel Bratell7aacf952017-11-21 17:51:2555static base::android::ScopedJavaLocalRef<jbooleanArray>
56JNI_ChromeBackupAgent_GetBoolBackupValues(
aberentd56b7ec2016-11-16 16:43:2757 JNIEnv* env,
58 const base::android::JavaParamRef<jobject>& jcaller) {
59 PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs();
Avi Drissmand251e912018-12-26 15:46:3760 constexpr int pref_count = base::size(backed_up_preferences_);
aberentd56b7ec2016-11-16 16:43:2761 jboolean values[pref_count];
62
63 for (int i = 0; i < pref_count; i++) {
64 values[i] = prefs->GetBoolean(backed_up_preferences_[i]);
65 }
66 jbooleanArray array = env->NewBooleanArray(pref_count);
67 env->SetBooleanArrayRegion(array, 0, pref_count, values);
68 return base::android::ScopedJavaLocalRef<jbooleanArray>(env, array);
69}
70
Daniel Bratell7aacf952017-11-21 17:51:2571static void JNI_ChromeBackupAgent_SetBoolBackupPrefs(
aberentd56b7ec2016-11-16 16:43:2772 JNIEnv* env,
73 const base::android::JavaParamRef<jobject>& jcaller,
74 const base::android::JavaParamRef<jobjectArray>& names,
75 const base::android::JavaParamRef<jbooleanArray>& values) {
76 std::vector<std::string> pref_names;
77 base::android::AppendJavaStringArrayToStringVector(env, names, &pref_names);
vitaliiif5491922017-05-15 09:11:0778 std::vector<bool> pref_values;
79 JavaBooleanArrayToBoolVector(env, values, &pref_values);
aberentd56b7ec2016-11-16 16:43:2780 std::unordered_set<std::string> valid_prefs(
81 std::begin(backed_up_preferences_), std::end(backed_up_preferences_));
82
83 PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs();
84 for (unsigned int i = 0; i < pref_names.size(); i++) {
85 if (valid_prefs.count(pref_names[i])) {
86 prefs->SetBoolean(pref_names[i], pref_values[i]);
87 }
88 }
89 prefs->CommitPendingWrite();
90}
91
aberentd56b7ec2016-11-16 16:43:2792namespace android {
93
94std::vector<std::string> GetBackupPrefNames() {
95 return std::vector<std::string>(std::begin(backed_up_preferences_),
96 std::end(backed_up_preferences_));
97}
98
aberentd56b7ec2016-11-16 16:43:2799base::android::ScopedJavaLocalRef<jobjectArray> GetBoolBackupNamesForTesting(
100 JNIEnv* env,
101 const base::android::JavaParamRef<jobject>& jcaller) {
Daniel Bratell7aacf952017-11-21 17:51:25102 return JNI_ChromeBackupAgent_GetBoolBackupNames(env, jcaller);
aberentd56b7ec2016-11-16 16:43:27103}
104
105base::android::ScopedJavaLocalRef<jbooleanArray> GetBoolBackupValuesForTesting(
106 JNIEnv* env,
107 const base::android::JavaParamRef<jobject>& jcaller) {
Daniel Bratell7aacf952017-11-21 17:51:25108 return JNI_ChromeBackupAgent_GetBoolBackupValues(env, jcaller);
aberentd56b7ec2016-11-16 16:43:27109}
110
111void SetBoolBackupPrefsForTesting(
112 JNIEnv* env,
113 const base::android::JavaParamRef<jobject>& jcaller,
114 const base::android::JavaParamRef<jobjectArray>& names,
115 const base::android::JavaParamRef<jbooleanArray>& values) {
Daniel Bratell7aacf952017-11-21 17:51:25116 JNI_ChromeBackupAgent_SetBoolBackupPrefs(env, jcaller, names, values);
aberentd56b7ec2016-11-16 16:43:27117}
118
119} // namespace android