OLD | NEW |
(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 } |
OLD | NEW |