| 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 |