prefs_tab_helper.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/prefs/prefs_tab_helper.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/overlay_user_pref_store.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stringprintf.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_preferences_util.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_notification_types.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_font_webkit_names.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names_util.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/locale_settings.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/platform_locale_settings.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/icu/public/common/unicode/uchar.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/icu/public/common/unicode/uscript.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/glue/webpreferences.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DEFINE_WEB_CONTENTS_USER_DATA_KEY(PrefsTabHelper); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Registers prefs only used for migration. 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RegisterPrefsToMigrate(user_prefs::PrefRegistrySyncable* prefs) { 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitOldStandardFontFamily, 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_STANDARD_FONT_FAMILY, 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitOldFixedFontFamily, 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_FIXED_FONT_FAMILY, 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitOldSerifFontFamily, 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_SERIF_FONT_FAMILY, 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitOldSansSerifFontFamily, 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitOldCursiveFontFamily, 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_CURSIVE_FONT_FAMILY, 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitOldFantasyFontFamily, 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_FANTASY_FONT_FAMILY, 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kGlobalDefaultCharset, 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_ENCODING, 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedIntegerPref( 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalDefaultFontSize, 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_FONT_SIZE, 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedIntegerPref( 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalDefaultFixedFontSize, 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_FIXED_FONT_SIZE, 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedIntegerPref( 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalMinimumFontSize, 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_MINIMUM_FONT_SIZE, 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->RegisterLocalizedIntegerPref( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitGlobalMinimumLogicalFontSize, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_MINIMUM_LOGICAL_FONT_SIZE, 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalStandardFontFamily, 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_STANDARD_FONT_FAMILY, 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalFixedFontFamily, 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_FIXED_FONT_FAMILY, 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalSerifFontFamily, 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_SERIF_FONT_FAMILY, 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalSansSerifFontFamily, 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY, 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalCursiveFontFamily, 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_CURSIVE_FONT_FAMILY, 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->RegisterLocalizedStringPref( 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitGlobalFantasyFontFamily, 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_FANTASY_FONT_FAMILY, 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The list of prefs we want to observe. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kPrefsToObserve[] = { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kDefaultCharset, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitAllowDisplayingInsecureContent, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitAllowRunningInsecureContent, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitDefaultFixedFontSize, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitDefaultFontSize, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitFontScaleFactor, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitForceEnableZoom, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitJavascriptEnabled, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitJavaEnabled, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitLoadsImagesAutomatically, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitMinimumFontSize, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitMinimumLogicalFontSize, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitPluginsEnabled, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebkitTabsToLinks, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitUsesUniversalDetector 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kPrefsToObserveLength = arraysize(kPrefsToObserve); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Registers a preference under the path |pref_name| for each script used for 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// per-script font prefs. 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// For example, for WEBKIT_WEBPREFS_FONTS_SERIF ("fonts.serif"): 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "fonts.serif.Arab", "fonts.serif.Hang", etc. are registered. 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |fonts_with_defaults| contains all |pref_names| already registered since they 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// have a specified default value. 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RegisterFontFamilyPrefs(user_prefs::PrefRegistrySyncable* registry, 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::set<std::string>& fonts_with_defaults) { 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Expand the font concatenated with script name so this stays at RO memory 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // rather than allocated in heap. 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const char* const kFontFamilyMap[] = { 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define EXPAND_SCRIPT_FONT(map_name, script_name) map_name "." script_name, 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_font_script_names-inl.h" 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_CURSIVE) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_FANTASY) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_FIXED) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_PICTOGRAPH) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_SANSERIF) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_SERIF) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_STANDARD) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#undef EXPAND_SCRIPT_FONT 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kFontFamilyMap); ++i) { 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* pref_name = kFontFamilyMap[i]; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (fonts_with_defaults.find(pref_name) == fonts_with_defaults.end()) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We haven't already set a default value for this font preference, so set 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // an empty string as the default. 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterStringPref( 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_name, 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_ANDROID) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Registers |obs| to observe per-script font prefs under the path |map_name|. 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// On android, there's no exposed way to change these prefs, so we can save 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ~715KB of heap and some startup cycles by avoiding observing these prefs 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// since they will never change. 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RegisterFontFamilyMapObserver( 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefChangeRegistrar* registrar, 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* map_name, 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PrefChangeRegistrar::NamedChangeCallback& obs) { 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pref_name = base::StringPrintf("%s.%s", map_name, script); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar->Add(pref_name.c_str(), obs); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // !defined(OS_ANDROID) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FontDefault { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_id; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Font pref defaults. The prefs that have defaults vary by platform, since not 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// all platforms have fonts for all scripts for all generic families. 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(falken): add proper defaults when possible for all 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platforms/scripts/generic families. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const FontDefault kFontDefaults[] = { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamily, IDS_STANDARD_FONT_FAMILY }, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamily, IDS_FIXED_FONT_FAMILY }, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamily, IDS_SERIF_FONT_FAMILY }, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamily, IDS_SANS_SERIF_FONT_FAMILY }, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitCursiveFontFamily, IDS_CURSIVE_FONT_FAMILY }, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFantasyFontFamily, IDS_FANTASY_FONT_FAMILY }, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitPictographFontFamily, IDS_PICTOGRAPH_FONT_FAMILY }, 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { prefs::kWebKitStandardFontFamilyLatin, IDS_STANDARD_FONT_FAMILY_LATIN }, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { prefs::kWebKitFixedFontFamilyLatin, IDS_FIXED_FONT_FAMILY_LATIN }, 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { prefs::kWebKitSerifFontFamilyLatin, IDS_SERIF_FONT_FAMILY_LATIN }, 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyLatin, IDS_SANS_SERIF_FONT_FAMILY_LATIN }, 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { prefs::kWebKitCursiveFontFamilyLatin, IDS_CURSIVE_FONT_FAMILY_LATIN }, 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { prefs::kWebKitFantasyFontFamilyLatin, IDS_FANTASY_FONT_FAMILY_LATIN }, 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { prefs::kWebKitPictographFontFamilyLatin, IDS_PICTOGRAPH_FONT_FAMILY_LATIN }, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyJapanese, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_STANDARD_FONT_FAMILY_JAPANESE }, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyJapanese, IDS_FIXED_FONT_FAMILY_JAPANESE }, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyJapanese, IDS_SERIF_FONT_FAMILY_JAPANESE }, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyJapanese, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_JAPANESE }, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyKorean, IDS_STANDARD_FONT_FAMILY_KOREAN }, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyKorean, IDS_SERIF_FONT_FAMILY_KOREAN }, 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyKorean, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_KOREAN }, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilySimplifiedHan, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN }, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilySimplifiedHan, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN }, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilySimplifiedHan, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN }, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyTraditionalHan, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_STANDARD_FONT_FAMILY_TRADITIONAL_HAN }, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyTraditionalHan, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN }, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyTraditionalHan, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_TRADITIONAL_HAN }, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyArabic, IDS_STANDARD_FONT_FAMILY_ARABIC }, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyArabic, IDS_SERIF_FONT_FAMILY_ARABIC }, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyArabic, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_ARABIC }, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyKorean, IDS_FIXED_FONT_FAMILY_KOREAN }, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilySimplifiedHan, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN }, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyTraditionalHan, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN }, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyCyrillic, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_STANDARD_FONT_FAMILY_CYRILLIC }, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyCyrillic, IDS_FIXED_FONT_FAMILY_CYRILLIC }, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyCyrillic, IDS_SERIF_FONT_FAMILY_CYRILLIC }, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyCyrillic, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_CYRILLIC }, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyGreek, IDS_STANDARD_FONT_FAMILY_GREEK }, 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyGreek, IDS_FIXED_FONT_FAMILY_GREEK }, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyGreek, IDS_SERIF_FONT_FAMILY_GREEK }, 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyGreek, IDS_SANS_SERIF_FONT_FAMILY_GREEK }, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyKorean, IDS_FIXED_FONT_FAMILY_KOREAN }, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitCursiveFontFamilyKorean, IDS_CURSIVE_FONT_FAMILY_KOREAN }, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilySimplifiedHan, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN }, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyTraditionalHan, 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN }, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kFontDefaultsLength = arraysize(kFontDefaults); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the script of the font pref |pref_name|. For example, suppose 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |pref_name| is "webkit.webprefs.fonts.serif.Hant". Since the script code for 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the script name "Hant" is USCRIPT_TRADITIONAL_HAN, the function returns 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// USCRIPT_TRADITIONAL_HAN. |pref_name| must be a valid font pref name. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UScriptCode GetScriptOfFontPref(const char* pref_name) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ICU script names are four letters. 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const size_t kScriptNameLength = 4; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t len = strlen(pref_name); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_GT(len, kScriptNameLength); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* scriptName = &pref_name[len - kScriptNameLength]; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 code = u_getPropertyValueEnum(UCHAR_SCRIPT, scriptName); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(code >= 0 && code < USCRIPT_CODE_LIMIT); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<UScriptCode>(code); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If |scriptCode| is a member of a family of "similar" script codes, returns 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the script code in that family that is used in font pref names. For example, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// USCRIPT_HANGUL and USCRIPT_KOREAN are considered equivalent for the purposes 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of font selection. Chrome uses the script code USCRIPT_HANGUL (script name 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "Hang") in Korean font pref names (for example, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "webkit.webprefs.fonts.serif.Hang"). So, if |scriptCode| is USCRIPT_KOREAN, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the function returns USCRIPT_HANGUL. If |scriptCode| is not a member of such 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a family, returns |scriptCode|. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UScriptCode GetScriptForFontPrefMatching(UScriptCode scriptCode) { 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (scriptCode) { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USCRIPT_HIRAGANA: 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USCRIPT_KATAKANA: 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USCRIPT_KATAKANA_OR_HIRAGANA: 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return USCRIPT_JAPANESE; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USCRIPT_KOREAN: 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return USCRIPT_HANGUL; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scriptCode; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the primary script used by the browser's UI locale. For example, if 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the locale is "ru", the function returns USCRIPT_CYRILLIC, and if the locale 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is "en", the function returns USCRIPT_LATIN. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UScriptCode GetScriptOfBrowserLocale() { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string locale = g_browser_process->GetApplicationLocale(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For Chinese locales, uscript_getCode() just returns USCRIPT_HAN but our 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // per-script fonts are for USCRIPT_SIMPLIFIED_HAN and 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // USCRIPT_TRADITIONAL_HAN. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (locale == "zh-CN") 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return USCRIPT_SIMPLIFIED_HAN; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (locale == "zh-TW") 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return USCRIPT_TRADITIONAL_HAN; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UScriptCode code = USCRIPT_INVALID_CODE; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UErrorCode err = U_ZERO_ERROR; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uscript_getCode(locale.c_str(), &code, 1, &err); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ignore the error that multiple scripts could be returned, since we only 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // want one script. 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (U_FAILURE(err) && err != U_BUFFER_OVERFLOW_ERROR) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) code = USCRIPT_INVALID_CODE; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetScriptForFontPrefMatching(code); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const struct { 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* from; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* to; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} kPrefNamesToMigrate[] = { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrate prefs like "webkit.webprefs.standard_font_family" to 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "webkit.webprefs.fonts.standard.Zyyy". This moves the formerly 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "non-per-script" font prefs into the per-script font pref maps, as the 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // entry for the "Common" script (Zyyy is the ISO 15924 script code for the 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Common script). The |from| prefs will exist if the migration to global 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefs (for the per-tab pref mechanism, which has since been removed) never 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // occurred. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitOldCursiveFontFamily, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitCursiveFontFamily }, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitOldFantasyFontFamily, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitFantasyFontFamily }, 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitOldFixedFontFamily, 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitFixedFontFamily }, 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitOldSansSerifFontFamily, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitSansSerifFontFamily }, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitOldSerifFontFamily, 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitSerifFontFamily }, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitOldStandardFontFamily, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitStandardFontFamily }, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrate "global" prefs. These will exist if the migration to global prefs 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (for the per-tab pref mechanism, which has since been removed) occurred. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In addition, this moves the formerly "non-per-script" font prefs into the 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // per-script font pref maps, as above. 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kGlobalDefaultCharset, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kDefaultCharset }, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalDefaultFixedFontSize, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitDefaultFixedFontSize }, 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalDefaultFontSize, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitDefaultFontSize }, 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalMinimumFontSize, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitMinimumFontSize }, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalMinimumLogicalFontSize, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitMinimumLogicalFontSize }, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalCursiveFontFamily, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitCursiveFontFamily }, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalFantasyFontFamily, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitFantasyFontFamily }, 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalFixedFontFamily, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitFixedFontFamily }, 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalSansSerifFontFamily, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitSansSerifFontFamily }, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalSerifFontFamily, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitSerifFontFamily }, 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitGlobalStandardFontFamily, 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitStandardFontFamily } 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kPrefsToMigrateLength = ARRAYSIZE_UNSAFE(kPrefNamesToMigrate); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sets a font family pref in |prefs| to |pref_value|. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OverrideFontFamily(WebPreferences* prefs, 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& generic_family, 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& script, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_value) { 396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) webkit_glue::ScriptFontFamilyMap* map = NULL; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (generic_family == "standard") 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->standard_font_family_map; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "fixed") 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->fixed_font_family_map; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "serif") 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->serif_font_family_map; 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "sansserif") 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->sans_serif_font_family_map; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "cursive") 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->cursive_font_family_map; 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "fantasy") 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->fantasy_font_family_map; 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "pictograph") 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->pictograph_font_family_map; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Unknown generic font family: " << generic_family; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*map)[script] = UTF8ToUTF16(pref_value); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefsTabHelper::PrefsTabHelper(WebContents* contents) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : web_contents_(contents) { 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = GetProfile()->GetPrefs(); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_change_registrar_.Init(prefs); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs) { 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure renderer_callback = base::Bind( 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &PrefsTabHelper::UpdateRendererPreferences, base::Unretained(this)); 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add(prefs::kDefaultZoomLevel, renderer_callback); 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add(prefs::kEnableDoNotTrack, renderer_callback); 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add(prefs::kEnableReferrers, renderer_callback); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefChangeRegistrar::NamedChangeCallback webkit_callback = base::Bind( 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &PrefsTabHelper::OnWebPrefChanged, base::Unretained(this)); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < kPrefsToObserveLength; ++i) { 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* pref_name = kPrefsToObserve[i]; 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(std::string(pref_name) == prefs::kDefaultCharset || 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartsWithASCII(pref_name, "webkit.webprefs.", true)); 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add(pref_name, webkit_callback); 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_ANDROID) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitStandardFontFamilyMap, 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitFixedFontFamilyMap, 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitSerifFontFamilyMap, 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitSansSerifFontFamilyMap, 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitCursiveFontFamilyMap, 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitFantasyFontFamilyMap, 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitPictographFontFamilyMap, 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // !defined(OS_ANDROID) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_preferences_util::UpdateFromSystemSettings( 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetMutableRendererPrefs(), GetProfile()); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_ANDROID) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_USER_STYLE_SHEET_UPDATED, 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<ThemeService>( 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThemeServiceFactory::GetForProfile(GetProfile()))); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_AURA) 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_BROWSER_FLING_CURVE_PARAMETERS_CHANGED, 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefsTabHelper::~PrefsTabHelper() { 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::InitIncognitoUserPrefStore( 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OverlayUserPrefStore* pref_store) { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of keys that cannot be changed in the user prefs file by the incognito 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile. All preferences that store information about the browsing history 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or behavior of the user should have this property. 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_store->RegisterOverlayPref(prefs::kBrowserWindowPlacement); 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_store->RegisterOverlayPref(prefs::kProxy); 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) || defined(OS_IOS) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PrefsTabHelper::RegisterUserPrefs( 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPreferences pref_defaults; 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitJavascriptEnabled, 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.javascript_enabled, 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitWebSecurityEnabled, 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.web_security_enabled, 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterBooleanPref( 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitJavascriptCanOpenWindowsAutomatically, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitLoadsImagesAutomatically, 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.loads_images_automatically, 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitPluginsEnabled, 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.plugins_enabled, 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitDomPasteEnabled, 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.dom_paste_enabled, 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitShrinksStandaloneImagesToFit, 527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.shrinks_standalone_images_to_fit, 528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterDictionaryPref( 530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitInspectorSettings, 531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitTextAreasAreResizable, 534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.text_areas_are_resizable, 535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitJavaEnabled, 538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.java_enabled, 539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebkitTabsToLinks, 542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.tabs_to_links, 543c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitAllowRunningInsecureContent, 546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitAllowDisplayingInsecureContent, 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kEnableReferrers, 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterDoublePref( 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitFontScaleFactor, 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.font_scale_factor, 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitForceEnableZoom, 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.force_enable_zoom, 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedStringPref( 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kAcceptLanguages, 570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ACCEPT_LANGUAGES, 571c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Not used in OSX. 574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedStringPref( 575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kAcceptLanguages, 576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ACCEPT_LANGUAGES, 577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedStringPref( 580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kDefaultCharset, 581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_ENCODING, 582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register font prefs that have defaults. 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> fonts_with_defaults; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UScriptCode browser_script = GetScriptOfBrowserLocale(); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < kFontDefaultsLength; ++i) { 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FontDefault& pref = kFontDefaults[i]; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UScriptCode pref_script = GetScriptOfFontPref(pref.pref_name); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Suppress this default font pref value if it is for the primary script of 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the browser's UI locale. For example, if the pref is for the sans-serif 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // font for the Cyrillic script, and the browser locale is "ru" (Russian), 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the default is suppressed. Otherwise, the default would override the 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user's font preferences when viewing pages in their native language. 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is because users have no way yet of customizing their per-script 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // font preferences. The font prefs accessible in the options UI are for 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the default, unknown script; these prefs have less priority than the 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // per-script font prefs when the script of the content is known. This code 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // can possibly be removed later if users can easily access per-script font 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefs (e.g., via the extensions workflow), or the problem turns out to 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not be really critical after all. 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_script != pref_script) { 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterLocalizedStringPref( 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref.pref_name, 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref.resource_id, 607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fonts_with_defaults.insert(pref.pref_name); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register font prefs that don't have defaults. 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RegisterFontFamilyPrefs(registry, fonts_with_defaults); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedIntegerPref( 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitDefaultFontSize, 617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_FONT_SIZE, 618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedIntegerPref( 620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitDefaultFixedFontSize, 621c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_FIXED_FONT_SIZE, 622c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedIntegerPref( 624c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitMinimumFontSize, 625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_MINIMUM_FONT_SIZE, 626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterLocalizedIntegerPref( 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitMinimumLogicalFontSize, 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_MINIMUM_LOGICAL_FONT_SIZE, 630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 631c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedBooleanPref( 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitUsesUniversalDetector, 633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_USES_UNIVERSAL_DETECTOR, 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedStringPref( 636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kStaticEncodings, 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_STATIC_ENCODING_LIST, 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kRecentlySelectedEncoding, 641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RegisterPrefsToMigrate(registry); 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrefsTabHelper::MigrateUserPrefs(PrefService* prefs) { 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < kPrefsToMigrateLength; ++i) { 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PrefService::Preference* pref = 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->FindPreference(kPrefNamesToMigrate[i].from); 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (pref && !pref->IsDefaultValue()) { 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->Set(kPrefNamesToMigrate[i].to, *pref->GetValue()); 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->ClearPref(kPrefNamesToMigrate[i].from); 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::Observe(int type, 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_ANDROID) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_USER_STYLE_SHEET_UPDATED: 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateWebPreferences(); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // !defined(OS_ANDROID) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_BROWSER_THEME_CHANGED: { 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateRendererPreferences(); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_AURA) 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_BROWSER_FLING_CURVE_PARAMETERS_CHANGED: { 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateRendererPreferences(); 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(USE_AURA) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::UpdateWebPreferences() { 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->UpdateWebkitPreferences( 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->GetWebkitPreferences()); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::UpdateRendererPreferences() { 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_preferences_util::UpdateFromSystemSettings( 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetMutableRendererPrefs(), GetProfile()); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->SyncRendererPrefs(); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* PrefsTabHelper::GetProfile() { 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::OnWebPrefChanged(const std::string& pref_name) { 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When a font family pref's value goes from non-empty to the empty string, we 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // must add it to the usual WebPreferences struct passed to the renderer. 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The empty string means to fall back to the pref for the Common script 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ("Zyyy"). For example, if chrome.fonts.serif.Cyrl is the empty string, it 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // means to use chrome.fonts.serif.Zyyy for Cyrillic script. Prefs that are 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the empty string are normally not passed to WebKit, since there are so many 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of them that it would cause a performance regression. Not passing the pref 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is normally okay since WebKit does the desired fallback behavior regardless 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of whether the empty string is passed or the pref is not passed at all. But 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the pref has changed from non-empty to the empty string, we must let 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebKit know. 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string generic_family; 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string script; 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pref_names_util::ParseFontNamePrefPath(pref_name, 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &generic_family, 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &script)) { 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = GetProfile()->GetPrefs(); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pref_value = prefs->GetString(pref_name.c_str()); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pref_value.empty()) { 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPreferences web_prefs = 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->GetWebkitPreferences(); 722c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OverrideFontFamily(&web_prefs, generic_family, script, std::string()); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateWebPreferences(); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 730