OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |