Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3693)

Unified Diff: chrome/browser/ui/tab_contents/tab_contents_wrapper.cc

Issue 8716004: Add per-tab "JavaScript enabled" preference. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698