| 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 bcf0600da1b6aea5ea31d7e0ea414072eb73009f..47ea5d8c69251ac7cf155a695f53d2b282a50f52 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"
|
| @@ -29,40 +30,103 @@ using content::WebContents;
|
| 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
|
| };
|
| @@ -211,6 +275,49 @@ const PerScriptFontDefault kPerScriptFontDefaults[] = {
|
| const size_t kPerScriptFontDefaultsLength = arraysize(kPerScriptFontDefaults);
|
| #endif
|
|
|
| +const struct {
|
| + const char* from;
|
| + const char* to;
|
| +} kPrefNamesToMigrate[] = {
|
| + { prefs::kDefaultCharset,
|
| + prefs::kGlobalDefaultCharset },
|
| + { prefs::kWebKitCursiveFontFamily,
|
| + prefs::kWebKitGlobalCursiveFontFamily },
|
| + { prefs::kWebKitDefaultFixedFontSize,
|
| + prefs::kWebKitGlobalDefaultFixedFontSize },
|
| + { prefs::kWebKitDefaultFontSize,
|
| + prefs::kWebKitGlobalDefaultFontSize },
|
| + { prefs::kWebKitFantasyFontFamily,
|
| + prefs::kWebKitGlobalFantasyFontFamily },
|
| + { prefs::kWebKitFixedFontFamily,
|
| + prefs::kWebKitGlobalFixedFontFamily },
|
| + { prefs::kWebKitMinimumFontSize,
|
| + prefs::kWebKitGlobalMinimumFontSize },
|
| + { prefs::kWebKitMinimumLogicalFontSize,
|
| + prefs::kWebKitGlobalMinimumLogicalFontSize },
|
| + { prefs::kWebKitSansSerifFontFamily,
|
| + prefs::kWebKitGlobalSansSerifFontFamily },
|
| + { prefs::kWebKitSerifFontFamily,
|
| + prefs::kWebKitGlobalSerifFontFamily },
|
| + { prefs::kWebKitStandardFontFamily,
|
| + prefs::kWebKitGlobalStandardFontFamily },
|
| +};
|
| +
|
| +const int kPrefsToMigrateLength = ARRAYSIZE_UNSAFE(kPrefNamesToMigrate);
|
| +
|
| +static void MigratePreferences(PrefService* prefs) {
|
| + RegisterFontsAndCharsetPrefs(prefs);
|
| + for (int i = 0; i < kPrefsToMigrateLength; ++i) {
|
| + const PrefService::Preference *pref =
|
| + prefs->FindPreference(kPrefNamesToMigrate[i].from);
|
| + if (!pref) continue;
|
| + if (!pref->IsDefaultValue()) {
|
| + prefs->Set(kPrefNamesToMigrate[i].to, *pref->GetValue()->DeepCopy());
|
| + }
|
| + prefs->UnregisterPreference(kPrefNamesToMigrate[i].from);
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| PrefsTabHelper::PrefsTabHelper(WebContents* contents)
|
| @@ -268,13 +375,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,
|
| @@ -311,25 +418,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);
|
|
|
| @@ -360,18 +467,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);
|
| @@ -381,6 +489,7 @@ void PrefsTabHelper::RegisterUserPrefs(PrefService* prefs) {
|
| prefs->RegisterStringPref(prefs::kRecentlySelectedEncoding,
|
| "",
|
| PrefService::UNSYNCABLE_PREF);
|
| + MigratePreferences(prefs);
|
| }
|
|
|
| void PrefsTabHelper::RenderViewCreated(RenderViewHost* render_view_host) {
|
| @@ -409,7 +518,8 @@ void PrefsTabHelper::Observe(int type,
|
| DCHECK(content::Source<PrefService>(source).ptr() ==
|
| GetProfile()->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 ||
|
| @@ -431,6 +541,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);
|
| +
|
| web_contents()->GetRenderViewHost()->UpdateWebkitPreferences(prefs);
|
| }
|
|
|
|
|