| 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/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalCursiveFontFamily, | 90 prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalCursiveFontFamily, |
| 91 IDS_CURSIVE_FONT_FAMILY, | 91 IDS_CURSIVE_FONT_FAMILY, |
| 92 PrefService::UNSYNCABLE_PREF); | 92 PrefService::UNSYNCABLE_PREF); |
| 93 prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalFantasyFontFamily, | 93 prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalFantasyFontFamily, |
| 94 IDS_FANTASY_FONT_FAMILY, | 94 IDS_FANTASY_FONT_FAMILY, |
| 95 PrefService::UNSYNCABLE_PREF); | 95 PrefService::UNSYNCABLE_PREF); |
| 96 } | 96 } |
| 97 | 97 |
| 98 // The list of prefs we want to observe. | 98 // The list of prefs we want to observe. |
| 99 const char* kPrefsToObserve[] = { | 99 const char* kPrefsToObserve[] = { |
| 100 prefs::kDefaultZoomLevel, | |
| 101 prefs::kDefaultCharset, | 100 prefs::kDefaultCharset, |
| 102 prefs::kEnableReferrers, | |
| 103 prefs::kEnableDoNotTrack, | |
| 104 prefs::kWebKitAllowDisplayingInsecureContent, | 101 prefs::kWebKitAllowDisplayingInsecureContent, |
| 105 prefs::kWebKitAllowRunningInsecureContent, | 102 prefs::kWebKitAllowRunningInsecureContent, |
| 106 prefs::kWebKitDefaultFixedFontSize, | 103 prefs::kWebKitDefaultFixedFontSize, |
| 107 prefs::kWebKitDefaultFontSize, | 104 prefs::kWebKitDefaultFontSize, |
| 108 #if defined(OS_ANDROID) | 105 #if defined(OS_ANDROID) |
| 109 prefs::kWebKitFontScaleFactor, | 106 prefs::kWebKitFontScaleFactor, |
| 110 prefs::kWebKitForceEnableZoom, | 107 prefs::kWebKitForceEnableZoom, |
| 111 #endif | 108 #endif |
| 112 prefs::kWebKitJavascriptEnabled, | 109 prefs::kWebKitJavascriptEnabled, |
| 113 prefs::kWebKitJavaEnabled, | 110 prefs::kWebKitJavaEnabled, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 133 const char* pref_name = pref_name_str.c_str(); | 130 const char* pref_name = pref_name_str.c_str(); |
| 134 if (fonts_with_defaults.find(pref_name) == fonts_with_defaults.end()) { | 131 if (fonts_with_defaults.find(pref_name) == fonts_with_defaults.end()) { |
| 135 // We haven't already set a default value for this font preference, so set | 132 // We haven't already set a default value for this font preference, so set |
| 136 // an empty string as the default. | 133 // an empty string as the default. |
| 137 prefs->RegisterStringPref(pref_name, "", PrefService::UNSYNCABLE_PREF); | 134 prefs->RegisterStringPref(pref_name, "", PrefService::UNSYNCABLE_PREF); |
| 138 } | 135 } |
| 139 } | 136 } |
| 140 } | 137 } |
| 141 | 138 |
| 142 // Registers |obs| to observe per-script font prefs under the path |map_name|. | 139 // Registers |obs| to observe per-script font prefs under the path |map_name|. |
| 143 void RegisterFontFamilyMapObserver(PrefChangeRegistrar* registrar, | 140 void RegisterFontFamilyMapObserver( |
| 144 const char* map_name, | 141 PrefChangeRegistrar* registrar, |
| 145 PrefObserver* obs) { | 142 const char* map_name, |
| 143 const PrefChangeRegistrar::NamedChangeCallback& obs) { |
| 144 DCHECK(StartsWithASCII(map_name, "webkit.webprefs.", true)); |
| 146 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { | 145 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { |
| 147 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; | 146 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; |
| 148 std::string pref_name = base::StringPrintf("%s.%s", map_name, script); | 147 std::string pref_name = base::StringPrintf("%s.%s", map_name, script); |
| 149 registrar->Add(pref_name.c_str(), obs); | 148 registrar->Add(pref_name.c_str(), obs); |
| 150 } | 149 } |
| 151 } | 150 } |
| 152 | 151 |
| 153 struct FontDefault { | 152 struct FontDefault { |
| 154 const char* pref_name; | 153 const char* pref_name; |
| 155 int resource_id; | 154 int resource_id; |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 (*map)[script] = UTF8ToUTF16(pref_value); | 377 (*map)[script] = UTF8ToUTF16(pref_value); |
| 379 } | 378 } |
| 380 | 379 |
| 381 } // namespace | 380 } // namespace |
| 382 | 381 |
| 383 PrefsTabHelper::PrefsTabHelper(WebContents* contents) | 382 PrefsTabHelper::PrefsTabHelper(WebContents* contents) |
| 384 : web_contents_(contents) { | 383 : web_contents_(contents) { |
| 385 PrefService* prefs = GetProfile()->GetPrefs(); | 384 PrefService* prefs = GetProfile()->GetPrefs(); |
| 386 pref_change_registrar_.Init(prefs); | 385 pref_change_registrar_.Init(prefs); |
| 387 if (prefs) { | 386 if (prefs) { |
| 388 for (int i = 0; i < kPrefsToObserveLength; ++i) | 387 base::Closure renderer_callback = base::Bind( |
| 389 pref_change_registrar_.Add(kPrefsToObserve[i], this); | 388 &PrefsTabHelper::UpdateRendererPreferences, base::Unretained(this)); |
| 389 pref_change_registrar_.Add(prefs::kDefaultZoomLevel, renderer_callback); |
| 390 pref_change_registrar_.Add(prefs::kEnableDoNotTrack, renderer_callback); |
| 391 pref_change_registrar_.Add(prefs::kEnableReferrers, renderer_callback); |
| 392 |
| 393 PrefChangeRegistrar::NamedChangeCallback webkit_callback = base::Bind( |
| 394 &PrefsTabHelper::OnWebPrefChanged, base::Unretained(this)); |
| 395 for (int i = 0; i < kPrefsToObserveLength; ++i) { |
| 396 const char* pref_name = kPrefsToObserve[i]; |
| 397 DCHECK(std::string(pref_name) == prefs::kDefaultCharset || |
| 398 StartsWithASCII(pref_name, "webkit.webprefs.", true)); |
| 399 pref_change_registrar_.Add(pref_name, webkit_callback); |
| 400 } |
| 390 | 401 |
| 391 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 402 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 392 prefs::kWebKitStandardFontFamilyMap, this); | 403 prefs::kWebKitStandardFontFamilyMap, |
| 404 webkit_callback); |
| 393 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 405 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 394 prefs::kWebKitFixedFontFamilyMap, this); | 406 prefs::kWebKitFixedFontFamilyMap, |
| 407 webkit_callback); |
| 395 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 408 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 396 prefs::kWebKitSerifFontFamilyMap, this); | 409 prefs::kWebKitSerifFontFamilyMap, |
| 410 webkit_callback); |
| 397 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 411 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 398 prefs::kWebKitSansSerifFontFamilyMap, this); | 412 prefs::kWebKitSansSerifFontFamilyMap, |
| 413 webkit_callback); |
| 399 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 414 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 400 prefs::kWebKitCursiveFontFamilyMap, this); | 415 prefs::kWebKitCursiveFontFamilyMap, |
| 416 webkit_callback); |
| 401 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 417 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 402 prefs::kWebKitFantasyFontFamilyMap, this); | 418 prefs::kWebKitFantasyFontFamilyMap, |
| 419 webkit_callback); |
| 403 RegisterFontFamilyMapObserver(&pref_change_registrar_, | 420 RegisterFontFamilyMapObserver(&pref_change_registrar_, |
| 404 prefs::kWebKitPictographFontFamilyMap, this); | 421 prefs::kWebKitPictographFontFamilyMap, |
| 422 webkit_callback); |
| 405 } | 423 } |
| 406 | 424 |
| 407 renderer_preferences_util::UpdateFromSystemSettings( | 425 renderer_preferences_util::UpdateFromSystemSettings( |
| 408 web_contents_->GetMutableRendererPrefs(), GetProfile()); | 426 web_contents_->GetMutableRendererPrefs(), GetProfile()); |
| 409 | 427 |
| 410 registrar_.Add(this, chrome::NOTIFICATION_USER_STYLE_SHEET_UPDATED, | 428 registrar_.Add(this, chrome::NOTIFICATION_USER_STYLE_SHEET_UPDATED, |
| 411 content::NotificationService::AllSources()); | 429 content::NotificationService::AllSources()); |
| 412 #if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) | 430 #if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(ENABLE_THEMES) |
| 413 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, | 431 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, |
| 414 content::Source<ThemeService>( | 432 content::Source<ThemeService>( |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 578 case chrome::NOTIFICATION_BROWSER_THEME_CHANGED: { | 596 case chrome::NOTIFICATION_BROWSER_THEME_CHANGED: { |
| 579 UpdateRendererPreferences(); | 597 UpdateRendererPreferences(); |
| 580 break; | 598 break; |
| 581 } | 599 } |
| 582 #endif | 600 #endif |
| 583 default: | 601 default: |
| 584 NOTREACHED(); | 602 NOTREACHED(); |
| 585 } | 603 } |
| 586 } | 604 } |
| 587 | 605 |
| 588 void PrefsTabHelper::OnPreferenceChanged(PrefServiceBase* service, | |
| 589 const std::string& pref_name_in) { | |
| 590 DCHECK_EQ(GetProfile()->GetPrefs(), service); | |
| 591 if (pref_name_in == prefs::kDefaultCharset || | |
| 592 StartsWithASCII(pref_name_in, "webkit.webprefs.", true)) { | |
| 593 OnWebPrefChanged(pref_name_in); | |
| 594 } else if (pref_name_in == prefs::kDefaultZoomLevel || | |
| 595 pref_name_in == prefs::kEnableReferrers || | |
| 596 pref_name_in == prefs::kEnableDoNotTrack) { | |
| 597 UpdateRendererPreferences(); | |
| 598 } else { | |
| 599 NOTREACHED() << "unexpected pref change notification" << pref_name_in; | |
| 600 } | |
| 601 } | |
| 602 | |
| 603 void PrefsTabHelper::UpdateWebPreferences() { | 606 void PrefsTabHelper::UpdateWebPreferences() { |
| 604 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences( | 607 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences( |
| 605 web_contents_->GetRenderViewHost()->GetWebkitPreferences()); | 608 web_contents_->GetRenderViewHost()->GetWebkitPreferences()); |
| 606 } | 609 } |
| 607 | 610 |
| 608 void PrefsTabHelper::UpdateRendererPreferences() { | 611 void PrefsTabHelper::UpdateRendererPreferences() { |
| 609 renderer_preferences_util::UpdateFromSystemSettings( | 612 renderer_preferences_util::UpdateFromSystemSettings( |
| 610 web_contents_->GetMutableRendererPrefs(), GetProfile()); | 613 web_contents_->GetMutableRendererPrefs(), GetProfile()); |
| 611 web_contents_->GetRenderViewHost()->SyncRendererPrefs(); | 614 web_contents_->GetRenderViewHost()->SyncRendererPrefs(); |
| 612 } | 615 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 639 WebPreferences web_prefs = | 642 WebPreferences web_prefs = |
| 640 web_contents_->GetRenderViewHost()->GetWebkitPreferences(); | 643 web_contents_->GetRenderViewHost()->GetWebkitPreferences(); |
| 641 OverrideFontFamily(&web_prefs, generic_family, script, ""); | 644 OverrideFontFamily(&web_prefs, generic_family, script, ""); |
| 642 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); | 645 web_contents_->GetRenderViewHost()->UpdateWebkitPreferences(web_prefs); |
| 643 return; | 646 return; |
| 644 } | 647 } |
| 645 } | 648 } |
| 646 | 649 |
| 647 UpdateWebPreferences(); | 650 UpdateWebPreferences(); |
| 648 } | 651 } |
| OLD | NEW |