summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-16 11:23:17 +0000
committermnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-16 11:23:17 +0000
commitfda165787a252f0fd424f7137619f0bf0c1482dd (patch)
tree5daa7fb4fbc0dfc64b9d19644935df6403d4194a /chrome
parent28ecba3ff7ea1aac62c1a74e2d75bd1ccb42caa6 (diff)
downloadchromium_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.cc10
-rw-r--r--chrome/common/plugin_group.cc26
-rw-r--r--chrome/common/plugin_group.h7
-rw-r--r--chrome/common/plugin_group_unittest.cc17
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")));
+}