| 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 |