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 |