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

Side by Side Diff: chrome/browser/android/preferences/pref_service_bridge.cc

Issue 666063002: [Android] Upstream ChromeNativePreferences as PrefServiceBridge (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months 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 2014 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 "chrome/browser/android/preferences/pref_service_bridge.h"
6
7 #include <jni.h>
8
9 #include "base/android/build_info.h"
10 #include "base/android/jni_android.h"
11 #include "base/android/jni_string.h"
12 #include "base/android/jni_weak_ref.h"
13 #include "base/files/file_path.h"
14 #include "base/files/file_util.h"
15 #include "base/memory/scoped_ptr.h"
16 #include "base/prefs/pref_service.h"
17 #include "base/strings/string_util.h"
18 #include "base/values.h"
19 #include "chrome/browser/browser_process.h"
20 #include "chrome/browser/browsing_data/browsing_data_helper.h"
21 #include "chrome/browser/browsing_data/browsing_data_remover.h"
22 #include "chrome/browser/content_settings/host_content_settings_map.h"
23 #include "chrome/browser/net/prediction_options.h"
24 #include "chrome/browser/prefs/incognito_mode_prefs.h"
25 #include "chrome/browser/profiles/profile_manager.h"
26 #include "chrome/browser/translate/chrome_translate_client.h"
27 #include "chrome/browser/ui/android/android_about_app_info.h"
28 #include "chrome/common/chrome_version_info.h"
29 #include "chrome/common/pref_names.h"
30 #include "chrome/grit/locale_settings.h"
31 #include "components/content_settings/core/common/content_settings.h"
32 #include "components/content_settings/core/common/content_settings_pattern.h"
33 #include "components/password_manager/core/common/password_manager_pref_names.h"
34 #include "components/translate/core/browser/translate_prefs.h"
35 #include "components/translate/core/common/translate_pref_names.h"
36 #include "content/public/browser/browser_thread.h"
37 #include "content/public/common/user_agent.h"
38 #include "jni/PrefServiceBridge_jni.h"
39 #include "ui/base/l10n/l10n_util.h"
40
41 using base::android::AttachCurrentThread;
42 using base::android::CheckException;
43 using base::android::ConvertJavaStringToUTF8;
44 using base::android::ConvertUTF8ToJavaString;
45 using base::android::ScopedJavaLocalRef;
46 using content::BrowserThread;
47
48 namespace {
49
50 enum NetworkPredictionOptions {
51 NETWORK_PREDICTION_ALWAYS,
52 NETWORK_PREDICTION_WIFI_ONLY,
53 NETWORK_PREDICTION_NEVER,
54 };
55
56 Profile* GetOriginalProfile() {
57 return ProfileManager::GetActiveUserProfile()->GetOriginalProfile();
58 }
59
60 bool GetBooleanForContentSetting(HostContentSettingsMap* content_settings,
61 ContentSettingsType type) {
62 switch (content_settings->GetDefaultContentSetting(type, NULL)) {
63 case CONTENT_SETTING_BLOCK:
64 return false;
65 case CONTENT_SETTING_ALLOW:
66 return true;
67 case CONTENT_SETTING_ASK:
68 default:
69 return true;
70 }
71 }
72
73 std::string GetStringForContentSettingsType(
74 ContentSetting content_setting) {
75 switch (content_setting) {
76 case CONTENT_SETTING_BLOCK:
77 return "block";
78 case CONTENT_SETTING_ALLOW:
79 return "allow";
80 case CONTENT_SETTING_ASK:
81 return "ask";
82 case CONTENT_SETTING_SESSION_ONLY:
83 return "session";
84 case CONTENT_SETTING_NUM_SETTINGS:
85 return "num_settings";
86 case CONTENT_SETTING_DEFAULT:
87 default:
88 return "default";
89 }
90 }
91
92 bool IsContentSettingManaged(HostContentSettingsMap* content_settings,
93 ContentSettingsType content_settings_type) {
94 std::string source;
95 content_settings->GetDefaultContentSetting(content_settings_type, &source);
96 HostContentSettingsMap::ProviderType provider =
97 content_settings->GetProviderTypeFromSource(source);
98 return provider == HostContentSettingsMap::POLICY_PROVIDER;
99 }
100
101 void ReturnAbsoluteProfilePathValue(std::string path_value) {
102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
103 JNIEnv* env = AttachCurrentThread();
104 ScopedJavaLocalRef<jstring> j_path_value =
105 ConvertUTF8ToJavaString(env, path_value);
106 Java_PrefServiceBridge_setProfilePathValue(env, j_path_value.obj());
107 }
108
109 void GetAbsolutePath(Profile* profile) {
110 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
111 if (profile) {
112 base::FilePath profile_path = profile->GetPath();
113 profile_path = base::MakeAbsoluteFilePath(profile_path);
114 if (!profile_path.empty()) {
115 BrowserThread::PostTask(
116 BrowserThread::UI, FROM_HERE,
117 base::Bind(&ReturnAbsoluteProfilePathValue, profile_path.value()));
118 }
119 }
120 }
121
122 PrefService* GetPrefService() {
123 return GetOriginalProfile()->GetPrefs();
124 }
125
126 static void EnsureConsistentGeolocationPreferences(Profile* profile) {
127 // On Android, we use the kGeolocationEnabled flag to control geolocation on a
128 // global basis, rather than the default geolocation host content setting,
129 // which is only used if no previously stored more specific host exception
130 // cannot be found.
131 //
132 // On Android, there is currently no UI to change this default setting, so it
133 // needs to default to ASK. Additionally, for users that have previously set
134 // the default to BLOCK, we set the preference to disable geolocation
135 // globally.
136
137 ContentSetting defaultSetting = profile->GetHostContentSettingsMap()->
138 GetDefaultContentSetting(CONTENT_SETTINGS_TYPE_GEOLOCATION, NULL);
139
140 if (defaultSetting == CONTENT_SETTING_ASK)
141 return;
142
143 profile->GetHostContentSettingsMap()->SetDefaultContentSetting(
144 CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTING_ASK);
145
146 if (defaultSetting == CONTENT_SETTING_BLOCK) {
147 profile->GetPrefs()->SetBoolean(prefs::kGeolocationEnabled, false);
148 }
149 }
150
151 static void EnsureConsistentProtectedMediaIdentifierPreferences(
152 Profile* profile) {
153 // We use the kProtectedMediaIdentifierEnabled flag to control protected media
154 // identifier on a global basis.
155 //
156 // On Android, there is currently no UI to change this default setting, so it
157 // needs to default to ASK. Additionally, for users that have previously set
158 // the default to BLOCK, we set the preference to disable protected media
159 // identifier globally.
160 ContentSetting defaultSetting =
161 profile->GetHostContentSettingsMap()->
162 GetDefaultContentSetting(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER,
163 NULL);
164
165 if (defaultSetting == CONTENT_SETTING_ASK)
166 return;
167
168 profile->GetHostContentSettingsMap()->SetDefaultContentSetting(
169 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, CONTENT_SETTING_ASK);
170
171 if (defaultSetting == CONTENT_SETTING_BLOCK) {
172 profile->GetPrefs()->SetBoolean(prefs::kProtectedMediaIdentifierEnabled,
173 false);
174 }
175 }
176
177 } // namespace
178
179 // ----------------------------------------------------------------------------
180 // Native JNI methods
181 // ----------------------------------------------------------------------------
182
183 static jboolean GetAcceptCookiesEnabled(JNIEnv* env, jobject obj) {
184 return GetBooleanForContentSetting(
185 GetOriginalProfile()->GetHostContentSettingsMap(),
186 CONTENT_SETTINGS_TYPE_COOKIES);
187 }
188
189 static jboolean GetAcceptCookiesManaged(JNIEnv* env, jobject obj) {
190 return IsContentSettingManaged(
191 GetOriginalProfile()->GetHostContentSettingsMap(),
192 CONTENT_SETTINGS_TYPE_COOKIES);
193 }
194
195 static jboolean GetRememberPasswordsEnabled(JNIEnv* env, jobject obj) {
196 return GetPrefService()->GetBoolean(
197 password_manager::prefs::kPasswordManagerSavingEnabled);
198 }
199
200 static jboolean GetRememberPasswordsManaged(JNIEnv* env, jobject obj) {
201 return GetPrefService()->IsManagedPreference(
202 password_manager::prefs::kPasswordManagerSavingEnabled);
203 }
204
205 static jboolean GetDoNotTrackEnabled(JNIEnv* env, jobject obj) {
206 return GetPrefService()->GetBoolean(prefs::kEnableDoNotTrack);
207 }
208
209 static jint GetNetworkPredictionOptions(JNIEnv* env, jobject obj) {
210 return GetPrefService()->GetInteger(prefs::kNetworkPredictionOptions);
211 }
212
213 static jboolean GetNetworkPredictionManaged(JNIEnv* env, jobject obj) {
214 return GetPrefService()->IsManagedPreference(
215 prefs::kNetworkPredictionOptions);
216 }
217
218 static jboolean GetPasswordEchoEnabled(JNIEnv* env, jobject obj) {
219 return GetPrefService()->GetBoolean(prefs::kWebKitPasswordEchoEnabled);
220 }
221
222 static jboolean GetPrintingEnabled(JNIEnv* env, jobject obj) {
223 return GetPrefService()->IsManagedPreference(prefs::kPrintingEnabled);
224 }
225
226 static jboolean GetTranslateEnabled(JNIEnv* env, jobject obj) {
227 return GetPrefService()->GetBoolean(prefs::kEnableTranslate);
228 }
229
230 static jboolean GetTranslateManaged(JNIEnv* env, jobject obj) {
231 return GetPrefService()->IsManagedPreference(prefs::kEnableTranslate);
232 }
233
234 static jboolean GetSearchSuggestEnabled(JNIEnv* env, jobject obj) {
235 return GetPrefService()->GetBoolean(prefs::kSearchSuggestEnabled);
236 }
237
238 static jboolean GetSearchSuggestManaged(JNIEnv* env, jobject obj) {
239 return GetPrefService()->IsManagedPreference(prefs::kSearchSuggestEnabled);
240 }
241
242 static jboolean GetProtectedMediaIdentifierEnabled(JNIEnv* env, jobject obj) {
243 Profile* profile = GetOriginalProfile();
244 EnsureConsistentProtectedMediaIdentifierPreferences(profile);
245 return GetPrefService()->GetBoolean(prefs::kProtectedMediaIdentifierEnabled);
246 }
247
248 static jboolean GetAllowLocationEnabled(JNIEnv* env, jobject obj) {
249 Profile* profile = GetOriginalProfile();
250 EnsureConsistentGeolocationPreferences(profile);
251 return GetPrefService()->GetBoolean(prefs::kGeolocationEnabled);
252 }
253
254 static jboolean GetAllowLocationManaged(JNIEnv* env, jobject obj) {
255 return IsContentSettingManaged(
256 GetOriginalProfile()->GetHostContentSettingsMap(),
257 CONTENT_SETTINGS_TYPE_GEOLOCATION);
258 }
259
260 static jboolean GetResolveNavigationErrorEnabled(JNIEnv* env, jobject obj) {
261 return GetPrefService()->GetBoolean(prefs::kAlternateErrorPagesEnabled);
262 }
263
264 static jboolean GetResolveNavigationErrorManaged(JNIEnv* env, jobject obj) {
265 return GetPrefService()->IsManagedPreference(
266 prefs::kAlternateErrorPagesEnabled);
267 }
268
269 static jboolean GetCrashReportManaged(JNIEnv* env, jobject obj) {
270 return GetPrefService()->IsManagedPreference(
271 prefs::kCrashReportingEnabled);
272 }
273
274 static jboolean GetForceSafeSearch(JNIEnv* env, jobject obj) {
275 return GetPrefService()->GetBoolean(prefs::kForceSafeSearch);
276 }
277
278 static jint GetDefaultSupervisedUserFilteringBehavior(JNIEnv* env,
279 jobject obj) {
280 return GetPrefService()->GetInteger(
281 prefs::kDefaultSupervisedUserFilteringBehavior);
282 }
283
284 static jboolean GetIncognitoModeEnabled(JNIEnv* env, jobject obj) {
285 PrefService* prefs = GetPrefService();
286 IncognitoModePrefs::Availability incognito_pref =
287 IncognitoModePrefs::GetAvailability(prefs);
288 DCHECK(incognito_pref == IncognitoModePrefs::ENABLED ||
289 incognito_pref == IncognitoModePrefs::DISABLED) <<
290 "Unsupported incognito mode preference: " << incognito_pref;
291 return incognito_pref != IncognitoModePrefs::DISABLED;
292 }
293
294 static jboolean GetIncognitoModeManaged(JNIEnv* env, jobject obj) {
295 return GetPrefService()->IsManagedPreference(
296 prefs::kIncognitoModeAvailability);
297 }
298
299 namespace {
300
301 // Redirects a BrowsingDataRemover completion callback back into Java.
302 class ClearBrowsingDataObserver : public BrowsingDataRemover::Observer {
303 public:
304 // |obj| is expected to be the object passed into ClearBrowsingData(); e.g. a
305 // ChromePreference.
306 ClearBrowsingDataObserver(JNIEnv* env, jobject obj)
307 : weak_chrome_native_preferences_(env, obj) {
308 }
309
310 virtual void OnBrowsingDataRemoverDone() override {
311 // Just as a BrowsingDataRemover deletes itself when done, we delete ourself
312 // when done. No need to remove ourself as an observer given the lifetime
313 // of BrowsingDataRemover.
314 scoped_ptr<ClearBrowsingDataObserver> auto_delete(this);
315
316 JNIEnv* env = AttachCurrentThread();
317 if (weak_chrome_native_preferences_.get(env).is_null())
318 return;
319
320 Java_PrefServiceBridge_browsingDataCleared(
321 env, weak_chrome_native_preferences_.get(env).obj());
322 }
323
324 private:
325 JavaObjectWeakGlobalRef weak_chrome_native_preferences_;
326 };
327 } // namespace
328
329 static void ClearBrowsingData(JNIEnv* env, jobject obj, jboolean history,
330 jboolean cache, jboolean cookies_and_site_data, jboolean passwords,
331 jboolean form_data) {
332 // BrowsingDataRemover deletes itself.
333 BrowsingDataRemover* browsing_data_remover =
334 BrowsingDataRemover::CreateForPeriod(
335 GetOriginalProfile(),
336 static_cast<BrowsingDataRemover::TimePeriod>(
337 BrowsingDataRemover::EVERYTHING));
338 browsing_data_remover->AddObserver(new ClearBrowsingDataObserver(env, obj));
339
340 int remove_mask = 0;
341 if (history)
342 remove_mask |= BrowsingDataRemover::REMOVE_HISTORY;
343 if (cache)
344 remove_mask |= BrowsingDataRemover::REMOVE_CACHE;
345 if (cookies_and_site_data) {
346 remove_mask |= BrowsingDataRemover::REMOVE_COOKIES;
347 remove_mask |= BrowsingDataRemover::REMOVE_SITE_DATA;
348 }
349 if (passwords)
350 remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS;
351 if (form_data)
352 remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA;
353 browsing_data_remover->Remove(remove_mask,
354 BrowsingDataHelper::UNPROTECTED_WEB);
355 }
356
357 static jboolean GetAllowCookiesEnabled(JNIEnv* env, jobject obj) {
358 HostContentSettingsMap* content_settings =
359 GetOriginalProfile()->GetHostContentSettingsMap();
360 return GetBooleanForContentSetting(
361 content_settings, CONTENT_SETTINGS_TYPE_COOKIES);
362 }
363
364 static void SetAllowCookiesEnabled(JNIEnv* env, jobject obj, jboolean allow) {
365 HostContentSettingsMap* host_content_settings_map =
366 GetOriginalProfile()->GetHostContentSettingsMap();
367 host_content_settings_map->SetDefaultContentSetting(
368 CONTENT_SETTINGS_TYPE_COOKIES,
369 allow ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK);
370 }
371
372 static void SetRememberPasswordsEnabled(JNIEnv* env, jobject obj,
373 jboolean allow) {
374 GetPrefService()->SetBoolean(
375 password_manager::prefs::kPasswordManagerSavingEnabled, allow);
376 }
377
378 static void SetProtectedMediaIdentifierEnabled(JNIEnv* env,
379 jobject obj,
380 jboolean is_enabled) {
381 GetPrefService()->SetBoolean(prefs::kProtectedMediaIdentifierEnabled,
382 is_enabled);
383 }
384
385 static void SetAllowLocationEnabled(JNIEnv* env, jobject obj, jboolean allow) {
386 GetPrefService()->SetBoolean(prefs::kGeolocationEnabled, allow);
387 }
388
389 static void SetCrashReporting(JNIEnv* env, jobject obj, jboolean reporting) {
390 PrefService* local_state = g_browser_process->local_state();
391 local_state->SetBoolean(prefs::kCrashReportingEnabled, reporting);
392 }
393
394 static jboolean CanPredictNetworkActions(JNIEnv* env, jobject obj) {
395 return chrome_browser_net::CanPrefetchAndPrerenderUI(GetPrefService());
396 }
397
398 static void SetDoNotTrackEnabled(JNIEnv* env, jobject obj, jboolean allow) {
399 GetPrefService()->SetBoolean(prefs::kEnableDoNotTrack, allow);
400 }
401
402 static jstring GetSyncLastAccountName(JNIEnv* env, jobject obj) {
403 return ConvertUTF8ToJavaString(
404 env, GetPrefService()->GetString(prefs::kGoogleServicesLastUsername))
405 .Release();
406 }
407
408 static void SetTranslateEnabled(JNIEnv* env, jobject obj, jboolean enabled) {
409 GetPrefService()->SetBoolean(prefs::kEnableTranslate, enabled);
410 }
411
412 static void ResetTranslateDefaults(JNIEnv* env, jobject obj) {
413 scoped_ptr<translate::TranslatePrefs> translate_prefs =
414 ChromeTranslateClient::CreateTranslatePrefs(GetPrefService());
415 translate_prefs->ResetToDefaults();
416 }
417
418 static jboolean GetJavaScriptManaged(JNIEnv* env, jobject obj) {
419 HostContentSettingsMap* content_settings =
420 GetOriginalProfile()->GetHostContentSettingsMap();
421 return IsContentSettingManaged(
422 content_settings, CONTENT_SETTINGS_TYPE_JAVASCRIPT);
423 }
424
425 static void SetJavaScriptEnabled(JNIEnv* env, jobject obj, jboolean enabled) {
426 GetPrefService()->SetBoolean(prefs::kWebKitJavascriptEnabled, enabled);
427 }
428
429 static jboolean GetJavaScriptEnabled(JNIEnv* env, jobject obj) {
430 // The user pref for Javascript is stored in kWebKitJavascriptEnabled for
431 // historical reasons, but the content setting is where a possibly managed
432 // value will be enforced.
433 HostContentSettingsMap* content_settings =
434 GetOriginalProfile()->GetHostContentSettingsMap();
435
436 jboolean javascript_enabled = GetBooleanForContentSetting(
437 content_settings, CONTENT_SETTINGS_TYPE_JAVASCRIPT);
438 if (!GetJavaScriptManaged(env, obj)) {
439 javascript_enabled &= GetPrefService()->GetBoolean(
440 prefs::kWebKitJavascriptEnabled);
441 }
442 return javascript_enabled;
443 }
444
445 static void SetPasswordEchoEnabled(JNIEnv* env,
446 jobject obj,
447 jboolean passwordEchoEnabled) {
448 GetPrefService()->SetBoolean(prefs::kWebKitPasswordEchoEnabled,
449 passwordEchoEnabled);
450 }
451
452 static jboolean GetAllowPopupsEnabled(JNIEnv* env, jobject obj) {
453 HostContentSettingsMap* content_settings =
454 GetOriginalProfile()->GetHostContentSettingsMap();
455 return GetBooleanForContentSetting(content_settings,
456 CONTENT_SETTINGS_TYPE_POPUPS);
457 }
458
459 static jboolean GetAllowPopupsManaged(JNIEnv* env, jobject obj) {
460 HostContentSettingsMap* content_settings =
461 GetOriginalProfile()->GetHostContentSettingsMap();
462 return IsContentSettingManaged(content_settings,
463 CONTENT_SETTINGS_TYPE_POPUPS);
464 }
465
466 static void SetAllowPopupsEnabled(JNIEnv* env, jobject obj, jboolean allow) {
467 HostContentSettingsMap* host_content_settings_map =
468 GetOriginalProfile()->GetHostContentSettingsMap();
469 host_content_settings_map->SetDefaultContentSetting(
470 CONTENT_SETTINGS_TYPE_POPUPS,
471 allow ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK);
472 }
473
474 static jboolean GetAutologinEnabled(JNIEnv* env, jobject obj) {
475 return GetPrefService()->GetBoolean(prefs::kAutologinEnabled);
476 }
477
478 static void SetAutologinEnabled(JNIEnv* env, jobject obj,
479 jboolean autologinEnabled) {
480 GetPrefService()->SetBoolean(prefs::kAutologinEnabled, autologinEnabled);
481 }
482
483 static void SetPopupException(JNIEnv* env, jobject obj, jstring pattern,
484 jboolean allow) {
485 HostContentSettingsMap* host_content_settings_map =
486 GetOriginalProfile()->GetHostContentSettingsMap();
487 host_content_settings_map->SetContentSetting(
488 ContentSettingsPattern::FromString(ConvertJavaStringToUTF8(env, pattern)),
489 ContentSettingsPattern::Wildcard(),
490 CONTENT_SETTINGS_TYPE_POPUPS,
491 "",
492 allow ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK);
493 }
494
495 static void RemovePopupException(JNIEnv* env, jobject obj, jstring pattern) {
496 HostContentSettingsMap* host_content_settings_map =
497 GetOriginalProfile()->GetHostContentSettingsMap();
498 host_content_settings_map->SetContentSetting(
499 ContentSettingsPattern::FromString(ConvertJavaStringToUTF8(env, pattern)),
500 ContentSettingsPattern::Wildcard(),
501 CONTENT_SETTINGS_TYPE_POPUPS,
502 "",
503 CONTENT_SETTING_DEFAULT);
504 }
505
506 static void GetPopupExceptions(JNIEnv* env, jobject obj, jobject list) {
507 HostContentSettingsMap* host_content_settings_map =
508 GetOriginalProfile()->GetHostContentSettingsMap();
509 ContentSettingsForOneType entries;
510 host_content_settings_map->GetSettingsForOneType(
511 CONTENT_SETTINGS_TYPE_POPUPS, "", &entries);
512 for (size_t i = 0; i < entries.size(); ++i) {
513 Java_PrefServiceBridge_insertPopupExceptionToList(
514 env, list,
515 ConvertUTF8ToJavaString(
516 env, entries[i].primary_pattern.ToString()).obj(),
517 ConvertUTF8ToJavaString(
518 env, GetStringForContentSettingsType(entries[i].setting)).obj(),
519 ConvertUTF8ToJavaString(env, entries[i].source).obj());
520 }
521 }
522
523 static void SetSearchSuggestEnabled(JNIEnv* env, jobject obj,
524 jboolean enabled) {
525 GetPrefService()->SetBoolean(prefs::kSearchSuggestEnabled, enabled);
526 }
527
528 static jstring GetContextualSearchPreference(JNIEnv* env, jobject obj) {
529 return ConvertUTF8ToJavaString(
530 env, GetPrefService()->GetString(prefs::kContextualSearchEnabled)).
531 Release();
532 }
533
534 static void SetContextualSearchPreference(JNIEnv* env, jobject obj,
535 jstring pref) {
536 GetPrefService()->SetString(prefs::kContextualSearchEnabled,
537 ConvertJavaStringToUTF8(env, pref));
538 }
539
540 static void SetNetworkPredictionOptions(JNIEnv* env, jobject obj, int option) {
541 GetPrefService()->SetInteger(prefs::kNetworkPredictionOptions, option);
542 }
543
544 static jboolean NetworkPredictionEnabledHasUserSetting(JNIEnv* env,
545 jobject obj) {
546 return GetPrefService()->GetUserPrefValue(
547 prefs::kNetworkPredictionEnabled) != NULL;
548 }
549
550 static jboolean NetworkPredictionOptionsHasUserSetting(JNIEnv* env,
551 jobject obj) {
552 return GetPrefService()->GetUserPrefValue(
553 prefs::kNetworkPredictionOptions) != NULL;
554 }
555
556 static jboolean GetNetworkPredictionEnabledUserPrefValue(JNIEnv* env,
557 jobject obj) {
558 const base::Value* network_prediction_enabled =
559 GetPrefService()->GetUserPrefValue(prefs::kNetworkPredictionEnabled);
560 DCHECK(network_prediction_enabled);
561 bool value = false;
562 DCHECK(network_prediction_enabled->GetAsBoolean(&value));
563 return value;
564 }
565
566 static void SetResolveNavigationErrorEnabled(JNIEnv* env, jobject obj,
567 jboolean enabled) {
568 GetPrefService()->SetBoolean(prefs::kAlternateErrorPagesEnabled, enabled);
569 }
570
571 static jboolean GetFirstRunEulaAccepted(JNIEnv* env, jobject obj) {
572 return g_browser_process->local_state()->GetBoolean(prefs::kEulaAccepted);
573 }
574
575 static void SetEulaAccepted(JNIEnv* env, jobject obj) {
576 g_browser_process->local_state()->SetBoolean(prefs::kEulaAccepted, true);
577 }
578
579 static void ResetAcceptLanguages(JNIEnv* env,
580 jobject obj,
581 jstring default_locale) {
582 std::string accept_languages(l10n_util::GetStringUTF8(IDS_ACCEPT_LANGUAGES));
583 std::string locale_string(ConvertJavaStringToUTF8(env, default_locale));
584
585 PrependToAcceptLanguagesIfNecessary(locale_string, &accept_languages);
586 GetPrefService()->SetString(prefs::kAcceptLanguages, accept_languages);
587 }
588
589 void PrependToAcceptLanguagesIfNecessary(std::string locale,
590 std::string* accept_languages) {
591 if (locale.size() != 5u || locale[2] != '_') // not well-formed
592 return;
593
594 std::string language(locale.substr(0, 2));
595 std::string region(locale.substr(3, 2));
596
597 // Java mostly follows ISO-639-1 and ICU, except for the following three.
598 // See documentation on java.util.Locale constructor for more.
599 if (language == "iw") {
600 language = "he";
601 } else if (language == "ji") {
602 language = "yi";
603 } else if (language == "in") {
604 language = "id";
605 }
606
607 std::string language_region(language + "-" + region);
608
609 if (accept_languages->find(language_region) == std::string::npos) {
610 std::vector<std::string> parts;
611 parts.push_back(language_region);
612 // If language is not in the accept languages list, also add language code.
613 if (accept_languages->find(language + ",") == std::string::npos &&
614 !std::equal(language.rbegin(), language.rend(),
615 accept_languages->rbegin()))
616 parts.push_back(language);
617 parts.push_back(*accept_languages);
618 *accept_languages = JoinString(parts, ',');
619 }
620 }
621
622 // Sends all information about the different versions to Java.
623 // From browser_about_handler.cc
624 static jobject GetAboutVersionStrings(JNIEnv* env, jobject obj) {
625 chrome::VersionInfo version_info;
626 std::string os_version = version_info.OSType();
627 os_version += " " + AndroidAboutAppInfo::GetOsInfo();
628
629 base::android::BuildInfo* android_build_info =
630 base::android::BuildInfo::GetInstance();
631 std::string application(android_build_info->package_label());
632 application.append(" ");
633 application.append(version_info.Version());
634
635 // OK to release, returning to Java.
636 return Java_PrefServiceBridge_createAboutVersionStrings(
637 env,
638 ConvertUTF8ToJavaString(env, application).obj(),
639 ConvertUTF8ToJavaString(env, content::GetWebKitVersion()).obj(),
640 ConvertUTF8ToJavaString(
641 env, AndroidAboutAppInfo::GetJavaScriptVersion()).obj(),
642 ConvertUTF8ToJavaString(env, os_version).obj()).Release();
643 }
644
645 static void SetPathValuesForAboutChrome(JNIEnv* env, jobject obj) {
646 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
647 base::Bind(&GetAbsolutePath, GetOriginalProfile()));
648 }
649
650 static jstring GetSupervisedUserCustodianName(JNIEnv* env, jobject obj) {
651 return ConvertUTF8ToJavaString(
652 env, GetPrefService()->GetString(prefs::kSupervisedUserCustodianName))
653 .Release();
654 }
655
656 static jstring GetSupervisedUserCustodianEmail(JNIEnv* env, jobject obj) {
657 return ConvertUTF8ToJavaString(
658 env, GetPrefService()->GetString(prefs::kSupervisedUserCustodianEmail))
659 .Release();
660 }
661
662 static jstring GetSupervisedUserCustodianProfileImageURL(JNIEnv* env,
663 jobject obj) {
664 return ConvertUTF8ToJavaString(
665 env,
666 GetPrefService()->GetString(
667 prefs::kSupervisedUserCustodianProfileImageURL)).Release();
668 }
669
670 static jstring GetSupervisedUserSecondCustodianName(JNIEnv* env, jobject obj) {
671 return ConvertUTF8ToJavaString(
672 env,
673 GetPrefService()->GetString(prefs::kSupervisedUserSecondCustodianName))
674 .Release();
675 }
676
677 static jstring GetSupervisedUserSecondCustodianEmail(JNIEnv* env, jobject obj) {
678 return ConvertUTF8ToJavaString(
679 env,
680 GetPrefService()->GetString(prefs::kSupervisedUserSecondCustodianEmail))
681 .Release();
682 }
683
684 static jstring GetSupervisedUserSecondCustodianProfileImageURL(JNIEnv* env,
685 jobject obj) {
686 return ConvertUTF8ToJavaString(
687 env,
688 GetPrefService()->GetString(
689 prefs::kSupervisedUserSecondCustodianProfileImageURL)).Release();
690 }
691
692 bool RegisterPrefServiceBridge(JNIEnv* env) {
693 return RegisterNativesImpl(env);
694 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698