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

Side by Side 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 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 5 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 #if defined (ENABLE_SAFE_BROWSING) 77 #if defined (ENABLE_SAFE_BROWSING)
78 prefs::kSafeBrowsingEnabled, 78 prefs::kSafeBrowsingEnabled,
79 #endif 79 #endif
80 prefs::kWebKitAllowDisplayingInsecureContent, 80 prefs::kWebKitAllowDisplayingInsecureContent,
81 prefs::kWebKitAllowRunningInsecureContent, 81 prefs::kWebKitAllowRunningInsecureContent,
82 prefs::kWebKitCursiveFontFamily, 82 prefs::kWebKitCursiveFontFamily,
83 prefs::kWebKitDefaultFixedFontSize, 83 prefs::kWebKitDefaultFixedFontSize,
84 prefs::kWebKitDefaultFontSize, 84 prefs::kWebKitDefaultFontSize,
85 prefs::kWebKitFantasyFontFamily, 85 prefs::kWebKitFantasyFontFamily,
86 prefs::kWebKitFixedFontFamily, 86 prefs::kWebKitFixedFontFamily,
87 prefs::kWebKitGlobalJavascriptEnabled,
87 prefs::kWebKitJavaEnabled, 88 prefs::kWebKitJavaEnabled,
88 prefs::kWebKitJavascriptEnabled,
89 prefs::kWebKitLoadsImagesAutomatically, 89 prefs::kWebKitLoadsImagesAutomatically,
90 prefs::kWebKitMinimumFontSize, 90 prefs::kWebKitMinimumFontSize,
91 prefs::kWebKitMinimumLogicalFontSize, 91 prefs::kWebKitMinimumLogicalFontSize,
92 prefs::kWebKitPluginsEnabled, 92 prefs::kWebKitPluginsEnabled,
93 prefs::kWebKitSansSerifFontFamily, 93 prefs::kWebKitSansSerifFontFamily,
94 prefs::kWebKitSerifFontFamily, 94 prefs::kWebKitSerifFontFamily,
95 prefs::kWebKitStandardFontFamily, 95 prefs::kWebKitStandardFontFamily,
96 prefs::kWebkitTabsToLinks, 96 prefs::kWebkitTabsToLinks,
97 prefs::kWebKitUsesUniversalDetector 97 prefs::kWebKitUsesUniversalDetector
98 }; 98 };
99 99
100 const int kPrefsToObserveLength = arraysize(kPrefsToObserve); 100 const int kPrefsToObserveLength = arraysize(kPrefsToObserve);
101 101
102 const char* kPerTabPrefsToObserve[] = {
103 prefs::kWebKitJavascriptEnabled
104 };
105
106 const int kPerTabPrefsToObserveLength = arraysize(kPerTabPrefsToObserve);
107
102 // Registers a preference under the path |map_name| for each script used for 108 // Registers a preference under the path |map_name| for each script used for
103 // per-script font prefs. For example, if |map_name| is "fonts.serif", then 109 // per-script font prefs. For example, if |map_name| is "fonts.serif", then
104 // "fonts.serif.Arab", "fonts.serif.Hang", etc. are registered. 110 // "fonts.serif.Arab", "fonts.serif.Hang", etc. are registered.
105 void RegisterFontFamilyMap(PrefService* prefs, const char* map_name) { 111 void RegisterFontFamilyMap(PrefService* prefs, const char* map_name) {
106 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { 112 for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) {
107 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; 113 const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i];
108 std::string pref_name_str = base::StringPrintf("%s.%s", map_name, script); 114 std::string pref_name_str = base::StringPrintf("%s.%s", map_name, script);
109 const char* pref_name = pref_name_str.c_str(); 115 const char* pref_name = pref_name_str.c_str();
110 if (!prefs->FindPreference(pref_name)) 116 if (!prefs->FindPreference(pref_name))
111 prefs->RegisterStringPref(pref_name, "", PrefService::UNSYNCABLE_PREF); 117 prefs->RegisterStringPref(pref_name, "", PrefService::UNSYNCABLE_PREF);
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 registrar_.Add(this, chrome::NOTIFICATION_GOOGLE_URL_UPDATED, 329 registrar_.Add(this, chrome::NOTIFICATION_GOOGLE_URL_UPDATED,
324 content::NotificationService::AllSources()); 330 content::NotificationService::AllSources());
325 registrar_.Add(this, chrome::NOTIFICATION_USER_STYLE_SHEET_UPDATED, 331 registrar_.Add(this, chrome::NOTIFICATION_USER_STYLE_SHEET_UPDATED,
326 content::NotificationService::AllSources()); 332 content::NotificationService::AllSources());
327 #if defined(OS_POSIX) && !defined(OS_MACOSX) 333 #if defined(OS_POSIX) && !defined(OS_MACOSX)
328 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 334 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
329 content::Source<ThemeService>( 335 content::Source<ThemeService>(
330 ThemeServiceFactory::GetForProfile(profile()))); 336 ThemeServiceFactory::GetForProfile(profile())));
331 #endif 337 #endif
332 338
339 RegisterPerTabUserPrefs(per_tab_prefs_.get());
340
333 // Register for notifications about all interested prefs change. 341 // Register for notifications about all interested prefs change.
342 per_tab_pref_change_registrar_.Init(per_tab_prefs_.get());
343 for (int i = 0; i < kPerTabPrefsToObserveLength; ++i) {
344 per_tab_pref_change_registrar_.Add(kPerTabPrefsToObserve[i], this);
345 }
346
334 PrefService* prefs = profile()->GetPrefs(); 347 PrefService* prefs = profile()->GetPrefs();
335 pref_change_registrar_.Init(prefs); 348 pref_change_registrar_.Init(prefs);
336 if (prefs) { 349 if (prefs) {
337 for (int i = 0; i < kPrefsToObserveLength; ++i) 350 for (int i = 0; i < kPrefsToObserveLength; ++i)
338 pref_change_registrar_.Add(kPrefsToObserve[i], this); 351 pref_change_registrar_.Add(kPrefsToObserve[i], this);
339 352
340 RegisterFontFamilyMapObserver(&pref_change_registrar_, 353 RegisterFontFamilyMapObserver(&pref_change_registrar_,
341 prefs::kWebKitStandardFontFamilyMap, this); 354 prefs::kWebKitStandardFontFamilyMap, this);
342 RegisterFontFamilyMapObserver(&pref_change_registrar_, 355 RegisterFontFamilyMapObserver(&pref_change_registrar_,
343 prefs::kWebKitFixedFontFamilyMap, this); 356 prefs::kWebKitFixedFontFamilyMap, this);
344 RegisterFontFamilyMapObserver(&pref_change_registrar_, 357 RegisterFontFamilyMapObserver(&pref_change_registrar_,
345 prefs::kWebKitSerifFontFamilyMap, this); 358 prefs::kWebKitSerifFontFamilyMap, this);
346 RegisterFontFamilyMapObserver(&pref_change_registrar_, 359 RegisterFontFamilyMapObserver(&pref_change_registrar_,
347 prefs::kWebKitSansSerifFontFamilyMap, this); 360 prefs::kWebKitSansSerifFontFamilyMap, this);
348 RegisterFontFamilyMapObserver(&pref_change_registrar_, 361 RegisterFontFamilyMapObserver(&pref_change_registrar_,
349 prefs::kWebKitCursiveFontFamilyMap, this); 362 prefs::kWebKitCursiveFontFamilyMap, this);
350 RegisterFontFamilyMapObserver(&pref_change_registrar_, 363 RegisterFontFamilyMapObserver(&pref_change_registrar_,
351 prefs::kWebKitFantasyFontFamilyMap, this); 364 prefs::kWebKitFantasyFontFamilyMap, this);
352 } 365 }
353 366
354 renderer_preferences_util::UpdateFromSystemSettings( 367 renderer_preferences_util::UpdateFromSystemSettings(
355 tab_contents()->GetMutableRendererPrefs(), profile()); 368 tab_contents()->GetMutableRendererPrefs(), profile());
356 } 369 }
357 370
358 TabContentsWrapper::~TabContentsWrapper() { 371 TabContentsWrapper::~TabContentsWrapper() {
359 in_destructor_ = true; 372 in_destructor_ = true;
360 373
361 // Need to tear down infobars before the TabContents goes away. 374 // Need to tear down infobars before the TabContents goes away.
362 infobar_tab_helper_.reset(); 375 infobar_tab_helper_.reset();
376 per_tab_pref_change_registrar_.RemoveAll();
363 } 377 }
364 378
365 base::PropertyAccessor<TabContentsWrapper*>* 379 base::PropertyAccessor<TabContentsWrapper*>*
366 TabContentsWrapper::property_accessor() { 380 TabContentsWrapper::property_accessor() {
367 return g_tab_contents_wrapper_property_accessor.Pointer(); 381 return g_tab_contents_wrapper_property_accessor.Pointer();
368 } 382 }
369 383
370 // static 384 // static
371 void TabContentsWrapper::RegisterUserPrefs(PrefService* prefs) { 385 void TabContentsWrapper::RegisterUserPrefs(PrefService* prefs) {
372 prefs->RegisterBooleanPref(prefs::kAlternateErrorPagesEnabled, 386 prefs->RegisterBooleanPref(prefs::kAlternateErrorPagesEnabled,
373 true, 387 true,
374 PrefService::SYNCABLE_PREF); 388 PrefService::SYNCABLE_PREF);
375 389
376 WebPreferences pref_defaults; 390 WebPreferences pref_defaults;
377 prefs->RegisterBooleanPref(prefs::kWebKitJavascriptEnabled, 391 prefs->RegisterBooleanPref(prefs::kWebKitGlobalJavascriptEnabled,
378 pref_defaults.javascript_enabled, 392 pref_defaults.javascript_enabled,
379 PrefService::UNSYNCABLE_PREF); 393 PrefService::UNSYNCABLE_PREF);
380 prefs->RegisterBooleanPref(prefs::kWebKitWebSecurityEnabled, 394 prefs->RegisterBooleanPref(prefs::kWebKitWebSecurityEnabled,
381 pref_defaults.web_security_enabled, 395 pref_defaults.web_security_enabled,
382 PrefService::UNSYNCABLE_PREF); 396 PrefService::UNSYNCABLE_PREF);
383 prefs->RegisterBooleanPref( 397 prefs->RegisterBooleanPref(
384 prefs::kWebKitJavascriptCanOpenWindowsAutomatically, 398 prefs::kWebKitJavascriptCanOpenWindowsAutomatically,
385 true, 399 true,
386 PrefService::UNSYNCABLE_PREF); 400 PrefService::UNSYNCABLE_PREF);
387 prefs->RegisterBooleanPref(prefs::kWebKitLoadsImagesAutomatically, 401 prefs->RegisterBooleanPref(prefs::kWebKitLoadsImagesAutomatically,
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 break; 639 break;
626 #if defined(OS_POSIX) && !defined(OS_MACOSX) 640 #if defined(OS_POSIX) && !defined(OS_MACOSX)
627 case chrome::NOTIFICATION_BROWSER_THEME_CHANGED: { 641 case chrome::NOTIFICATION_BROWSER_THEME_CHANGED: {
628 UpdateRendererPreferences(); 642 UpdateRendererPreferences();
629 break; 643 break;
630 } 644 }
631 #endif 645 #endif
632 case chrome::NOTIFICATION_PREF_CHANGED: { 646 case chrome::NOTIFICATION_PREF_CHANGED: {
633 std::string* pref_name_in = content::Details<std::string>(details).ptr(); 647 std::string* pref_name_in = content::Details<std::string>(details).ptr();
634 DCHECK(content::Source<PrefService>(source).ptr() == 648 DCHECK(content::Source<PrefService>(source).ptr() ==
635 profile()->GetPrefs()); 649 profile()->GetPrefs() ||
650 content::Source<PrefService>(source).ptr() ==
651 per_tab_prefs_.get());
636 if (*pref_name_in == prefs::kAlternateErrorPagesEnabled) { 652 if (*pref_name_in == prefs::kAlternateErrorPagesEnabled) {
637 UpdateAlternateErrorPageURL(render_view_host()); 653 UpdateAlternateErrorPageURL(render_view_host());
638 } else if ((*pref_name_in == prefs::kDefaultCharset) || 654 } else if ((*pref_name_in == prefs::kDefaultCharset) ||
639 StartsWithASCII(*pref_name_in, "webkit.webprefs.", true)) { 655 StartsWithASCII(*pref_name_in, "webkit.webprefs.", true)) {
640 UpdateWebPreferences(); 656 UpdateWebPreferences();
641 } else if (*pref_name_in == prefs::kDefaultZoomLevel) { 657 } else if (*pref_name_in == prefs::kDefaultZoomLevel) {
642 tab_contents()->render_view_host()->SetZoomLevel( 658 tab_contents()->render_view_host()->SetZoomLevel(
643 tab_contents()->GetZoomLevel()); 659 tab_contents()->GetZoomLevel());
644 } else if (*pref_name_in == prefs::kEnableReferrers) { 660 } else if (*pref_name_in == prefs::kEnableReferrers) {
645 UpdateRendererPreferences(); 661 UpdateRendererPreferences();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 693
678 PrefService* prefs = profile()->GetPrefs(); 694 PrefService* prefs = profile()->GetPrefs();
679 if (prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled)) { 695 if (prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled)) {
680 url = google_util::AppendGoogleLocaleParam( 696 url = google_util::AppendGoogleLocaleParam(
681 GURL(google_util::kLinkDoctorBaseURL)); 697 GURL(google_util::kLinkDoctorBaseURL));
682 url = google_util::AppendGoogleTLDParam(url); 698 url = google_util::AppendGoogleTLDParam(url);
683 } 699 }
684 return url; 700 return url;
685 } 701 }
686 702
703 void TabContentsWrapper::RegisterPerTabUserPrefs(PrefService* prefs)
704 {
705 WebPreferences pref_defaults;
706
707 prefs->RegisterBooleanPref(prefs::kWebKitJavascriptEnabled,
708 pref_defaults.javascript_enabled,
709 PrefService::UNSYNCABLE_PREF);
710 }
711
687 void TabContentsWrapper::UpdateAlternateErrorPageURL(RenderViewHost* rvh) { 712 void TabContentsWrapper::UpdateAlternateErrorPageURL(RenderViewHost* rvh) {
688 rvh->SetAltErrorPageURL(GetAlternateErrorPageURL()); 713 rvh->SetAltErrorPageURL(GetAlternateErrorPageURL());
689 } 714 }
690 715
691 void TabContentsWrapper::UpdateWebPreferences() { 716 void TabContentsWrapper::UpdateWebPreferences() {
692 RenderViewHostDelegate* rvhd = tab_contents(); 717 RenderViewHostDelegate* rvhd = tab_contents();
693 tab_contents()->render_view_host()->UpdateWebkitPreferences( 718 WebPreferences prefs = rvhd->GetWebkitPrefs();
694 rvhd->GetWebkitPrefs()); 719 prefs.javascript_enabled =
720 per_tab_prefs_->GetBoolean(prefs::kWebKitJavascriptEnabled);
721 tab_contents()->render_view_host()->UpdateWebkitPreferences(prefs);
695 } 722 }
696 723
697 void TabContentsWrapper::UpdateRendererPreferences() { 724 void TabContentsWrapper::UpdateRendererPreferences() {
698 renderer_preferences_util::UpdateFromSystemSettings( 725 renderer_preferences_util::UpdateFromSystemSettings(
699 tab_contents()->GetMutableRendererPrefs(), profile()); 726 tab_contents()->GetMutableRendererPrefs(), profile());
700 render_view_host()->SyncRendererPrefs(); 727 render_view_host()->SyncRendererPrefs();
701 } 728 }
702 729
703 void TabContentsWrapper::UpdateSafebrowsingDetectionHost() { 730 void TabContentsWrapper::UpdateSafebrowsingDetectionHost() {
704 #if defined(ENABLE_SAFE_BROWSING) 731 #if defined(ENABLE_SAFE_BROWSING)
(...skipping 11 matching lines...) Expand all
716 render_view_host()->Send( 743 render_view_host()->Send(
717 new ChromeViewMsg_SetClientSidePhishingDetection(routing_id(), 744 new ChromeViewMsg_SetClientSidePhishingDetection(routing_id(),
718 safe_browsing)); 745 safe_browsing));
719 #endif 746 #endif
720 } 747 }
721 748
722 void TabContentsWrapper::ExitFullscreenMode() { 749 void TabContentsWrapper::ExitFullscreenMode() {
723 if (tab_contents() && render_view_host()) 750 if (tab_contents() && render_view_host())
724 tab_contents()->render_view_host()->ExitFullscreen(); 751 tab_contents()->render_view_host()->ExitFullscreen();
725 } 752 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698