Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1041)

Unified Diff: webkit/plugins/npapi/plugin_list.cc

Issue 7901015: Revert 101269 - Store plug-in enabled/disabled state in PluginPrefs instead of WebPluginInfo, to ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/plugins/npapi/plugin_list.h ('k') | webkit/plugins/npapi/plugin_list_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/plugins/npapi/plugin_list.cc
===================================================================
--- webkit/plugins/npapi/plugin_list.cc (revision 101271)
+++ webkit/plugins/npapi/plugin_list.cc (working copy)
@@ -230,6 +230,7 @@
plugin.info.name = ASCIIToUTF16(name);
plugin.info.version = ASCIIToUTF16("1");
plugin.info.desc = ASCIIToUTF16(description);
+ plugin.info.enabled = webkit::WebPluginInfo::USER_ENABLED_POLICY_UNMANAGED;
webkit::WebPluginMimeType mime_type;
mime_type.mime_type = mime_type_str;
@@ -407,6 +408,51 @@
LoadPluginsInternal(&new_plugin_groups);
base::AutoLock lock(lock_);
+ // Grab all plugins that were found before to copy enabled statuses.
+ std::vector<webkit::WebPluginInfo> old_plugins;
+ for (size_t i = 0; i < plugin_groups_.size(); ++i) {
+ const std::vector<webkit::WebPluginInfo>& gr_plugins =
+ plugin_groups_[i]->web_plugins_info();
+ old_plugins.insert(old_plugins.end(), gr_plugins.begin(), gr_plugins.end());
+ }
+ // Disable all of the plugins and plugin groups that are disabled by policy.
+ for (size_t i = 0; i < new_plugin_groups.size(); ++i) {
+ PluginGroup* group = new_plugin_groups[i];
+ string16 group_name = group->GetGroupName();
+
+ std::vector<webkit::WebPluginInfo>& gr_plugins =
+ group->GetPluginsContainer();
+ for (size_t j = 0; j < gr_plugins.size(); ++j) {
+ int plugin_found = -1;
+ for (size_t k = 0; k < old_plugins.size(); ++k) {
+ if (gr_plugins[j].path == old_plugins[k].path) {
+ plugin_found = k;
+ break;
+ }
+ }
+ if (plugin_found >= 0)
+ gr_plugins[j].enabled = old_plugins[plugin_found].enabled;
+ // Set the disabled flag of all plugins scheduled for disabling.
+ if (plugins_to_disable_.find(gr_plugins[j].path) !=
+ plugins_to_disable_.end()) {
+ group->DisablePlugin(gr_plugins[j].path);
+ }
+ }
+
+ if (group->IsEmpty()) {
+ new_plugin_groups.erase(new_plugin_groups.begin() + i);
+ --i;
+ continue;
+ }
+
+ group->EnforceGroupPolicy();
+ }
+ // We flush the list of prematurely disabled plugins after the load has
+ // finished. If for some reason a plugin reappears on a second load it is
+ // going to be loaded normally. This is only true for non-policy controlled
+ // plugins though.
+ plugins_to_disable_.clear();
+
plugin_groups_.swap(new_plugin_groups);
}
@@ -447,7 +493,7 @@
base::AutoLock lock(lock_);
for (size_t i = 0; i < plugin_groups_.size(); ++i) {
const std::vector<webkit::WebPluginInfo>& gr_plugins =
- plugin_groups_[i]->web_plugin_infos();
+ plugin_groups_[i]->web_plugins_info();
plugins->insert(plugins->end(), gr_plugins.begin(), gr_plugins.end());
}
}
@@ -476,7 +522,7 @@
// Add in plugins by mime type.
for (size_t i = 0; i < plugin_groups_.size(); ++i) {
const std::vector<webkit::WebPluginInfo>& plugins =
- plugin_groups_[i]->web_plugin_infos();
+ plugin_groups_[i]->web_plugins_info();
for (size_t i = 0; i < plugins.size(); ++i) {
if (SupportsType(plugins[i], mime_type, allow_wildcard)) {
FilePath path = plugins[i].path;
@@ -498,7 +544,7 @@
std::string actual_mime_type;
for (size_t i = 0; i < plugin_groups_.size(); ++i) {
const std::vector<webkit::WebPluginInfo>& plugins =
- plugin_groups_[i]->web_plugin_infos();
+ plugin_groups_[i]->web_plugins_info();
for (size_t i = 0; i < plugins.size(); ++i) {
if (SupportsExtension(plugins[i], extension, &actual_mime_type)) {
FilePath path = plugins[i].path;
@@ -523,9 +569,9 @@
if (plugin_groups_[i]->identifier().compare(
kDefaultPluginLibraryName) == 0) {
#endif
- DCHECK_NE(0U, plugin_groups_[i]->web_plugin_infos().size());
+ DCHECK_NE(0U, plugin_groups_[i]->web_plugins_info().size());
const webkit::WebPluginInfo& default_info =
- plugin_groups_[i]->web_plugin_infos()[0];
+ plugin_groups_[i]->web_plugins_info()[0];
if (SupportsType(default_info, mime_type, allow_wildcard)) {
info->push_back(default_info);
if (actual_mime_types)
@@ -541,7 +587,7 @@
base::AutoLock lock(lock_);
for (size_t i = 0; i < plugin_groups_.size(); ++i) {
const std::vector<webkit::WebPluginInfo>& plugins =
- plugin_groups_[i]->web_plugin_infos();
+ plugin_groups_[i]->web_plugins_info();
for (size_t i = 0; i < plugins.size(); ++i) {
if (plugins[i].path == plugin_path) {
*info = plugins[i];
@@ -568,10 +614,10 @@
}
}
-PluginGroup* PluginList::GetPluginGroup(
+const PluginGroup* PluginList::GetPluginGroup(
const webkit::WebPluginInfo& web_plugin_info) {
base::AutoLock lock(lock_);
- return new PluginGroup(*AddToPluginGroups(web_plugin_info, &plugin_groups_));
+ return AddToPluginGroups(web_plugin_info, &plugin_groups_);
}
string16 PluginList::GetPluginGroupName(const std::string& identifier) {
@@ -624,9 +670,60 @@
plugin_groups->push_back(group);
}
group->AddPlugin(web_plugin_info);
+ // If group is scheduled for disabling do that now and remove it from the
+ // list.
+ if (groups_to_disable_.erase(group->GetGroupName()))
+ group->EnableGroup(false);
return group;
}
+bool PluginList::EnablePlugin(const FilePath& filename) {
+ base::AutoLock lock(lock_);
+ for (size_t i = 0; i < plugin_groups_.size(); ++i) {
+ if (plugin_groups_[i]->ContainsPlugin(filename))
+ return plugin_groups_[i]->EnablePlugin(filename);
+ }
+ // Non existing plugin is being enabled. Check if it has been disabled before
+ // and remove it.
+ return (plugins_to_disable_.erase(filename) != 0);
+}
+
+bool PluginList::DisablePlugin(const FilePath& filename) {
+ base::AutoLock lock(lock_);
+ for (size_t i = 0; i < plugin_groups_.size(); ++i) {
+ if (plugin_groups_[i]->ContainsPlugin(filename))
+ return plugin_groups_[i]->DisablePlugin(filename);
+ }
+ // Non existing plugin is being disabled. Queue the plugin so that on the next
+ // load plugins call they will be disabled.
+ plugins_to_disable_.insert(filename);
+ return true;
+}
+
+bool PluginList::EnableGroup(bool enable, const string16& group_name) {
+ base::AutoLock lock(lock_);
+ PluginGroup* group = NULL;
+ for (size_t i = 0; i < plugin_groups_.size(); ++i) {
+ if (!plugin_groups_[i]->IsEmpty() &&
+ plugin_groups_[i]->GetGroupName().find(group_name) != string16::npos) {
+ group = plugin_groups_[i];
+ break;
+ }
+ }
+ if (!group) {
+ // Non existing group is being enabled. Queue the group so that on the next
+ // load plugins call they will be disabled.
+ if (!enable) {
+ groups_to_disable_.insert(group_name);
+ return true;
+ } else {
+ return (groups_to_disable_.erase(group_name) != 0);
+ }
+ }
+
+ return group->EnableGroup(enable);
+}
+
bool PluginList::SupportsType(const webkit::WebPluginInfo& plugin,
const std::string& mime_type,
bool allow_wildcard) {
Property changes on: webkit/plugins/npapi/plugin_list.cc
___________________________________________________________________
Added: svn:mergeinfo
Merged /branches/chrome_webkit_merge_branch/src/webkit/plugins/npapi/plugin_list.cc:r3734-4217,4606-5108,5177-5263
« no previous file with comments | « webkit/plugins/npapi/plugin_list.h ('k') | webkit/plugins/npapi/plugin_list_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698