OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/host_content_settings_map.h" | 5 #include "chrome/browser/host_content_settings_map.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "chrome/browser/browser_thread.h" | 10 #include "chrome/browser/browser_thread.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 // true for various internal objects like chrome:// URLs, so UI and other | 93 // true for various internal objects like chrome:// URLs, so UI and other |
94 // things users think of as "not webpages" don't break. | 94 // things users think of as "not webpages" don't break. |
95 static bool ShouldAllowAllContent(const GURL& url) { | 95 static bool ShouldAllowAllContent(const GURL& url) { |
96 return url.SchemeIs(chrome::kChromeDevToolsScheme) || | 96 return url.SchemeIs(chrome::kChromeDevToolsScheme) || |
97 url.SchemeIs(chrome::kChromeInternalScheme) || | 97 url.SchemeIs(chrome::kChromeInternalScheme) || |
98 url.SchemeIs(chrome::kChromeUIScheme) || | 98 url.SchemeIs(chrome::kChromeUIScheme) || |
99 url.SchemeIs(chrome::kExtensionScheme) || | 99 url.SchemeIs(chrome::kExtensionScheme) || |
100 url.SchemeIs(chrome::kGearsScheme) || | 100 url.SchemeIs(chrome::kGearsScheme) || |
101 url.SchemeIs(chrome::kUserScriptScheme); | 101 url.SchemeIs(chrome::kUserScriptScheme); |
102 } | 102 } |
| 103 |
| 104 // Map ASK for the plugins content type to BLOCK if click-to-play is |
| 105 // not enabled. |
| 106 ContentSetting ClickToPlayFixup(ContentSettingsType content_type, |
| 107 ContentSetting setting) { |
| 108 if (setting == CONTENT_SETTING_ASK && |
| 109 content_type == CONTENT_SETTINGS_TYPE_PLUGINS && |
| 110 !CommandLine::ForCurrentProcess()->HasSwitch( |
| 111 switches::kEnableClickToPlay)) { |
| 112 return CONTENT_SETTING_BLOCK; |
| 113 } |
| 114 return setting; |
| 115 } |
| 116 |
103 } // namespace | 117 } // namespace |
104 | 118 |
105 | 119 |
106 struct HostContentSettingsMap::ExtendedContentSettings { | 120 struct HostContentSettingsMap::ExtendedContentSettings { |
107 ContentSettings content_settings; | 121 ContentSettings content_settings; |
108 ResourceContentSettings content_settings_for_resources; | 122 ResourceContentSettings content_settings_for_resources; |
109 }; | 123 }; |
110 | 124 |
111 // static | 125 // static |
112 HostContentSettingsMap::Pattern HostContentSettingsMap::Pattern::FromURL( | 126 HostContentSettingsMap::Pattern HostContentSettingsMap::Pattern::FromURL( |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 settings->push_back(std::make_pair(Pattern(i->first), setting)); | 439 settings->push_back(std::make_pair(Pattern(i->first), setting)); |
426 } | 440 } |
427 } | 441 } |
428 } | 442 } |
429 | 443 |
430 void HostContentSettingsMap::SetDefaultContentSetting( | 444 void HostContentSettingsMap::SetDefaultContentSetting( |
431 ContentSettingsType content_type, | 445 ContentSettingsType content_type, |
432 ContentSetting setting) { | 446 ContentSetting setting) { |
433 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. | 447 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. |
434 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 448 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 449 DCHECK(content_type != CONTENT_SETTINGS_TYPE_PLUGINS || |
| 450 setting != CONTENT_SETTING_ASK || |
| 451 CommandLine::ForCurrentProcess()->HasSwitch( |
| 452 switches::kEnableClickToPlay)); |
435 PrefService* prefs = profile_->GetPrefs(); | 453 PrefService* prefs = profile_->GetPrefs(); |
436 | 454 |
437 // The default settings may not be directly modified for OTR sessions. | 455 // The default settings may not be directly modified for OTR sessions. |
438 // Instead, they are synced to the main profile's setting. | 456 // Instead, they are synced to the main profile's setting. |
439 if (is_off_the_record_) { | 457 if (is_off_the_record_) { |
440 NOTREACHED(); | 458 NOTREACHED(); |
441 return; | 459 return; |
442 } | 460 } |
443 | 461 |
444 DictionaryValue* default_settings_dictionary = | 462 DictionaryValue* default_settings_dictionary = |
(...skipping 22 matching lines...) Expand all Loading... |
467 | 485 |
468 void HostContentSettingsMap::SetContentSetting( | 486 void HostContentSettingsMap::SetContentSetting( |
469 const Pattern& original_pattern, | 487 const Pattern& original_pattern, |
470 ContentSettingsType content_type, | 488 ContentSettingsType content_type, |
471 const std::string& resource_identifier, | 489 const std::string& resource_identifier, |
472 ContentSetting setting) { | 490 ContentSetting setting) { |
473 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. | 491 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. |
474 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 492 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
475 DCHECK_NE(RequiresResourceIdentifier(content_type), | 493 DCHECK_NE(RequiresResourceIdentifier(content_type), |
476 resource_identifier.empty()); | 494 resource_identifier.empty()); |
| 495 DCHECK(content_type != CONTENT_SETTINGS_TYPE_PLUGINS || |
| 496 setting != CONTENT_SETTING_ASK || |
| 497 CommandLine::ForCurrentProcess()->HasSwitch( |
| 498 switches::kEnableClickToPlay)); |
477 | 499 |
478 const Pattern pattern(original_pattern.CanonicalizePattern()); | 500 const Pattern pattern(original_pattern.CanonicalizePattern()); |
479 | 501 |
480 bool early_exit = false; | 502 bool early_exit = false; |
481 std::string pattern_str(pattern.AsString()); | 503 std::string pattern_str(pattern.AsString()); |
482 PrefService* prefs = NULL; | 504 PrefService* prefs = NULL; |
483 DictionaryValue* all_settings_dictionary = NULL; | 505 DictionaryValue* all_settings_dictionary = NULL; |
484 HostContentSettings* map_to_modify = &off_the_record_settings_; | 506 HostContentSettings* map_to_modify = &off_the_record_settings_; |
485 if (!is_off_the_record_) { | 507 if (!is_off_the_record_) { |
486 prefs = profile_->GetPrefs(); | 508 prefs = profile_->GetPrefs(); |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
789 DCHECK(found); | 811 DCHECK(found); |
790 settings->settings[type] = IntToContentSetting(setting); | 812 settings->settings[type] = IntToContentSetting(setting); |
791 break; | 813 break; |
792 } | 814 } |
793 } | 815 } |
794 } | 816 } |
795 // Migrate obsolete cookie prompt mode. | 817 // Migrate obsolete cookie prompt mode. |
796 if (settings->settings[CONTENT_SETTINGS_TYPE_COOKIES] == | 818 if (settings->settings[CONTENT_SETTINGS_TYPE_COOKIES] == |
797 CONTENT_SETTING_ASK) | 819 CONTENT_SETTING_ASK) |
798 settings->settings[CONTENT_SETTINGS_TYPE_COOKIES] = CONTENT_SETTING_BLOCK; | 820 settings->settings[CONTENT_SETTINGS_TYPE_COOKIES] = CONTENT_SETTING_BLOCK; |
| 821 |
| 822 settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS] = |
| 823 ClickToPlayFixup(CONTENT_SETTINGS_TYPE_PLUGINS, |
| 824 settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS]); |
799 } | 825 } |
800 | 826 |
801 void HostContentSettingsMap::GetResourceSettingsFromDictionary( | 827 void HostContentSettingsMap::GetResourceSettingsFromDictionary( |
802 const DictionaryValue* dictionary, | 828 const DictionaryValue* dictionary, |
803 ResourceContentSettings* settings) { | 829 ResourceContentSettings* settings) { |
804 for (DictionaryValue::key_iterator i(dictionary->begin_keys()); | 830 for (DictionaryValue::key_iterator i(dictionary->begin_keys()); |
805 i != dictionary->end_keys(); ++i) { | 831 i != dictionary->end_keys(); ++i) { |
806 const std::string& content_type(*i); | 832 const std::string& content_type(*i); |
807 for (size_t type = 0; type < arraysize(kResourceTypeNames); ++type) { | 833 for (size_t type = 0; type < arraysize(kResourceTypeNames); ++type) { |
808 if ((kResourceTypeNames[type] != NULL) && | 834 if ((kResourceTypeNames[type] != NULL) && |
809 (kResourceTypeNames[type] == content_type)) { | 835 (kResourceTypeNames[type] == content_type)) { |
810 DictionaryValue* resource_dictionary = NULL; | 836 DictionaryValue* resource_dictionary = NULL; |
811 bool found = dictionary->GetDictionary(content_type, | 837 bool found = dictionary->GetDictionary(content_type, |
812 &resource_dictionary); | 838 &resource_dictionary); |
813 DCHECK(found); | 839 DCHECK(found); |
814 for (DictionaryValue::key_iterator j(resource_dictionary->begin_keys()); | 840 for (DictionaryValue::key_iterator j(resource_dictionary->begin_keys()); |
815 j != resource_dictionary->end_keys(); ++j) { | 841 j != resource_dictionary->end_keys(); ++j) { |
816 const std::string& resource_identifier(*j); | 842 const std::string& resource_identifier(*j); |
817 int setting = CONTENT_SETTING_DEFAULT; | 843 int setting = CONTENT_SETTING_DEFAULT; |
818 bool found = resource_dictionary->GetIntegerWithoutPathExpansion( | 844 bool found = resource_dictionary->GetIntegerWithoutPathExpansion( |
819 resource_identifier, &setting); | 845 resource_identifier, &setting); |
820 DCHECK(found); | 846 DCHECK(found); |
821 (*settings)[ContentSettingsTypeResourceIdentifierPair( | 847 (*settings)[ContentSettingsTypeResourceIdentifierPair( |
822 ContentSettingsType(type), resource_identifier)] = | 848 ContentSettingsType(type), resource_identifier)] = |
823 ContentSetting(setting); | 849 ClickToPlayFixup(ContentSettingsType(type), |
| 850 ContentSetting(setting)); |
824 } | 851 } |
825 | 852 |
826 break; | 853 break; |
827 } | 854 } |
828 } | 855 } |
829 } | 856 } |
830 } | 857 } |
831 | 858 |
832 void HostContentSettingsMap::ForceDefaultsToBeExplicit() { | 859 void HostContentSettingsMap::ForceDefaultsToBeExplicit() { |
833 DCHECK_EQ(arraysize(kDefaultSettings), | 860 DCHECK_EQ(arraysize(kDefaultSettings), |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1006 } | 1033 } |
1007 | 1034 |
1008 for (size_t i = 0; i < move_items.size(); ++i) { | 1035 for (size_t i = 0; i < move_items.size(); ++i) { |
1009 Value* pattern_settings_dictionary = NULL; | 1036 Value* pattern_settings_dictionary = NULL; |
1010 all_settings_dictionary->RemoveWithoutPathExpansion( | 1037 all_settings_dictionary->RemoveWithoutPathExpansion( |
1011 move_items[i].first, &pattern_settings_dictionary); | 1038 move_items[i].first, &pattern_settings_dictionary); |
1012 all_settings_dictionary->SetWithoutPathExpansion( | 1039 all_settings_dictionary->SetWithoutPathExpansion( |
1013 move_items[i].second, pattern_settings_dictionary); | 1040 move_items[i].second, pattern_settings_dictionary); |
1014 } | 1041 } |
1015 } | 1042 } |
OLD | NEW |