| 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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 } | 122 } |
| 123 #endif // !defined(OS_ANDROID) | 123 #endif // !defined(OS_ANDROID) |
| 124 | 124 |
| 125 // Registers |obs| to observe per-script font prefs under the path |map_name|. | 125 // Registers |obs| to observe per-script font prefs under the path |map_name|. |
| 126 // On android, there's no exposed way to change these prefs, so we can save | 126 // On android, there's no exposed way to change these prefs, so we can save |
| 127 // ~715KB of heap and some startup cycles by avoiding observing these prefs | 127 // ~715KB of heap and some startup cycles by avoiding observing these prefs |
| 128 // since they will never change. | 128 // since they will never change. |
| 129 void RegisterFontFamilyMapObserver( | 129 void RegisterFontFamilyMapObserver( |
| 130 PrefChangeRegistrar* registrar, | 130 PrefChangeRegistrar* registrar, |
| 131 const char* map_name, | 131 const char* map_name, |
| 132 const PrefChangeRegistrar::NamedChangeCallback& obs) { | 132 const PrefChangeRegistrar::NamedChangeCallback& obs, |
| 133 std::string* pref_name) { |
| 133 DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true)); | 134 DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true)); |
| 135 DCHECK(pref_name); |
| 134 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { | 136 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { |
| 135 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; | 137 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; |
| 136 std::string pref_name = base::StringPrintf("%s.%s", map_name, script); | 138 pref_name->assign(map_name); |
| 137 registrar->Add(pref_name.c_str(), obs); | 139 pref_name->append(1, '.'); |
| 140 pref_name->append(script); |
| 141 registrar->Add(*pref_name, obs); |
| 138 } | 142 } |
| 139 } | 143 } |
| 140 | 144 |
| 141 #if defined(OS_WIN) | 145 #if defined(OS_WIN) |
| 142 // On Windows with antialising we want to use an alternate fixed font like | 146 // On Windows with antialising we want to use an alternate fixed font like |
| 143 // Consolas, which looks much better than Courier New. | 147 // Consolas, which looks much better than Courier New. |
| 144 bool ShouldUseAlternateDefaultFixedFont(const std::string& script) { | 148 bool ShouldUseAlternateDefaultFixedFont(const std::string& script) { |
| 145 if (!StartsWithASCII(script, "courier", false)) | 149 if (!StartsWithASCII(script, "courier", false)) |
| 146 return false; | 150 return false; |
| 147 UINT smooth_type = 0; | 151 UINT smooth_type = 0; |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 pref_change_registrar_.Add(prefs::kFullscreenAllowed, renderer_callback); | 346 pref_change_registrar_.Add(prefs::kFullscreenAllowed, renderer_callback); |
| 343 #endif | 347 #endif |
| 344 | 348 |
| 345 PrefChangeRegistrar::NamedChangeCallback webkit_callback = base::Bind( | 349 PrefChangeRegistrar::NamedChangeCallback webkit_callback = base::Bind( |
| 346 &PrefsTabHelper::OnWebPrefChanged, base::Unretained(this)); | 350 &PrefsTabHelper::OnWebPrefChanged, base::Unretained(this)); |
| 347 for (int i = 0; i < kPrefsToObserveLength; ++i) { | 351 for (int i = 0; i < kPrefsToObserveLength; ++i) { |
| 348 const char* pref_name = kPrefsToObserve[i]; | 352 const char* pref_name = kPrefsToObserve[i]; |
| 349 pref_change_registrar_.Add(pref_name, webkit_callback); | 353 pref_change_registrar_.Add(pref_name, webkit_callback); |
| 350 } | 354 } |
| 351 | 355 |
| 356 std::string pref_name; |
| 357 pref_name.reserve(500); |
| 358 |
| 352 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 359 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 353 prefs::kWebKitStandardFontFamilyMap, | 360 prefs::kWebKitStandardFontFamilyMap, |
| 354 webkit_callback); | 361 webkit_callback, |
| 362 &pref_name); |
| 355 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 363 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 356 prefs::kWebKitFixedFontFamilyMap, | 364 prefs::kWebKitFixedFontFamilyMap, |
| 357 webkit_callback); | 365 webkit_callback, |
| 366 &pref_name); |
| 358 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 367 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 359 prefs::kWebKitSerifFontFamilyMap, | 368 prefs::kWebKitSerifFontFamilyMap, |
| 360 webkit_callback); | 369 webkit_callback, |
| 370 &pref_name); |
| 361 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 371 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 362 prefs::kWebKitSansSerifFontFamilyMap, | 372 prefs::kWebKitSansSerifFontFamilyMap, |
| 363 webkit_callback); | 373 webkit_callback, |
| 374 &pref_name); |
| 364 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 375 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 365 prefs::kWebKitCursiveFontFamilyMap, | 376 prefs::kWebKitCursiveFontFamilyMap, |
| 366 webkit_callback); | 377 webkit_callback, |
| 378 &pref_name); |
| 367 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 379 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 368 prefs::kWebKitFantasyFontFamilyMap, | 380 prefs::kWebKitFantasyFontFamilyMap, |
| 369 webkit_callback); | 381 webkit_callback, |
| 382 &pref_name); |
| 370 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 383 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 371 prefs::kWebKitPictographFontFamilyMap, | 384 prefs::kWebKitPictographFontFamilyMap, |
| 372 webkit_callback); | 385 webkit_callback, |
| 386 &pref_name); |
| 373 } | 387 } |
| 374 | 388 |
| 375 content::RendererPreferences* render_prefs = | 389 content::RendererPreferences* render_prefs = |
| 376 web_contents_->GetMutableRendererPrefs(); | 390 web_contents_->GetMutableRendererPrefs(); |
| 377 renderer_preferences_util::UpdateFromSystemSettings(render_prefs, | 391 renderer_preferences_util::UpdateFromSystemSettings(render_prefs, |
| 378 GetProfile(), | 392 GetProfile(), |
| 379 web_contents_); | 393 web_contents_); |
| 380 | 394 |
| 381 #if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) | 395 #if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) |
| 382 registrar_.Add(this, | 396 registrar_.Add(this, |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 // is normally okay since WebKit does the desired fallback behavior regardless | 621 // is normally okay since WebKit does the desired fallback behavior regardless |
| 608 // of whether the empty string is passed or the pref is not passed at all. But | 622 // of whether the empty string is passed or the pref is not passed at all. But |
| 609 // if the pref has changed from non-empty to the empty string, we must let | 623 // if the pref has changed from non-empty to the empty string, we must let |
| 610 // WebKit know. | 624 // WebKit know. |
| 611 std::string generic_family; | 625 std::string generic_family; |
| 612 std::string script; | 626 std::string script; |
| 613 if (pref_names_util::ParseFontNamePrefPath(pref_name, | 627 if (pref_names_util::ParseFontNamePrefPath(pref_name, |
| 614 &generic_family, | 628 &generic_family, |
| 615 &script)) { | 629 &script)) { |
| 616 PrefService* prefs = GetProfile()->GetPrefs(); | 630 PrefService* prefs = GetProfile()->GetPrefs(); |
| 617 std::string pref_value = prefs->GetString(pref_name.c_str()); | 631 std::string pref_value = prefs->GetString(pref_name); |
| 618 if (pref_value.empty()) { | 632 if (pref_value.empty()) { |
| 619 WebPreferences web_prefs = | 633 WebPreferences web_prefs = |
| 620 web_contents_->GetRenderViewHost()->GetWebkitPreferences(); | 634 web_contents_->GetRenderViewHost()->GetWebkitPreferences(); |
| 621 OverrideFontFamily(&web_prefs, generic_family, script, std::string()); | 635 OverrideFontFamily(&web_prefs, generic_family, script, std::string()); |
| 622 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); | 636 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); |
| 623 return; | 637 return; |
| 624 } | 638 } |
| 625 } | 639 } |
| 626 } | 640 } |
| 627 | 641 |
| 628 void PrefsTabHelper::OnWebPrefChanged(const std::string& pref_name) { | 642 void PrefsTabHelper::OnWebPrefChanged(const std::string& pref_name) { |
| 629 #if !defined(OS_ANDROID) | 643 #if !defined(OS_ANDROID) |
| 630 OnFontFamilyPrefChanged(pref_name); | 644 OnFontFamilyPrefChanged(pref_name); |
| 631 #endif | 645 #endif |
| 632 | 646 |
| 633 web_contents_->GetRenderViewHost()->OnWebkitPreferencesChanged(); | 647 web_contents_->GetRenderViewHost()->OnWebkitPreferencesChanged(); |
| 634 } | 648 } |
| OLD | NEW |