summaryrefslogtreecommitdiffstats
path: root/chrome/browser/plugin_updater.cc
diff options
context:
space:
mode:
authorpastarmovj@chromium.org <pastarmovj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-01 13:28:58 +0000
committerpastarmovj@chromium.org <pastarmovj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-01 13:28:58 +0000
commit24ff43d70bfae58e5b7fe4c607fe255ca1c665dd (patch)
treea02df6c3e178747e8b79adceb2a8f3307c7d4155 /chrome/browser/plugin_updater.cc
parent3ce02419d4f7b3cd1fc062f87fb63a78072b5483 (diff)
downloadchromium_src-24ff43d70bfae58e5b7fe4c607fe255ca1c665dd.zip
chromium_src-24ff43d70bfae58e5b7fe4c607fe255ca1c665dd.tar.gz
chromium_src-24ff43d70bfae58e5b7fe4c607fe255ca1c665dd.tar.bz2
Added EnabledPlugins policy.
The EnabledPlugins policy is linked to the plugins.plugins_whitelist preference. Renamed some methods to clarify that policies can both disable and enable plugins. Updated plugins.html (about:plugins) to display policy-enabled plugins. Lots of tweaks in PluginGroup and PluginList (webkit/plugins/npapi) to preserve the user's preference across policy changes. Removing a policy on a plugin restores the state that the user had configured before. TODO: The interaction of "EnabledPlugins" and "DisabledPlugins" when overlapping isn't very well addressed yet. Currently, any plugin matching the "disabled" list will be disabled, regardless of matching or not the "enabled" list. Small fixes: Added missing "noPlugins" string to the jstemplate strings for plugins.html. BUG=55022 TEST=Create a policy enabling a specific plugin and check about:plugins. Also test_shell_test PluginGroupTest.ManagedByPolicy, and unit_tests. Review URL: http://codereview.chromium.org/6469068 Patch from Joao da Silva <joaodasilva@chromium.org>. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76373 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/plugin_updater.cc')
-rw-r--r--chrome/browser/plugin_updater.cc89
1 files changed, 58 insertions, 31 deletions
diff --git a/chrome/browser/plugin_updater.cc b/chrome/browser/plugin_updater.cc
index 8ba253d..f86637b 100644
--- a/chrome/browser/plugin_updater.cc
+++ b/chrome/browser/plugin_updater.cc
@@ -4,7 +4,6 @@
#include "chrome/browser/plugin_updater.h"
-#include <set>
#include <string>
#include "base/message_loop.h"
@@ -79,35 +78,55 @@ void PluginUpdater::Observe(NotificationType type,
NOTREACHED();
return;
}
- if (*pref_name == prefs::kPluginsPluginsBlacklist) {
+ if (*pref_name == prefs::kPluginsDisabledPlugins ||
+ *pref_name == prefs::kPluginsDisabledPluginsExceptions ||
+ *pref_name == prefs::kPluginsEnabledPlugins) {
PrefService* pref_service = Source<PrefService>(source).ptr();
- const ListValue* list =
- pref_service->GetList(prefs::kPluginsPluginsBlacklist);
- DisablePluginsFromPolicy(list);
+ const ListValue* disabled_list =
+ pref_service->GetList(prefs::kPluginsDisabledPlugins);
+ const ListValue* exceptions_list =
+ pref_service->GetList(prefs::kPluginsDisabledPluginsExceptions);
+ const ListValue* enabled_list =
+ pref_service->GetList(prefs::kPluginsEnabledPlugins);
+ UpdatePluginsStateFromPolicy(disabled_list, exceptions_list, enabled_list);
}
}
-void PluginUpdater::DisablePluginsFromPolicy(const ListValue* plugin_names) {
- // Generate the set of unique disabled plugin patterns from the disabled
- // plugins list.
- 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_plugin_patterns.insert(plugin_name);
- }
- }
- }
- webkit::npapi::PluginGroup::SetPolicyDisabledPluginPatterns(
- policy_disabled_plugin_patterns);
+void PluginUpdater::UpdatePluginsStateFromPolicy(
+ const ListValue* disabled_list,
+ const ListValue* exceptions_list,
+ const ListValue* enabled_list) {
+ std::set<string16> disabled_plugin_patterns;
+ std::set<string16> disabled_plugin_exception_patterns;
+ std::set<string16> enabled_plugin_patterns;
+
+ ListValueToStringSet(disabled_list, &disabled_plugin_patterns);
+ ListValueToStringSet(exceptions_list, &disabled_plugin_exception_patterns);
+ ListValueToStringSet(enabled_list, &enabled_plugin_patterns);
+
+ webkit::npapi::PluginGroup::SetPolicyEnforcedPluginPatterns(
+ disabled_plugin_patterns,
+ disabled_plugin_exception_patterns,
+ enabled_plugin_patterns);
NotifyPluginStatusChanged();
}
-void PluginUpdater::DisablePluginGroupsFromPrefs(Profile* profile) {
+void PluginUpdater::ListValueToStringSet(const ListValue* src,
+ std::set<string16>* dest) {
+ DCHECK(src);
+ DCHECK(dest);
+ ListValue::const_iterator end(src->end());
+ for (ListValue::const_iterator current(src->begin());
+ current != end; ++current) {
+ string16 plugin_name;
+ if ((*current)->GetAsString(&plugin_name)) {
+ dest->insert(plugin_name);
+ }
+ }
+}
+
+void PluginUpdater::UpdatePluginGroupsStateFromPrefs(Profile* profile) {
bool update_internal_dir = false;
FilePath last_internal_dir =
profile->GetPrefs()->GetFilePath(prefs::kPluginsLastInternalDirectory);
@@ -187,11 +206,17 @@ void PluginUpdater::DisablePluginGroupsFromPrefs(Profile* profile) {
}
}
- // Build the set of policy-disabled plugin patterns once and cache it.
+ // Build the set of policy enabled/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);
- DisablePluginsFromPolicy(plugin_blacklist);
+ const ListValue* disabled_plugins =
+ profile->GetPrefs()->GetList(prefs::kPluginsDisabledPlugins);
+ const ListValue* disabled_exception_plugins =
+ profile->GetPrefs()->GetList(prefs::kPluginsDisabledPluginsExceptions);
+ const ListValue* enabled_plugins =
+ profile->GetPrefs()->GetList(prefs::kPluginsEnabledPlugins);
+ UpdatePluginsStateFromPolicy(disabled_plugins,
+ disabled_exception_plugins,
+ enabled_plugins);
if (force_enable_internal_pdf || internal_pdf_enabled) {
// See http://crbug.com/50105 for background.
@@ -246,11 +271,13 @@ void PluginUpdater::OnUpdatePreferences(
// Add the plugin files.
for (size_t i = 0; i < plugins.size(); ++i) {
DictionaryValue* summary = CreatePluginFileSummary(plugins[i]);
- // If the plugin is disabled only by policy don't store this state in the
- // user pref store.
- if (plugins[i].enabled ==
- webkit::npapi::WebPluginInfo::USER_ENABLED_POLICY_DISABLED) {
- summary->SetBoolean("enabled", true);
+ // If the plugin is managed by policy, store the user preferred state
+ // instead.
+ if (plugins[i].enabled & webkit::npapi::WebPluginInfo::MANAGED_MASK) {
+ bool user_enabled =
+ (plugins[i].enabled & webkit::npapi::WebPluginInfo::USER_MASK) ==
+ webkit::npapi::WebPluginInfo::USER_ENABLED;
+ summary->SetBoolean("enabled", user_enabled);
}
bool enabled_val;
summary->GetBoolean("enabled", &enabled_val);