Chromium Code Reviews| Index: chrome/browser/ui/prefs/prefs_tab_helper.cc |
| diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/prefs/prefs_tab_helper.cc |
| index aae0a6a8a8b5663fce61fda63f7ded2454ef4fce..3759dcd7ec8699da652d0f4ef5bfb6dfc09eba9c 100644 |
| --- a/chrome/browser/ui/prefs/prefs_tab_helper.cc |
| +++ b/chrome/browser/ui/prefs/prefs_tab_helper.cc |
| @@ -6,6 +6,7 @@ |
| #include "base/stringprintf.h" |
| #include "base/string_util.h" |
| +#include "base/utf_string_conversions.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| @@ -27,40 +28,103 @@ |
| namespace { |
| const char* kPerTabPrefsToObserve[] = { |
| - prefs::kWebKitJavascriptEnabled |
| + prefs::kDefaultCharset, |
| + prefs::kWebKitJavascriptEnabled, |
| + prefs::kWebKitJavascriptCanOpenWindowsAutomatically, |
| + prefs::kWebKitLoadsImagesAutomatically, |
| + prefs::kWebKitPluginsEnabled, |
| + prefs::kWebKitCursiveFontFamily, |
| + prefs::kWebKitFantasyFontFamily, |
| + prefs::kWebKitFixedFontFamily, |
| + prefs::kWebKitSansSerifFontFamily, |
| + prefs::kWebKitSerifFontFamily, |
| + prefs::kWebKitStandardFontFamily, |
| + prefs::kWebKitDefaultFontSize, |
| + prefs::kWebKitDefaultFixedFontSize, |
| + prefs::kWebKitMinimumFontSize, |
| + prefs::kWebKitMinimumLogicalFontSize |
| }; |
| const int kPerTabPrefsToObserveLength = arraysize(kPerTabPrefsToObserve); |
| -void RegisterPerTabUserPrefs(PrefService* prefs) { |
| +static void RegisterFontsAndCharsetPrefs(PrefService* prefs) { |
| + WebPreferences pref_defaults; |
| + |
| + prefs->RegisterLocalizedStringPref(prefs::kDefaultCharset, |
| + IDS_DEFAULT_ENCODING, |
| + PrefService::SYNCABLE_PREF); |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitStandardFontFamily, |
| + IDS_STANDARD_FONT_FAMILY, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitFixedFontFamily, |
| + IDS_FIXED_FONT_FAMILY, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitSerifFontFamily, |
| + IDS_SERIF_FONT_FAMILY, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitSansSerifFontFamily, |
| + IDS_SANS_SERIF_FONT_FAMILY, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitCursiveFontFamily, |
| + IDS_CURSIVE_FONT_FAMILY, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitFantasyFontFamily, |
| + IDS_FANTASY_FONT_FAMILY, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedIntegerPref(prefs::kWebKitDefaultFontSize, |
| + IDS_DEFAULT_FONT_SIZE, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedIntegerPref(prefs::kWebKitDefaultFixedFontSize, |
| + IDS_DEFAULT_FIXED_FONT_SIZE, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumFontSize, |
| + IDS_MINIMUM_FONT_SIZE, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumLogicalFontSize, |
| + IDS_MINIMUM_LOGICAL_FONT_SIZE, |
| + PrefService::UNSYNCABLE_PREF); |
| +} |
| + |
| +static void RegisterPerTabUserPrefs(PrefService* prefs) { |
| WebPreferences pref_defaults; |
| prefs->RegisterBooleanPref(prefs::kWebKitJavascriptEnabled, |
| pref_defaults.javascript_enabled, |
| PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterBooleanPref( |
| + prefs::kWebKitJavascriptCanOpenWindowsAutomatically, |
| + true, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterBooleanPref(prefs::kWebKitLoadsImagesAutomatically, |
| + pref_defaults.loads_images_automatically, |
| + PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterBooleanPref(prefs::kWebKitPluginsEnabled, |
| + pref_defaults.plugins_enabled, |
| + PrefService::UNSYNCABLE_PREF); |
| + RegisterFontsAndCharsetPrefs(prefs); |
| } |
| // The list of prefs we want to observe. |
| const char* kPrefsToObserve[] = { |
| - prefs::kDefaultCharset, |
| prefs::kDefaultZoomLevel, |
| + prefs::kGlobalDefaultCharset, |
| prefs::kEnableReferrers, |
| prefs::kWebKitAllowDisplayingInsecureContent, |
| prefs::kWebKitAllowRunningInsecureContent, |
| - prefs::kWebKitCursiveFontFamily, |
| - prefs::kWebKitDefaultFixedFontSize, |
| - prefs::kWebKitDefaultFontSize, |
| - prefs::kWebKitFantasyFontFamily, |
| - prefs::kWebKitFixedFontFamily, |
| + prefs::kWebKitGlobalCursiveFontFamily, |
| + prefs::kWebKitGlobalDefaultFixedFontSize, |
| + prefs::kWebKitGlobalDefaultFontSize, |
| + prefs::kWebKitGlobalFantasyFontFamily, |
| + prefs::kWebKitGlobalFixedFontFamily, |
| prefs::kWebKitGlobalJavascriptEnabled, |
| prefs::kWebKitJavaEnabled, |
| - prefs::kWebKitLoadsImagesAutomatically, |
| - prefs::kWebKitMinimumFontSize, |
| - prefs::kWebKitMinimumLogicalFontSize, |
| - prefs::kWebKitPluginsEnabled, |
| - prefs::kWebKitSansSerifFontFamily, |
| - prefs::kWebKitSerifFontFamily, |
| - prefs::kWebKitStandardFontFamily, |
| + prefs::kWebKitGlobalLoadsImagesAutomatically, |
| + prefs::kWebKitGlobalMinimumFontSize, |
| + prefs::kWebKitGlobalMinimumLogicalFontSize, |
| + prefs::kWebKitGlobalPluginsEnabled, |
| + prefs::kWebKitGlobalSansSerifFontFamily, |
| + prefs::kWebKitGlobalSerifFontFamily, |
| + prefs::kWebKitGlobalStandardFontFamily, |
| prefs::kWebkitTabsToLinks, |
| prefs::kWebKitUsesUniversalDetector |
| }; |
| @@ -257,6 +321,8 @@ PrefsTabHelper::PrefsTabHelper(TabContentsWrapper* wrapper) |
| PrefsTabHelper::~PrefsTabHelper() { |
| } |
| +static void MigratePreferences(PrefService* prefs); |
| + |
| // static |
| void PrefsTabHelper::RegisterUserPrefs(PrefService* prefs) { |
| WebPreferences pref_defaults; |
| @@ -267,13 +333,13 @@ void PrefsTabHelper::RegisterUserPrefs(PrefService* prefs) { |
| pref_defaults.web_security_enabled, |
| PrefService::UNSYNCABLE_PREF); |
| prefs->RegisterBooleanPref( |
| - prefs::kWebKitJavascriptCanOpenWindowsAutomatically, |
| + prefs::kWebKitGlobalJavascriptCanOpenWindowsAutomatically, |
| true, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterBooleanPref(prefs::kWebKitLoadsImagesAutomatically, |
| + prefs->RegisterBooleanPref(prefs::kWebKitGlobalLoadsImagesAutomatically, |
| pref_defaults.loads_images_automatically, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterBooleanPref(prefs::kWebKitPluginsEnabled, |
| + prefs->RegisterBooleanPref(prefs::kWebKitGlobalPluginsEnabled, |
| pref_defaults.plugins_enabled, |
| PrefService::UNSYNCABLE_PREF); |
| prefs->RegisterBooleanPref(prefs::kWebKitDomPasteEnabled, |
| @@ -310,25 +376,25 @@ void PrefsTabHelper::RegisterUserPrefs(PrefService* prefs) { |
| IDS_ACCEPT_LANGUAGES, |
| PrefService::UNSYNCABLE_PREF); |
| #endif |
| - prefs->RegisterLocalizedStringPref(prefs::kDefaultCharset, |
| + prefs->RegisterLocalizedStringPref(prefs::kGlobalDefaultCharset, |
| IDS_DEFAULT_ENCODING, |
| PrefService::SYNCABLE_PREF); |
| - prefs->RegisterLocalizedStringPref(prefs::kWebKitStandardFontFamily, |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalStandardFontFamily, |
| IDS_STANDARD_FONT_FAMILY, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterLocalizedStringPref(prefs::kWebKitFixedFontFamily, |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalFixedFontFamily, |
| IDS_FIXED_FONT_FAMILY, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterLocalizedStringPref(prefs::kWebKitSerifFontFamily, |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalSerifFontFamily, |
| IDS_SERIF_FONT_FAMILY, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterLocalizedStringPref(prefs::kWebKitSansSerifFontFamily, |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalSansSerifFontFamily, |
| IDS_SANS_SERIF_FONT_FAMILY, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterLocalizedStringPref(prefs::kWebKitCursiveFontFamily, |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalCursiveFontFamily, |
| IDS_CURSIVE_FONT_FAMILY, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterLocalizedStringPref(prefs::kWebKitFantasyFontFamily, |
| + prefs->RegisterLocalizedStringPref(prefs::kWebKitGlobalFantasyFontFamily, |
| IDS_FANTASY_FONT_FAMILY, |
| PrefService::UNSYNCABLE_PREF); |
| @@ -359,18 +425,19 @@ void PrefsTabHelper::RegisterUserPrefs(PrefService* prefs) { |
| RegisterFontFamilyMap(prefs, prefs::kWebKitCursiveFontFamilyMap); |
| RegisterFontFamilyMap(prefs, prefs::kWebKitFantasyFontFamilyMap); |
| - prefs->RegisterLocalizedIntegerPref(prefs::kWebKitDefaultFontSize, |
| + prefs->RegisterLocalizedIntegerPref(prefs::kWebKitGlobalDefaultFontSize, |
| IDS_DEFAULT_FONT_SIZE, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterLocalizedIntegerPref(prefs::kWebKitDefaultFixedFontSize, |
| + prefs->RegisterLocalizedIntegerPref(prefs::kWebKitGlobalDefaultFixedFontSize, |
| IDS_DEFAULT_FIXED_FONT_SIZE, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumFontSize, |
| + prefs->RegisterLocalizedIntegerPref(prefs::kWebKitGlobalMinimumFontSize, |
| IDS_MINIMUM_FONT_SIZE, |
| PrefService::UNSYNCABLE_PREF); |
| - prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumLogicalFontSize, |
| - IDS_MINIMUM_LOGICAL_FONT_SIZE, |
| - PrefService::UNSYNCABLE_PREF); |
| + prefs->RegisterLocalizedIntegerPref( |
| + prefs::kWebKitGlobalMinimumLogicalFontSize, |
| + IDS_MINIMUM_LOGICAL_FONT_SIZE, |
| + PrefService::UNSYNCABLE_PREF); |
| prefs->RegisterLocalizedBooleanPref(prefs::kWebKitUsesUniversalDetector, |
| IDS_USES_UNIVERSAL_DETECTOR, |
| PrefService::SYNCABLE_PREF); |
| @@ -380,6 +447,7 @@ void PrefsTabHelper::RegisterUserPrefs(PrefService* prefs) { |
| prefs->RegisterStringPref(prefs::kRecentlySelectedEncoding, |
| "", |
| PrefService::UNSYNCABLE_PREF); |
| + MigratePreferences(prefs); |
| } |
| void PrefsTabHelper::RenderViewCreated(RenderViewHost* render_view_host) { |
| @@ -408,7 +476,8 @@ void PrefsTabHelper::Observe(int type, |
| DCHECK(content::Source<PrefService>(source).ptr() == |
| wrapper_->profile()->GetPrefs() || |
| content::Source<PrefService>(source).ptr() == per_tab_prefs_); |
| - if ((*pref_name_in == prefs::kDefaultCharset) || |
| + if ((*pref_name_in == prefs::kDefaultCharset || |
| + *pref_name_in == prefs::kGlobalDefaultCharset) || |
| StartsWithASCII(*pref_name_in, "webkit.webprefs.", true)) { |
| UpdateWebPreferences(); |
| } else if (*pref_name_in == prefs::kDefaultZoomLevel || |
| @@ -429,6 +498,36 @@ void PrefsTabHelper::UpdateWebPreferences() { |
| WebPreferences prefs = rvhd->GetWebkitPrefs(); |
| prefs.javascript_enabled = |
| per_tab_prefs_->GetBoolean(prefs::kWebKitJavascriptEnabled); |
| + prefs.javascript_can_open_windows_automatically = |
| + per_tab_prefs_->GetBoolean( |
| + prefs::kWebKitJavascriptCanOpenWindowsAutomatically); |
| + prefs.loads_images_automatically = |
| + per_tab_prefs_->GetBoolean(prefs::kWebKitLoadsImagesAutomatically); |
| + prefs.plugins_enabled = |
| + per_tab_prefs_->GetBoolean(prefs::kWebKitPluginsEnabled); |
| + prefs.standard_font_family = |
| + UTF8ToUTF16(per_tab_prefs_->GetString(prefs::kWebKitStandardFontFamily)); |
| + prefs.fixed_font_family = |
| + UTF8ToUTF16(per_tab_prefs_->GetString(prefs::kWebKitFixedFontFamily)); |
| + prefs.serif_font_family = |
| + UTF8ToUTF16(per_tab_prefs_->GetString(prefs::kWebKitSerifFontFamily)); |
| + prefs.sans_serif_font_family = |
| + UTF8ToUTF16(per_tab_prefs_->GetString(prefs::kWebKitSansSerifFontFamily)); |
| + prefs.cursive_font_family = |
| + UTF8ToUTF16(per_tab_prefs_->GetString(prefs::kWebKitCursiveFontFamily)); |
| + prefs.fantasy_font_family = |
| + UTF8ToUTF16(per_tab_prefs_->GetString(prefs::kWebKitFantasyFontFamily)); |
| + prefs.default_font_size = |
| + per_tab_prefs_->GetInteger(prefs::kWebKitDefaultFontSize); |
| + prefs.default_fixed_font_size = |
| + per_tab_prefs_->GetInteger(prefs::kWebKitDefaultFixedFontSize); |
| + prefs.minimum_font_size = |
| + per_tab_prefs_->GetInteger(prefs::kWebKitMinimumFontSize); |
| + prefs.minimum_logical_font_size = |
| + per_tab_prefs_->GetInteger(prefs::kWebKitMinimumLogicalFontSize); |
| + prefs.default_encoding = |
| + per_tab_prefs_->GetString(prefs::kDefaultCharset); |
| + |
| tab_contents()->render_view_host()->UpdateWebkitPreferences(prefs); |
| } |
| @@ -437,3 +536,51 @@ void PrefsTabHelper::UpdateRendererPreferences() { |
| tab_contents()->GetMutableRendererPrefs(), wrapper_->profile()); |
| tab_contents()->render_view_host()->SyncRendererPrefs(); |
| } |
| + |
| +const char* const kPrefNamesToMigrateFrom[] = { |
| + prefs::kDefaultCharset, |
| + prefs::kWebKitCursiveFontFamily, |
| + prefs::kWebKitDefaultFixedFontSize, |
| + prefs::kWebKitDefaultFontSize, |
| + prefs::kWebKitFantasyFontFamily, |
| + prefs::kWebKitFixedFontFamily, |
| + prefs::kWebKitMinimumFontSize, |
| + prefs::kWebKitMinimumLogicalFontSize, |
| + prefs::kWebKitSansSerifFontFamily, |
| + prefs::kWebKitSerifFontFamily, |
| + prefs::kWebKitStandardFontFamily, |
| +}; |
| + |
| +const char* const kPrefNamesToMigrateTo[] = { |
| + prefs::kGlobalDefaultCharset, |
| + prefs::kWebKitGlobalCursiveFontFamily, |
| + prefs::kWebKitGlobalDefaultFixedFontSize, |
| + prefs::kWebKitGlobalDefaultFontSize, |
| + prefs::kWebKitGlobalFantasyFontFamily, |
| + prefs::kWebKitGlobalFixedFontFamily, |
| + prefs::kWebKitGlobalMinimumFontSize, |
| + prefs::kWebKitGlobalMinimumLogicalFontSize, |
| + prefs::kWebKitGlobalSansSerifFontFamily, |
| + prefs::kWebKitGlobalSerifFontFamily, |
| + prefs::kWebKitGlobalStandardFontFamily, |
| +}; |
| + |
| +static void MigratePreferences(PrefService* prefs) { |
| + prefs->RegisterBooleanPref(prefs::kWebKitSettingsMigratedToGlobal, |
| + false, |
| + PrefService::UNSYNCABLE_PREF); |
| + if (prefs->GetBoolean(prefs::kWebKitSettingsMigratedToGlobal)) { |
|
Mattias Nissler (ping if slow)
2011/12/15 15:37:29
no need for curlies.
mnaganov (inactive)
2011/12/15 16:45:17
The code is now gone.
|
| + return; |
| + } |
| + const int kPrefsToMigrateLength = arraysize(kPrefNamesToMigrateFrom); |
| + DCHECK(kPrefsToMigrateLength == arraysize(kPrefNamesToMigrateTo)); |
|
Mattias Nissler (ping if slow)
2011/12/15 15:37:29
It seems like you should rather use an anonymous s
mnaganov (inactive)
2011/12/15 16:45:17
Done.
|
| + RegisterFontsAndCharsetPrefs(prefs); |
| + for (int i = 0; i < kPrefsToMigrateLength; ++i) { |
| + const PrefService::Preference *pref = |
| + prefs->FindPreference(kPrefNamesToMigrateFrom[i]); |
| + if (!pref) continue; |
| + prefs->Set(kPrefNamesToMigrateTo[i], *pref->GetValue()->DeepCopy()); |
| + prefs->ClearPref(kPrefNamesToMigrateFrom[i]); |
|
Mattias Nissler (ping if slow)
2011/12/15 15:37:29
Maybe we can instead use the signal "all old prefs
mnaganov (inactive)
2011/12/15 16:45:17
Good idea! I have realized that we don't even need
|
| + } |
| + prefs->SetBoolean(prefs::kWebKitSettingsMigratedToGlobal, true); |
| +} |