diff options
author | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-16 11:23:17 +0000 |
---|---|---|
committer | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-16 11:23:17 +0000 |
commit | fda165787a252f0fd424f7137619f0bf0c1482dd (patch) | |
tree | 5daa7fb4fbc0dfc64b9d19644935df6403d4194a /chrome | |
parent | 28ecba3ff7ea1aac62c1a74e2d75bd1ccb42caa6 (diff) | |
download | chromium_src-fda165787a252f0fd424f7137619f0bf0c1482dd.zip chromium_src-fda165787a252f0fd424f7137619f0bf0c1482dd.tar.gz chromium_src-fda165787a252f0fd424f7137619f0bf0c1482dd.tar.bz2 |
Support wildcards for policy-controlled plugin blacklists.
BUG=53158
TEST=Configure wildcard blacklist pattern and check whether plugins get disabled in about:plugins.
Review URL: http://codereview.chromium.org/3435001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59635 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/plugin_updater.cc | 10 | ||||
-rw-r--r-- | chrome/common/plugin_group.cc | 26 | ||||
-rw-r--r-- | chrome/common/plugin_group.h | 7 | ||||
-rw-r--r-- | chrome/common/plugin_group_unittest.cc | 17 |
4 files changed, 44 insertions, 16 deletions
diff --git a/chrome/browser/plugin_updater.cc b/chrome/browser/plugin_updater.cc index 280db00..3430697 100644 --- a/chrome/browser/plugin_updater.cc +++ b/chrome/browser/plugin_updater.cc @@ -126,20 +126,20 @@ void PluginUpdater::Observe(NotificationType type, } void PluginUpdater::DisablePluginsFromPolicy(const ListValue* plugin_names) { - // Generate the set of unique disabled plugins from the disabled + // Generate the set of unique disabled plugin patterns from the disabled // plugins list. - std::set<string16> policy_disabled_plugins; + std::set<string16> policy_disabled_plugin_patterns; if (plugin_names) { ListValue::const_iterator end(plugin_names->end()); for (ListValue::const_iterator current(plugin_names->begin()); current != end; ++current) { string16 plugin_name; if ((*current)->GetAsString(&plugin_name)) { - policy_disabled_plugins.insert(plugin_name); + policy_disabled_plugin_patterns.insert(plugin_name); } } } - PluginGroup::SetPolicyDisabledPluginSet(policy_disabled_plugins); + PluginGroup::SetPolicyDisabledPluginPatterns(policy_disabled_plugin_patterns); // Disable all of the plugins and plugin groups that are disabled by policy. // There's currenly a bug that makes it impossible to correctly re-enable @@ -259,7 +259,7 @@ void PluginUpdater::DisablePluginGroupsFromPrefs(Profile* profile) { } } - // Build the set of policy-disabled plugins once and cache it. + // Build the set of policy-disabled plugin patterns once and cache it. // Don't do this in the constructor, there's no profile available there. const ListValue* plugin_blacklist = profile->GetPrefs()->GetList(prefs::kPluginsPluginsBlacklist); diff --git a/chrome/common/plugin_group.cc b/chrome/common/plugin_group.cc index f426803..bafa65c3 100644 --- a/chrome/common/plugin_group.cc +++ b/chrome/common/plugin_group.cc @@ -71,7 +71,7 @@ static const PluginGroupDefinition kGroupDefinitions[] = {}; #endif /*static*/ -std::set<string16>* PluginGroup::policy_disabled_plugins_; +std::set<string16>* PluginGroup::policy_disabled_plugin_patterns_; /*static*/ const PluginGroupDefinition* PluginGroup::GetPluginGroupDefinitions() { @@ -85,18 +85,28 @@ size_t PluginGroup::GetPluginGroupDefinitionsSize() { } /*static*/ -void PluginGroup::SetPolicyDisabledPluginSet(const std::set<string16>& set) { - if (!policy_disabled_plugins_) - policy_disabled_plugins_ = new std::set<string16>(set); +void PluginGroup::SetPolicyDisabledPluginPatterns( + const std::set<string16>& set) { + if (!policy_disabled_plugin_patterns_) + policy_disabled_plugin_patterns_ = new std::set<string16>(set); else - *policy_disabled_plugins_ = set; + *policy_disabled_plugin_patterns_ = set; } /*static*/ bool PluginGroup::IsPluginNameDisabledByPolicy(const string16& plugin_name) { - return policy_disabled_plugins_ && - policy_disabled_plugins_->find(plugin_name) != - policy_disabled_plugins_->end(); + if (!policy_disabled_plugin_patterns_) + return false; + + std::set<string16>::const_iterator pattern( + policy_disabled_plugin_patterns_->begin()); + while (pattern != policy_disabled_plugin_patterns_->end()) { + if (MatchPattern(plugin_name, *pattern)) + return true; + ++pattern; + } + + return false; } /*static*/ diff --git a/chrome/common/plugin_group.h b/chrome/common/plugin_group.h index a7ba852..00c947b 100644 --- a/chrome/common/plugin_group.h +++ b/chrome/common/plugin_group.h @@ -55,8 +55,9 @@ class PluginGroup { // otherwise. static PluginGroup* FindHardcodedPluginGroup(const WebPluginInfo& info); - // Configures the set of plugin names that are disabled by policy. - static void SetPolicyDisabledPluginSet(const std::set<string16>& set); + // Configures the set of plugin name patterns for disabling plugins via + // enterprise configuration management. + static void SetPolicyDisabledPluginPatterns(const std::set<string16>& set); // Tests to see if a plugin is on the blacklist using its name as // the lookup key. @@ -139,7 +140,7 @@ class PluginGroup { // enabled one, or if all plugins are disabled, simply the first one. void UpdateActivePlugin(const WebPluginInfo& plugin); - static std::set<string16>* policy_disabled_plugins_; + static std::set<string16>* policy_disabled_plugin_patterns_; string16 group_name_; string16 name_matcher_; diff --git a/chrome/common/plugin_group_unittest.cc b/chrome/common/plugin_group_unittest.cc index fa6398f..7bef7d2 100644 --- a/chrome/common/plugin_group_unittest.cc +++ b/chrome/common/plugin_group_unittest.cc @@ -47,6 +47,10 @@ static WebPluginInfo kPlugin4043 = { std::vector<WebPluginMimeType>(), true }; class PluginGroupTest : public testing::Test { + protected: + virtual void TearDown() { + PluginGroup::SetPolicyDisabledPluginPatterns(std::set<string16>()); + } }; TEST(PluginGroupTest, PluginGroupMatch) { @@ -168,3 +172,16 @@ TEST(PluginGroupTest, VersionExtraction) { EXPECT_EQ(versions[i][1], version); } } + +TEST(PluginGroupTest, DisabledByPolicy) { + std::set<string16> disabled_plugins; + disabled_plugins.insert(ASCIIToUTF16("Disable this!")); + disabled_plugins.insert(ASCIIToUTF16("*Google*")); + PluginGroup::SetPolicyDisabledPluginPatterns(disabled_plugins); + + EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(ASCIIToUTF16("42"))); + EXPECT_TRUE(PluginGroup::IsPluginNameDisabledByPolicy( + ASCIIToUTF16("Disable this!"))); + EXPECT_TRUE(PluginGroup::IsPluginNameDisabledByPolicy( + ASCIIToUTF16("Google Earth"))); +} |