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

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

Issue 429413003: Revert of Cache the current WebPreferences on RenderViewHostImpl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/prefs/prefs_tab_helper.h ('k') | content/browser/android/content_settings.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 using content::WebContents; 42 using content::WebContents;
43 using content::WebPreferences; 43 using content::WebPreferences;
44 44
45 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PrefsTabHelper); 45 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PrefsTabHelper);
46 46
47 namespace { 47 namespace {
48 48
49 // The list of prefs we want to observe. 49 // The list of prefs we want to observe.
50 const char* kPrefsToObserve[] = { 50 const char* kPrefsToObserve[] = {
51 prefs::kDefaultCharset, 51 prefs::kDefaultCharset,
52 prefs::kDisable3DAPIs,
53 prefs::kEnableHyperlinkAuditing,
54 prefs::kWebKitAllowDisplayingInsecureContent, 52 prefs::kWebKitAllowDisplayingInsecureContent,
55 prefs::kWebKitAllowRunningInsecureContent, 53 prefs::kWebKitAllowRunningInsecureContent,
56 prefs::kWebKitDefaultFixedFontSize, 54 prefs::kWebKitDefaultFixedFontSize,
57 prefs::kWebKitDefaultFontSize, 55 prefs::kWebKitDefaultFontSize,
58 prefs::kWebKitDomPasteEnabled,
59 #if defined(OS_ANDROID) 56 #if defined(OS_ANDROID)
60 prefs::kWebKitFontScaleFactor, 57 prefs::kWebKitFontScaleFactor,
61 prefs::kWebKitForceEnableZoom, 58 prefs::kWebKitForceEnableZoom,
62 prefs::kWebKitPasswordEchoEnabled, 59 prefs::kWebKitPasswordEchoEnabled,
63 #endif 60 #endif
64 prefs::kWebKitInspectorSettings,
65 prefs::kWebKitJavascriptCanOpenWindowsAutomatically,
66 prefs::kWebKitJavascriptEnabled, 61 prefs::kWebKitJavascriptEnabled,
67 prefs::kWebKitJavaEnabled, 62 prefs::kWebKitJavaEnabled,
68 prefs::kWebKitLoadsImagesAutomatically, 63 prefs::kWebKitLoadsImagesAutomatically,
69 prefs::kWebKitMinimumFontSize, 64 prefs::kWebKitMinimumFontSize,
70 prefs::kWebKitMinimumLogicalFontSize, 65 prefs::kWebKitMinimumLogicalFontSize,
71 prefs::kWebKitPluginsEnabled, 66 prefs::kWebKitPluginsEnabled,
72 prefs::kWebKitShrinksStandaloneImagesToFit,
73 prefs::kWebkitTabsToLinks, 67 prefs::kWebkitTabsToLinks,
74 prefs::kWebKitTextAreasAreResizable, 68 prefs::kWebKitUsesUniversalDetector
75 prefs::kWebKitUsesUniversalDetector,
76 prefs::kWebKitWebSecurityEnabled,
77 }; 69 };
78 70
79 const int kPrefsToObserveLength = arraysize(kPrefsToObserve); 71 const int kPrefsToObserveLength = arraysize(kPrefsToObserve);
80 72
81 #if !defined(OS_ANDROID) 73 #if !defined(OS_ANDROID)
82 // Registers a preference under the path |pref_name| for each script used for 74 // Registers a preference under the path |pref_name| for each script used for
83 // per-script font prefs. 75 // per-script font prefs.
84 // For example, for WEBKIT_WEBPREFS_FONTS_SERIF ("fonts.serif"): 76 // For example, for WEBKIT_WEBPREFS_FONTS_SERIF ("fonts.serif"):
85 // "fonts.serif.Arab", "fonts.serif.Hang", etc. are registered. 77 // "fonts.serif.Arab", "fonts.serif.Hang", etc. are registered.
86 // |fonts_with_defaults| contains all |pref_names| already registered since they 78 // |fonts_with_defaults| contains all |pref_names| already registered since they
(...skipping 26 matching lines...) Expand all
113 if (fonts_with_defaults.find(pref_name) == fonts_with_defaults.end()) { 105 if (fonts_with_defaults.find(pref_name) == fonts_with_defaults.end()) {
114 // We haven't already set a default value for this font preference, so set 106 // We haven't already set a default value for this font preference, so set
115 // an empty string as the default. 107 // an empty string as the default.
116 registry->RegisterStringPref( 108 registry->RegisterStringPref(
117 pref_name, 109 pref_name,
118 std::string(), 110 std::string(),
119 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 111 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
120 } 112 }
121 } 113 }
122 } 114 }
123 #endif // !defined(OS_ANDROID)
124 115
125 // Registers |obs| to observe per-script font prefs under the path |map_name|. 116 // 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 117 // 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 118 // ~715KB of heap and some startup cycles by avoiding observing these prefs
128 // since they will never change. 119 // since they will never change.
129 void RegisterFontFamilyMapObserver( 120 void RegisterFontFamilyMapObserver(
130 PrefChangeRegistrar* registrar, 121 PrefChangeRegistrar* registrar,
131 const char* map_name, 122 const char* map_name,
132 const PrefChangeRegistrar::NamedChangeCallback& obs) { 123 const PrefChangeRegistrar::NamedChangeCallback& obs) {
133 DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true)); 124 DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true));
134 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { 125 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) {
135 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; 126 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i];
136 std::string pref_name = base::StringPrintf("%s.%s", map_name, script); 127 std::string pref_name = base::StringPrintf("%s.%s", map_name, script);
137 registrar->Add(pref_name.c_str(), obs); 128 registrar->Add(pref_name.c_str(), obs);
138 } 129 }
139 } 130 }
131 #endif // !defined(OS_ANDROID)
140 132
141 #if defined(OS_WIN) 133 #if defined(OS_WIN)
142 // On Windows with antialising we want to use an alternate fixed font like 134 // On Windows with antialising we want to use an alternate fixed font like
143 // Consolas, which looks much better than Courier New. 135 // Consolas, which looks much better than Courier New.
144 bool ShouldUseAlternateDefaultFixedFont(const std::string& script) { 136 bool ShouldUseAlternateDefaultFixedFont(const std::string& script) {
145 if (!StartsWithASCII(script, "courier", false)) 137 if (!StartsWithASCII(script, "courier", false))
146 return false; 138 return false;
147 UINT smooth_type = 0; 139 UINT smooth_type = 0;
148 SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &smooth_type, 0); 140 SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &smooth_type, 0);
149 return (base::win::GetVersion() >= base::win::VERSION_WIN7) && 141 return (base::win::GetVersion() >= base::win::VERSION_WIN7) &&
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 pref_change_registrar_.Add(prefs::kEnableReferrers, renderer_callback); 319 pref_change_registrar_.Add(prefs::kEnableReferrers, renderer_callback);
328 320
329 #if !defined(OS_MACOSX) 321 #if !defined(OS_MACOSX)
330 pref_change_registrar_.Add(prefs::kFullscreenAllowed, renderer_callback); 322 pref_change_registrar_.Add(prefs::kFullscreenAllowed, renderer_callback);
331 #endif 323 #endif
332 324
333 PrefChangeRegistrar::NamedChangeCallback webkit_callback = base::Bind( 325 PrefChangeRegistrar::NamedChangeCallback webkit_callback = base::Bind(
334 &PrefsTabHelper::OnWebPrefChanged, base::Unretained(this)); 326 &PrefsTabHelper::OnWebPrefChanged, base::Unretained(this));
335 for (int i = 0; i < kPrefsToObserveLength; ++i) { 327 for (int i = 0; i < kPrefsToObserveLength; ++i) {
336 const char* pref_name = kPrefsToObserve[i]; 328 const char* pref_name = kPrefsToObserve[i];
329 DCHECK(std::string(pref_name) == prefs::kDefaultCharset ||
330 StartsWithASCII(pref_name, "webkit.webprefs.", true));
337 pref_change_registrar_.Add(pref_name, webkit_callback); 331 pref_change_registrar_.Add(pref_name, webkit_callback);
338 } 332 }
339 333
334 #if !defined(OS_ANDROID)
340 RegisterFontFamilyMapObserver(&pref_change_registrar_, 335 RegisterFontFamilyMapObserver(&pref_change_registrar_,
341 prefs::kWebKitStandardFontFamilyMap, 336 prefs::kWebKitStandardFontFamilyMap,
342 webkit_callback); 337 webkit_callback);
343 RegisterFontFamilyMapObserver(&pref_change_registrar_, 338 RegisterFontFamilyMapObserver(&pref_change_registrar_,
344 prefs::kWebKitFixedFontFamilyMap, 339 prefs::kWebKitFixedFontFamilyMap,
345 webkit_callback); 340 webkit_callback);
346 RegisterFontFamilyMapObserver(&pref_change_registrar_, 341 RegisterFontFamilyMapObserver(&pref_change_registrar_,
347 prefs::kWebKitSerifFontFamilyMap, 342 prefs::kWebKitSerifFontFamilyMap,
348 webkit_callback); 343 webkit_callback);
349 RegisterFontFamilyMapObserver(&pref_change_registrar_, 344 RegisterFontFamilyMapObserver(&pref_change_registrar_,
350 prefs::kWebKitSansSerifFontFamilyMap, 345 prefs::kWebKitSansSerifFontFamilyMap,
351 webkit_callback); 346 webkit_callback);
352 RegisterFontFamilyMapObserver(&pref_change_registrar_, 347 RegisterFontFamilyMapObserver(&pref_change_registrar_,
353 prefs::kWebKitCursiveFontFamilyMap, 348 prefs::kWebKitCursiveFontFamilyMap,
354 webkit_callback); 349 webkit_callback);
355 RegisterFontFamilyMapObserver(&pref_change_registrar_, 350 RegisterFontFamilyMapObserver(&pref_change_registrar_,
356 prefs::kWebKitFantasyFontFamilyMap, 351 prefs::kWebKitFantasyFontFamilyMap,
357 webkit_callback); 352 webkit_callback);
358 RegisterFontFamilyMapObserver(&pref_change_registrar_, 353 RegisterFontFamilyMapObserver(&pref_change_registrar_,
359 prefs::kWebKitPictographFontFamilyMap, 354 prefs::kWebKitPictographFontFamilyMap,
360 webkit_callback); 355 webkit_callback);
356 #endif // !defined(OS_ANDROID)
361 } 357 }
362 358
363 renderer_preferences_util::UpdateFromSystemSettings( 359 renderer_preferences_util::UpdateFromSystemSettings(
364 web_contents_->GetMutableRendererPrefs(), GetProfile()); 360 web_contents_->GetMutableRendererPrefs(), GetProfile());
365 361
366 #if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) 362 #if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES)
367 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 363 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
368 content::Source<ThemeService>( 364 content::Source<ThemeService>(
369 ThemeServiceFactory::GetForProfile(GetProfile()))); 365 ThemeServiceFactory::GetForProfile(GetProfile())));
370 #endif 366 #endif
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 void PrefsTabHelper::UpdateRendererPreferences() { 569 void PrefsTabHelper::UpdateRendererPreferences() {
574 renderer_preferences_util::UpdateFromSystemSettings( 570 renderer_preferences_util::UpdateFromSystemSettings(
575 web_contents_->GetMutableRendererPrefs(), GetProfile()); 571 web_contents_->GetMutableRendererPrefs(), GetProfile());
576 web_contents_->GetRenderViewHost()->SyncRendererPrefs(); 572 web_contents_->GetRenderViewHost()->SyncRendererPrefs();
577 } 573 }
578 574
579 Profile* PrefsTabHelper::GetProfile() { 575 Profile* PrefsTabHelper::GetProfile() {
580 return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 576 return Profile::FromBrowserContext(web_contents_->GetBrowserContext());
581 } 577 }
582 578
583 void PrefsTabHelper::OnFontFamilyPrefChanged(const std::string& pref_name) { 579 void PrefsTabHelper::OnWebPrefChanged(const std::string& pref_name) {
584 // When a font family pref's value goes from non-empty to the empty string, we 580 // When a font family pref's value goes from non-empty to the empty string, we
585 // must add it to the usual WebPreferences struct passed to the renderer. 581 // must add it to the usual WebPreferences struct passed to the renderer.
586 // 582 //
587 // The empty string means to fall back to the pref for the Common script 583 // The empty string means to fall back to the pref for the Common script
588 // ("Zyyy"). For example, if chrome.fonts.serif.Cyrl is the empty string, it 584 // ("Zyyy"). For example, if chrome.fonts.serif.Cyrl is the empty string, it
589 // means to use chrome.fonts.serif.Zyyy for Cyrillic script. Prefs that are 585 // means to use chrome.fonts.serif.Zyyy for Cyrillic script. Prefs that are
590 // the empty string are normally not passed to WebKit, since there are so many 586 // the empty string are normally not passed to WebKit, since there are so many
591 // of them that it would cause a performance regression. Not passing the pref 587 // of them that it would cause a performance regression. Not passing the pref
592 // is normally okay since WebKit does the desired fallback behavior regardless 588 // is normally okay since WebKit does the desired fallback behavior regardless
593 // of whether the empty string is passed or the pref is not passed at all. But 589 // of whether the empty string is passed or the pref is not passed at all. But
594 // if the pref has changed from non-empty to the empty string, we must let 590 // if the pref has changed from non-empty to the empty string, we must let
595 // WebKit know. 591 // WebKit know.
596 std::string generic_family; 592 std::string generic_family;
597 std::string script; 593 std::string script;
598 if (pref_names_util::ParseFontNamePrefPath(pref_name, 594 if (pref_names_util::ParseFontNamePrefPath(pref_name,
599 &generic_family, 595 &generic_family,
600 &script)) { 596 &script)) {
601 PrefService* prefs = GetProfile()->GetPrefs(); 597 PrefService* prefs = GetProfile()->GetPrefs();
602 std::string pref_value = prefs->GetString(pref_name.c_str()); 598 std::string pref_value = prefs->GetString(pref_name.c_str());
603 if (pref_value.empty()) { 599 if (pref_value.empty()) {
604 WebPreferences web_prefs = 600 WebPreferences web_prefs =
605 web_contents_->GetRenderViewHost()->GetWebkitPreferences(); 601 web_contents_->GetRenderViewHost()->GetWebkitPreferences();
606 OverrideFontFamily(&web_prefs, generic_family, script, std::string()); 602 OverrideFontFamily(&web_prefs, generic_family, script, std::string());
607 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); 603 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs);
608 return; 604 return;
609 } 605 }
610 } 606 }
607
608 UpdateWebPreferences();
611 } 609 }
612
613 void PrefsTabHelper::OnWebPrefChanged(const std::string& pref_name) {
614 #if !defined(OS_ANDROID)
615 OnFontFamilyPrefChanged(pref_name);
616 #endif
617
618 web_contents_->GetRenderViewHost()->OnWebkitPreferencesChanged();
619 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/prefs/prefs_tab_helper.h ('k') | content/browser/android/content_settings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698