| Index: chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
|
| diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
|
| index 04132501aa76844221940661dd5baaeec44c21fe..368ed2790bf480a0e3dc91b91d9d19f07fe746b8 100644
|
| --- a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
|
| +++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
|
| @@ -84,8 +84,8 @@ const char* kPrefsToObserve[] = {
|
| prefs::kWebKitDefaultFontSize,
|
| prefs::kWebKitFantasyFontFamily,
|
| prefs::kWebKitFixedFontFamily,
|
| + prefs::kWebKitGlobalJavascriptEnabled,
|
| prefs::kWebKitJavaEnabled,
|
| - prefs::kWebKitJavascriptEnabled,
|
| prefs::kWebKitLoadsImagesAutomatically,
|
| prefs::kWebKitMinimumFontSize,
|
| prefs::kWebKitMinimumLogicalFontSize,
|
| @@ -99,6 +99,12 @@ const char* kPrefsToObserve[] = {
|
|
|
| const int kPrefsToObserveLength = arraysize(kPrefsToObserve);
|
|
|
| +const char* kPerTabPrefsToObserve[] = {
|
| + prefs::kWebKitJavascriptEnabled
|
| +};
|
| +
|
| +const int kPerTabPrefsToObserveLength = arraysize(kPerTabPrefsToObserve);
|
| +
|
| // Registers a preference under the path |map_name| for each script used for
|
| // per-script font prefs. For example, if |map_name| is "fonts.serif", then
|
| // "fonts.serif.Arab", "fonts.serif.Hang", etc. are registered.
|
| @@ -330,7 +336,14 @@ TabContentsWrapper::TabContentsWrapper(TabContents* contents)
|
| ThemeServiceFactory::GetForProfile(profile())));
|
| #endif
|
|
|
| + RegisterPerTabUserPrefs(per_tab_prefs_.get());
|
| +
|
| // Register for notifications about all interested prefs change.
|
| + per_tab_pref_change_registrar_.Init(per_tab_prefs_.get());
|
| + for (int i = 0; i < kPerTabPrefsToObserveLength; ++i) {
|
| + per_tab_pref_change_registrar_.Add(kPerTabPrefsToObserve[i], this);
|
| + }
|
| +
|
| PrefService* prefs = profile()->GetPrefs();
|
| pref_change_registrar_.Init(prefs);
|
| if (prefs) {
|
| @@ -360,6 +373,7 @@ TabContentsWrapper::~TabContentsWrapper() {
|
|
|
| // Need to tear down infobars before the TabContents goes away.
|
| infobar_tab_helper_.reset();
|
| + per_tab_pref_change_registrar_.RemoveAll();
|
| }
|
|
|
| base::PropertyAccessor<TabContentsWrapper*>*
|
| @@ -374,7 +388,7 @@ void TabContentsWrapper::RegisterUserPrefs(PrefService* prefs) {
|
| PrefService::SYNCABLE_PREF);
|
|
|
| WebPreferences pref_defaults;
|
| - prefs->RegisterBooleanPref(prefs::kWebKitJavascriptEnabled,
|
| + prefs->RegisterBooleanPref(prefs::kWebKitGlobalJavascriptEnabled,
|
| pref_defaults.javascript_enabled,
|
| PrefService::UNSYNCABLE_PREF);
|
| prefs->RegisterBooleanPref(prefs::kWebKitWebSecurityEnabled,
|
| @@ -632,7 +646,9 @@ void TabContentsWrapper::Observe(int type,
|
| case chrome::NOTIFICATION_PREF_CHANGED: {
|
| std::string* pref_name_in = content::Details<std::string>(details).ptr();
|
| DCHECK(content::Source<PrefService>(source).ptr() ==
|
| - profile()->GetPrefs());
|
| + profile()->GetPrefs() ||
|
| + content::Source<PrefService>(source).ptr() ==
|
| + per_tab_prefs_.get());
|
| if (*pref_name_in == prefs::kAlternateErrorPagesEnabled) {
|
| UpdateAlternateErrorPageURL(render_view_host());
|
| } else if ((*pref_name_in == prefs::kDefaultCharset) ||
|
| @@ -684,14 +700,25 @@ GURL TabContentsWrapper::GetAlternateErrorPageURL() const {
|
| return url;
|
| }
|
|
|
| +void TabContentsWrapper::RegisterPerTabUserPrefs(PrefService* prefs)
|
| +{
|
| + WebPreferences pref_defaults;
|
| +
|
| + prefs->RegisterBooleanPref(prefs::kWebKitJavascriptEnabled,
|
| + pref_defaults.javascript_enabled,
|
| + PrefService::UNSYNCABLE_PREF);
|
| +}
|
| +
|
| void TabContentsWrapper::UpdateAlternateErrorPageURL(RenderViewHost* rvh) {
|
| rvh->SetAltErrorPageURL(GetAlternateErrorPageURL());
|
| }
|
|
|
| void TabContentsWrapper::UpdateWebPreferences() {
|
| RenderViewHostDelegate* rvhd = tab_contents();
|
| - tab_contents()->render_view_host()->UpdateWebkitPreferences(
|
| - rvhd->GetWebkitPrefs());
|
| + WebPreferences prefs = rvhd->GetWebkitPrefs();
|
| + prefs.javascript_enabled =
|
| + per_tab_prefs_->GetBoolean(prefs::kWebKitJavascriptEnabled);
|
| + tab_contents()->render_view_host()->UpdateWebkitPreferences(prefs);
|
| }
|
|
|
| void TabContentsWrapper::UpdateRendererPreferences() {
|
|
|