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() { |