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

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

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