diff options
author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-15 15:33:45 +0000 |
---|---|---|
committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-15 15:33:45 +0000 |
commit | f7be2cbadb7d6f2f96ea6a836f70961640bdb5e6 (patch) | |
tree | 14a6c5f61d11697047bb0d6a08625271f314fe45 /webkit/plugins/npapi/plugin_list.cc | |
parent | 411f5d0bcab149cbea4c482a06bfd7c851a71c7d (diff) | |
download | chromium_src-f7be2cbadb7d6f2f96ea6a836f70961640bdb5e6.zip chromium_src-f7be2cbadb7d6f2f96ea6a836f70961640bdb5e6.tar.gz chromium_src-f7be2cbadb7d6f2f96ea6a836f70961640bdb5e6.tar.bz2 |
Reland r101269: Store plug-in enabled/disabled state in PluginPrefs instead of WebPluginInfo, to allow different sets of enabled/disabled plug-ins to be specified per profile.
The relanded version fixes GViewRequestInterceptorTest on ChromeOS and a memory leak in PluginListTest.GetPluginGroup.
Original review URL: http://codereview.chromium.org/7848025
TBR=jam@chromium.org
BUG=80794
TEST=Open two profiles, disable different plugins in them.
Review URL: http://codereview.chromium.org/7904009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101297 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/plugins/npapi/plugin_list.cc')
-rw-r--r-- | webkit/plugins/npapi/plugin_list.cc | 113 |
1 files changed, 8 insertions, 105 deletions
diff --git a/webkit/plugins/npapi/plugin_list.cc b/webkit/plugins/npapi/plugin_list.cc index 45160fc..a7f6dd4 100644 --- a/webkit/plugins/npapi/plugin_list.cc +++ b/webkit/plugins/npapi/plugin_list.cc @@ -230,7 +230,6 @@ void PluginList::RegisterInternalPlugin(const FilePath& filename, 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; @@ -408,51 +407,6 @@ void PluginList::LoadPlugins() { 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); } @@ -493,7 +447,7 @@ void PluginList::GetPlugins(std::vector<WebPluginInfo>* plugins) { 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_plugins_info(); + plugin_groups_[i]->web_plugin_infos(); plugins->insert(plugins->end(), gr_plugins.begin(), gr_plugins.end()); } } @@ -522,7 +476,7 @@ void PluginList::GetPluginInfoArray( // 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_plugins_info(); + plugin_groups_[i]->web_plugin_infos(); for (size_t i = 0; i < plugins.size(); ++i) { if (SupportsType(plugins[i], mime_type, allow_wildcard)) { FilePath path = plugins[i].path; @@ -544,7 +498,7 @@ void PluginList::GetPluginInfoArray( 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_plugins_info(); + plugin_groups_[i]->web_plugin_infos(); for (size_t i = 0; i < plugins.size(); ++i) { if (SupportsExtension(plugins[i], extension, &actual_mime_type)) { FilePath path = plugins[i].path; @@ -569,9 +523,9 @@ void PluginList::GetPluginInfoArray( if (plugin_groups_[i]->identifier().compare( kDefaultPluginLibraryName) == 0) { #endif - DCHECK_NE(0U, plugin_groups_[i]->web_plugins_info().size()); + DCHECK_NE(0U, plugin_groups_[i]->web_plugin_infos().size()); const webkit::WebPluginInfo& default_info = - plugin_groups_[i]->web_plugins_info()[0]; + plugin_groups_[i]->web_plugin_infos()[0]; if (SupportsType(default_info, mime_type, allow_wildcard)) { info->push_back(default_info); if (actual_mime_types) @@ -587,7 +541,7 @@ bool PluginList::GetPluginInfoByPath(const FilePath& plugin_path, base::AutoLock lock(lock_); for (size_t i = 0; i < plugin_groups_.size(); ++i) { const std::vector<webkit::WebPluginInfo>& plugins = - plugin_groups_[i]->web_plugins_info(); + plugin_groups_[i]->web_plugin_infos(); for (size_t i = 0; i < plugins.size(); ++i) { if (plugins[i].path == plugin_path) { *info = plugins[i]; @@ -614,10 +568,10 @@ void PluginList::GetPluginGroups( } } -const PluginGroup* PluginList::GetPluginGroup( +PluginGroup* PluginList::GetPluginGroup( const webkit::WebPluginInfo& web_plugin_info) { base::AutoLock lock(lock_); - return AddToPluginGroups(web_plugin_info, &plugin_groups_); + return new PluginGroup(*AddToPluginGroups(web_plugin_info, &plugin_groups_)); } string16 PluginList::GetPluginGroupName(const std::string& identifier) { @@ -670,60 +624,9 @@ PluginGroup* PluginList::AddToPluginGroups( 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) { |