Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Side by Side Diff: chrome/browser/ui/prefs/prefs_tab_helper.cc

Issue 747013003: Various optimizations to reduce the number of temporary allocations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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 }
OLDNEW
« chrome/browser/themes/theme_properties.cc ('K') | « chrome/browser/themes/theme_properties.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698