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" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_preferences_util.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" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/locale_settings.h" 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/web_preferences.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/platform_locale_settings.h" 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/icu/source/common/unicode/uchar.h" 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/icu/source/common/unicode/uscript.h" 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/base/l10n/l10n_util.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/win/windows_version.h" 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::WebPreferences; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DEFINE_WEB_CONTENTS_USER_DATA_KEY(PrefsTabHelper); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The list of prefs we want to observe. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kPrefsToObserve[] = { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kDefaultCharset, 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prefs::kDisable3DAPIs, 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prefs::kEnableHyperlinkAuditing, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitAllowDisplayingInsecureContent, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitAllowRunningInsecureContent, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitDefaultFixedFontSize, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitDefaultFontSize, 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prefs::kWebKitDomPasteEnabled, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitFontScaleFactor, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitForceEnableZoom, 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prefs::kWebKitPasswordEchoEnabled, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prefs::kWebKitJavascriptCanOpenWindowsAutomatically, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitJavascriptEnabled, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitJavaEnabled, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitLoadsImagesAutomatically, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitMinimumFontSize, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitMinimumLogicalFontSize, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitPluginsEnabled, 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prefs::kWebKitShrinksStandaloneImagesToFit, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebkitTabsToLinks, 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prefs::kWebKitTextAreasAreResizable, 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prefs::kWebKitUsesUniversalDetector, 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prefs::kWebKitWebSecurityEnabled, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kPrefsToObserveLength = arraysize(kPrefsToObserve); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_ANDROID) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Registers a preference under the path |pref_name| for each script used for 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// per-script font prefs. 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// For example, for WEBKIT_WEBPREFS_FONTS_SERIF ("fonts.serif"): 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "fonts.serif.Arab", "fonts.serif.Hang", etc. are registered. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |fonts_with_defaults| contains all |pref_names| already registered since they 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// have a specified default value. 878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// On Android there are no default values for these properties and there is no 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// way to set them (because extensions are not supported so the Font Settings 898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// API cannot be used), so we can avoid registering them altogether. 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RegisterFontFamilyPrefs(user_prefs::PrefRegistrySyncable* registry, 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::set<std::string>& fonts_with_defaults) { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Expand the font concatenated with script name so this stays at RO memory 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // rather than allocated in heap. 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const char* const kFontFamilyMap[] = { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define EXPAND_SCRIPT_FONT(map_name, script_name) map_name "." script_name, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_font_script_names-inl.h" 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_CURSIVE) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_FANTASY) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_FIXED) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_PICTOGRAPH) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_SANSERIF) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_SERIF) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ALL_FONT_SCRIPTS(WEBKIT_WEBPREFS_FONTS_STANDARD) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#undef EXPAND_SCRIPT_FONT 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kFontFamilyMap); ++i) { 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* pref_name = kFontFamilyMap[i]; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (fonts_with_defaults.find(pref_name) == fonts_with_defaults.end()) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We haven't already set a default value for this font preference, so set 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // an empty string as the default. 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterStringPref( 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_name, 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // !defined(OS_ANDROID) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Registers |obs| to observe per-script font prefs under the path |map_name|. 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// On android, there's no exposed way to change these prefs, so we can save 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ~715KB of heap and some startup cycles by avoiding observing these prefs 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// since they will never change. 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RegisterFontFamilyMapObserver( 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefChangeRegistrar* registrar, 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* map_name, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PrefChangeRegistrar::NamedChangeCallback& obs) { 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pref_name = base::StringPrintf("%s.%s", map_name, script); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar->Add(pref_name.c_str(), obs); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// On Windows with antialising we want to use an alternate fixed font like 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Consolas, which looks much better than Courier New. 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ShouldUseAlternateDefaultFixedFont(const std::string& script) { 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!StartsWithASCII(script, "courier", false)) 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UINT smooth_type = 0; 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &smooth_type, 0); 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return (base::win::GetVersion() >= base::win::VERSION_WIN7) && 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (smooth_type == FE_FONTSMOOTHINGCLEARTYPE); 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FontDefault { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_id; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Font pref defaults. The prefs that have defaults vary by platform, since not 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// all platforms have fonts for all scripts for all generic families. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(falken): add proper defaults when possible for all 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platforms/scripts/generic families. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const FontDefault kFontDefaults[] = { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamily, IDS_STANDARD_FONT_FAMILY }, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamily, IDS_FIXED_FONT_FAMILY }, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamily, IDS_SERIF_FONT_FAMILY }, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamily, IDS_SANS_SERIF_FONT_FAMILY }, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitCursiveFontFamily, IDS_CURSIVE_FONT_FAMILY }, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFantasyFontFamily, IDS_FANTASY_FONT_FAMILY }, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitPictographFontFamily, IDS_PICTOGRAPH_FONT_FAMILY }, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyJapanese, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_STANDARD_FONT_FAMILY_JAPANESE }, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyJapanese, IDS_FIXED_FONT_FAMILY_JAPANESE }, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyJapanese, IDS_SERIF_FONT_FAMILY_JAPANESE }, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyJapanese, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_JAPANESE }, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyKorean, IDS_STANDARD_FONT_FAMILY_KOREAN }, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyKorean, IDS_SERIF_FONT_FAMILY_KOREAN }, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyKorean, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_KOREAN }, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilySimplifiedHan, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN }, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilySimplifiedHan, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN }, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilySimplifiedHan, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN }, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyTraditionalHan, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_STANDARD_FONT_FAMILY_TRADITIONAL_HAN }, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyTraditionalHan, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN }, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyTraditionalHan, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_TRADITIONAL_HAN }, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyArabic, IDS_STANDARD_FONT_FAMILY_ARABIC }, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyArabic, IDS_SERIF_FONT_FAMILY_ARABIC }, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyArabic, 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_ARABIC }, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyKorean, IDS_FIXED_FONT_FAMILY_KOREAN }, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilySimplifiedHan, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN }, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyTraditionalHan, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN }, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyCyrillic, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_STANDARD_FONT_FAMILY_CYRILLIC }, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyCyrillic, IDS_FIXED_FONT_FAMILY_CYRILLIC }, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyCyrillic, IDS_SERIF_FONT_FAMILY_CYRILLIC }, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyCyrillic, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_SANS_SERIF_FONT_FAMILY_CYRILLIC }, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitStandardFontFamilyGreek, IDS_STANDARD_FONT_FAMILY_GREEK }, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyGreek, IDS_FIXED_FONT_FAMILY_GREEK }, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSerifFontFamilyGreek, IDS_SERIF_FONT_FAMILY_GREEK }, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitSansSerifFontFamilyGreek, IDS_SANS_SERIF_FONT_FAMILY_GREEK }, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyKorean, IDS_FIXED_FONT_FAMILY_KOREAN }, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitCursiveFontFamilyKorean, IDS_CURSIVE_FONT_FAMILY_KOREAN }, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilySimplifiedHan, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN }, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { prefs::kWebKitFixedFontFamilyTraditionalHan, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN }, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kFontDefaultsLength = arraysize(kFontDefaults); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the script of the font pref |pref_name|. For example, suppose 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |pref_name| is "webkit.webprefs.fonts.serif.Hant". Since the script code for 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the script name "Hant" is USCRIPT_TRADITIONAL_HAN, the function returns 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// USCRIPT_TRADITIONAL_HAN. |pref_name| must be a valid font pref name. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UScriptCode GetScriptOfFontPref(const char* pref_name) { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ICU script names are four letters. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const size_t kScriptNameLength = 4; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t len = strlen(pref_name); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_GT(len, kScriptNameLength); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* scriptName = &pref_name[len - kScriptNameLength]; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 code = u_getPropertyValueEnum(UCHAR_SCRIPT, scriptName); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(code >= 0 && code < USCRIPT_CODE_LIMIT); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<UScriptCode>(code); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If |scriptCode| is a member of a family of "similar" script codes, returns 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the script code in that family that is used in font pref names. For example, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// USCRIPT_HANGUL and USCRIPT_KOREAN are considered equivalent for the purposes 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of font selection. Chrome uses the script code USCRIPT_HANGUL (script name 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "Hang") in Korean font pref names (for example, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "webkit.webprefs.fonts.serif.Hang"). So, if |scriptCode| is USCRIPT_KOREAN, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the function returns USCRIPT_HANGUL. If |scriptCode| is not a member of such 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a family, returns |scriptCode|. 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UScriptCode GetScriptForFontPrefMatching(UScriptCode scriptCode) { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (scriptCode) { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USCRIPT_HIRAGANA: 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USCRIPT_KATAKANA: 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USCRIPT_KATAKANA_OR_HIRAGANA: 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return USCRIPT_JAPANESE; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USCRIPT_KOREAN: 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return USCRIPT_HANGUL; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scriptCode; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the primary script used by the browser's UI locale. For example, if 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the locale is "ru", the function returns USCRIPT_CYRILLIC, and if the locale 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is "en", the function returns USCRIPT_LATIN. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UScriptCode GetScriptOfBrowserLocale() { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string locale = g_browser_process->GetApplicationLocale(); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For Chinese locales, uscript_getCode() just returns USCRIPT_HAN but our 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // per-script fonts are for USCRIPT_SIMPLIFIED_HAN and 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // USCRIPT_TRADITIONAL_HAN. 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (locale == "zh-CN") 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return USCRIPT_SIMPLIFIED_HAN; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (locale == "zh-TW") 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return USCRIPT_TRADITIONAL_HAN; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UScriptCode code = USCRIPT_INVALID_CODE; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UErrorCode err = U_ZERO_ERROR; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uscript_getCode(locale.c_str(), &code, 1, &err); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ignore the error that multiple scripts could be returned, since we only 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // want one script. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (U_FAILURE(err) && err != U_BUFFER_OVERFLOW_ERROR) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) code = USCRIPT_INVALID_CODE; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetScriptForFontPrefMatching(code); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sets a font family pref in |prefs| to |pref_value|. 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OverrideFontFamily(WebPreferences* prefs, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& generic_family, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& script, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_value) { 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::ScriptFontFamilyMap* map = NULL; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (generic_family == "standard") 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->standard_font_family_map; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "fixed") 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->fixed_font_family_map; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "serif") 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->serif_font_family_map; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "sansserif") 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->sans_serif_font_family_map; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "cursive") 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->cursive_font_family_map; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "fantasy") 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->fantasy_font_family_map; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (generic_family == "pictograph") 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map = &prefs->pictograph_font_family_map; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Unknown generic font family: " << generic_family; 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (*map)[script] = base::UTF8ToUTF16(pref_value); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefsTabHelper::PrefsTabHelper(WebContents* contents) 3163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) : web_contents_(contents), 3173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) weak_ptr_factory_(this) { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = GetProfile()->GetPrefs(); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_change_registrar_.Init(prefs); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs) { 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure renderer_callback = base::Bind( 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &PrefsTabHelper::UpdateRendererPreferences, base::Unretained(this)); 3237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pref_change_registrar_.Add(prefs::kAcceptLanguages, renderer_callback); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add(prefs::kDefaultZoomLevel, renderer_callback); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add(prefs::kEnableDoNotTrack, renderer_callback); 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add(prefs::kEnableReferrers, renderer_callback); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 32868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if !defined(OS_MACOSX) 32968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pref_change_registrar_.Add(prefs::kFullscreenAllowed, renderer_callback); 33068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif 33168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefChangeRegistrar::NamedChangeCallback webkit_callback = base::Bind( 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &PrefsTabHelper::OnWebPrefChanged, base::Unretained(this)); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < kPrefsToObserveLength; ++i) { 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* pref_name = kPrefsToObserve[i]; 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add(pref_name, webkit_callback); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitStandardFontFamilyMap, 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitFixedFontFamilyMap, 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitSerifFontFamilyMap, 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitSansSerifFontFamilyMap, 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitCursiveFontFamilyMap, 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitFantasyFontFamilyMap, 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(&pref_change_registrar_, 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitPictographFontFamilyMap, 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_callback); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_preferences_util::UpdateFromSystemSettings( 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetMutableRendererPrefs(), GetProfile()); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<ThemeService>( 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThemeServiceFactory::GetForProfile(GetProfile()))); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_AURA) 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_BROWSER_FLING_CURVE_PARAMETERS_CHANGED, 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefsTabHelper::~PrefsTabHelper() { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::InitIncognitoUserPrefStore( 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OverlayUserPrefStore* pref_store) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of keys that cannot be changed in the user prefs file by the incognito 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile. All preferences that store information about the browsing history 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or behavior of the user should have this property. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_store->RegisterOverlayPref(prefs::kBrowserWindowPlacement); 387868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pref_store->RegisterOverlayPref(prefs::kSaveFileDefaultDirectory); 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_store->RegisterOverlayPref(prefs::kProxy); 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) || defined(OS_IOS) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid PrefsTabHelper::RegisterProfilePrefs( 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPreferences pref_defaults; 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitJavascriptEnabled, 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.javascript_enabled, 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitWebSecurityEnabled, 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.web_security_enabled, 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterBooleanPref( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitJavascriptCanOpenWindowsAutomatically, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitLoadsImagesAutomatically, 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.loads_images_automatically, 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitPluginsEnabled, 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.plugins_enabled, 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitDomPasteEnabled, 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.dom_paste_enabled, 420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitShrinksStandaloneImagesToFit, 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.shrinks_standalone_images_to_fit, 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitTextAreasAreResizable, 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.text_areas_are_resizable, 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitJavaEnabled, 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.java_enabled, 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebkitTabsToLinks, 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.tabs_to_links, 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitAllowRunningInsecureContent, 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitAllowDisplayingInsecureContent, 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kEnableReferrers, 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterDoublePref( 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitFontScaleFactor, 4528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1.0, 4538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 4548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) registry->RegisterBooleanPref( 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitForceEnableZoom, 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_defaults.force_enable_zoom, 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 458868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) registry->RegisterBooleanPref( 459868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prefs::kWebKitPasswordEchoEnabled, 460868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pref_defaults.password_echo_enabled, 461868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedStringPref( 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kAcceptLanguages, 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ACCEPT_LANGUAGES, 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedStringPref( 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kDefaultCharset, 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_ENCODING, 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register font prefs that have defaults. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> fonts_with_defaults; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UScriptCode browser_script = GetScriptOfBrowserLocale(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < kFontDefaultsLength; ++i) { 476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FontDefault pref = kFontDefaults[i]; 477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (pref.pref_name == prefs::kWebKitFixedFontFamily) { 480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ShouldUseAlternateDefaultFixedFont( 481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch l10n_util::GetStringUTF8(pref.resource_id))) 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref.resource_id = IDS_FIXED_FONT_FAMILY_ALT_WIN; 483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UScriptCode pref_script = GetScriptOfFontPref(pref.pref_name); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Suppress this default font pref value if it is for the primary script of 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the browser's UI locale. For example, if the pref is for the sans-serif 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // font for the Cyrillic script, and the browser locale is "ru" (Russian), 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the default is suppressed. Otherwise, the default would override the 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user's font preferences when viewing pages in their native language. 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is because users have no way yet of customizing their per-script 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // font preferences. The font prefs accessible in the options UI are for 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the default, unknown script; these prefs have less priority than the 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // per-script font prefs when the script of the content is known. This code 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // can possibly be removed later if users can easily access per-script font 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefs (e.g., via the extensions workflow), or the problem turns out to 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not be really critical after all. 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_script != pref_script) { 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterLocalizedStringPref( 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref.pref_name, 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref.resource_id, 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fonts_with_defaults.insert(pref.pref_name); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Register per-script font prefs that don't have defaults. 5108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_ANDROID) 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RegisterFontFamilyPrefs(registry, fonts_with_defaults); 5128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedIntegerPref( 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitDefaultFontSize, 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_FONT_SIZE, 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedIntegerPref( 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitDefaultFixedFontSize, 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DEFAULT_FIXED_FONT_SIZE, 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedIntegerPref( 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitMinimumFontSize, 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_MINIMUM_FONT_SIZE, 525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterLocalizedIntegerPref( 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitMinimumLogicalFontSize, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_MINIMUM_LOGICAL_FONT_SIZE, 529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedBooleanPref( 531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kWebKitUsesUniversalDetector, 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_USES_UNIVERSAL_DETECTOR, 533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterLocalizedStringPref( 535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kStaticEncodings, 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_STATIC_ENCODING_LIST, 537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kRecentlySelectedEncoding, 540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::Observe(int type, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) 5483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (type == chrome::NOTIFICATION_BROWSER_THEME_CHANGED) { 5493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UpdateRendererPreferences(); 5503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return; 5513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_AURA) 5553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (type == chrome::NOTIFICATION_BROWSER_FLING_CURVE_PARAMETERS_CHANGED) { 5563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UpdateRendererPreferences(); 5573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return; 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif // defined(USE_AURA) 5603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NOTREACHED(); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::UpdateWebPreferences() { 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->UpdateWebkitPreferences( 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->GetWebkitPreferences()); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrefsTabHelper::UpdateRendererPreferences() { 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_preferences_util::UpdateFromSystemSettings( 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetMutableRendererPrefs(), GetProfile()); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->SyncRendererPrefs(); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* PrefsTabHelper::GetProfile() { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void PrefsTabHelper::OnFontFamilyPrefChanged(const std::string& pref_name) { 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When a font family pref's value goes from non-empty to the empty string, we 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // must add it to the usual WebPreferences struct passed to the renderer. 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The empty string means to fall back to the pref for the Common script 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ("Zyyy"). For example, if chrome.fonts.serif.Cyrl is the empty string, it 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // means to use chrome.fonts.serif.Zyyy for Cyrillic script. Prefs that are 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the empty string are normally not passed to WebKit, since there are so many 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of them that it would cause a performance regression. Not passing the pref 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is normally okay since WebKit does the desired fallback behavior regardless 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of whether the empty string is passed or the pref is not passed at all. But 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the pref has changed from non-empty to the empty string, we must let 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebKit know. 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string generic_family; 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string script; 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pref_names_util::ParseFontNamePrefPath(pref_name, 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &generic_family, 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &script)) { 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = GetProfile()->GetPrefs(); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pref_value = prefs->GetString(pref_name.c_str()); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pref_value.empty()) { 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPreferences web_prefs = 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->GetWebkitPreferences(); 602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OverrideFontFamily(&web_prefs, generic_family, script, std::string()); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 6086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 6096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void PrefsTabHelper::OnWebPrefChanged(const std::string& pref_name) { 6106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if !defined(OS_ANDROID) 6116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) OnFontFamilyPrefChanged(pref_name); 6126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents_->GetRenderViewHost()->OnWebkitPreferencesChanged(); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 616