OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/prefs/prefs_tab_helper.h" | 5 #include "chrome/browser/ui/prefs/prefs_tab_helper.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/prefs/overlay_user_pref_store.h" | 9 #include "base/prefs/overlay_user_pref_store.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "grit/platform_locale_settings.h" | 27 #include "grit/platform_locale_settings.h" |
28 #include "third_party/icu/source/common/unicode/uchar.h" | 28 #include "third_party/icu/source/common/unicode/uchar.h" |
29 #include "third_party/icu/source/common/unicode/uscript.h" | 29 #include "third_party/icu/source/common/unicode/uscript.h" |
30 #include "webkit/common/webpreferences.h" | 30 #include "webkit/common/webpreferences.h" |
31 | 31 |
32 #if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) | 32 #if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) |
33 #include "chrome/browser/themes/theme_service.h" | 33 #include "chrome/browser/themes/theme_service.h" |
34 #include "chrome/browser/themes/theme_service_factory.h" | 34 #include "chrome/browser/themes/theme_service_factory.h" |
35 #endif | 35 #endif |
36 | 36 |
| 37 #if defined(OS_WIN) |
| 38 #include "base/win/windows_version.h" |
| 39 #endif |
| 40 |
37 using content::WebContents; | 41 using content::WebContents; |
38 | 42 |
39 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PrefsTabHelper); | 43 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PrefsTabHelper); |
40 | 44 |
41 namespace { | 45 namespace { |
42 | 46 |
43 // The list of prefs we want to observe. | 47 // The list of prefs we want to observe. |
44 const char* kPrefsToObserve[] = { | 48 const char* kPrefsToObserve[] = { |
45 prefs::kDefaultCharset, | 49 prefs::kDefaultCharset, |
46 prefs::kWebKitAllowDisplayingInsecureContent, | 50 prefs::kWebKitAllowDisplayingInsecureContent, |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 const PrefChangeRegistrar::NamedChangeCallback& obs) { | 121 const PrefChangeRegistrar::NamedChangeCallback& obs) { |
118 DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true)); | 122 DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true)); |
119 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { | 123 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { |
120 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; | 124 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; |
121 std::string pref_name = base::StringPrintf("%s.%s", map_name, script); | 125 std::string pref_name = base::StringPrintf("%s.%s", map_name, script); |
122 registrar->Add(pref_name.c_str(), obs); | 126 registrar->Add(pref_name.c_str(), obs); |
123 } | 127 } |
124 } | 128 } |
125 #endif // !defined(OS_ANDROID) | 129 #endif // !defined(OS_ANDROID) |
126 | 130 |
| 131 #if defined(OS_WIN) |
| 132 // On Windows with DirectWrite we want to use an alternate fixed font like |
| 133 // Consolas, which looks much better than Courier New. |
| 134 bool ShouldUseAlternateDefaultFixedFont() { |
| 135 UINT smooth_type = 0; |
| 136 SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &smooth_type, 0); |
| 137 return (base::win::GetVersion() >= base::win::VERSION_WIN7) && |
| 138 (smooth_type == FE_FONTSMOOTHINGCLEARTYPE); |
| 139 } |
| 140 #endif |
| 141 |
127 struct FontDefault { | 142 struct FontDefault { |
128 const char* pref_name; | 143 const char* pref_name; |
129 int resource_id; | 144 int resource_id; |
130 }; | 145 }; |
131 | 146 |
132 // Font pref defaults. The prefs that have defaults vary by platform, since not | 147 // Font pref defaults. The prefs that have defaults vary by platform, since not |
133 // all platforms have fonts for all scripts for all generic families. | 148 // all platforms have fonts for all scripts for all generic families. |
134 // TODO(falken): add proper defaults when possible for all | 149 // TODO(falken): add proper defaults when possible for all |
135 // platforms/scripts/generic families. | 150 // platforms/scripts/generic families. |
136 const FontDefault kFontDefaults[] = { | 151 const FontDefault kFontDefaults[] = { |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 462 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
448 registry->RegisterLocalizedStringPref( | 463 registry->RegisterLocalizedStringPref( |
449 prefs::kDefaultCharset, | 464 prefs::kDefaultCharset, |
450 IDS_DEFAULT_ENCODING, | 465 IDS_DEFAULT_ENCODING, |
451 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 466 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
452 | 467 |
453 // Register font prefs that have defaults. | 468 // Register font prefs that have defaults. |
454 std::set<std::string> fonts_with_defaults; | 469 std::set<std::string> fonts_with_defaults; |
455 UScriptCode browser_script = GetScriptOfBrowserLocale(); | 470 UScriptCode browser_script = GetScriptOfBrowserLocale(); |
456 for (size_t i = 0; i < kFontDefaultsLength; ++i) { | 471 for (size_t i = 0; i < kFontDefaultsLength; ++i) { |
457 const FontDefault& pref = kFontDefaults[i]; | 472 FontDefault pref = kFontDefaults[i]; |
| 473 |
| 474 #if defined(OS_WIN) |
| 475 if (pref.pref_name == prefs::kWebKitFixedFontFamily) { |
| 476 if (ShouldUseAlternateDefaultFixedFont()) |
| 477 pref.resource_id = IDS_FIXED_FONT_FAMILY_ALT_WIN; |
| 478 } |
| 479 #endif |
| 480 |
458 UScriptCode pref_script = GetScriptOfFontPref(pref.pref_name); | 481 UScriptCode pref_script = GetScriptOfFontPref(pref.pref_name); |
459 | 482 |
460 // Suppress this default font pref value if it is for the primary script of | 483 // Suppress this default font pref value if it is for the primary script of |
461 // the browser's UI locale. For example, if the pref is for the sans-serif | 484 // the browser's UI locale. For example, if the pref is for the sans-serif |
462 // font for the Cyrillic script, and the browser locale is "ru" (Russian), | 485 // font for the Cyrillic script, and the browser locale is "ru" (Russian), |
463 // the default is suppressed. Otherwise, the default would override the | 486 // the default is suppressed. Otherwise, the default would override the |
464 // user's font preferences when viewing pages in their native language. | 487 // user's font preferences when viewing pages in their native language. |
465 // This is because users have no way yet of customizing their per-script | 488 // This is because users have no way yet of customizing their per-script |
466 // font preferences. The font prefs accessible in the options UI are for | 489 // font preferences. The font prefs accessible in the options UI are for |
467 // the default, unknown script; these prefs have less priority than the | 490 // the default, unknown script; these prefs have less priority than the |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
572 WebPreferences web_prefs = | 595 WebPreferences web_prefs = |
573 web_contents_->GetRenderViewHost()->GetWebkitPreferences(); | 596 web_contents_->GetRenderViewHost()->GetWebkitPreferences(); |
574 OverrideFontFamily(&web_prefs, generic_family, script, std::string()); | 597 OverrideFontFamily(&web_prefs, generic_family, script, std::string()); |
575 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); | 598 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); |
576 return; | 599 return; |
577 } | 600 } |
578 } | 601 } |
579 | 602 |
580 UpdateWebPreferences(); | 603 UpdateWebPreferences(); |
581 } | 604 } |
OLD | NEW |