diff options
author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-24 11:59:06 +0000 |
---|---|---|
committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-24 11:59:06 +0000 |
commit | 613409bb31cfbee5cd0a0b8f2b372f6c41df1b86 (patch) | |
tree | 8dd2401738021e9fa03d1a6269fc60a6ea33bcea /webkit/plugins/npapi/plugin_list.cc | |
parent | 50da390205ab51690a1e42d3cd0caa96dcfff40a (diff) | |
download | chromium_src-613409bb31cfbee5cd0a0b8f2b372f6c41df1b86.zip chromium_src-613409bb31cfbee5cd0a0b8f2b372f6c41df1b86.tar.gz chromium_src-613409bb31cfbee5cd0a0b8f2b372f6c41df1b86.tar.bz2 |
Fix a bug that disabled some plugin groups at startup.
An empty plugin group is disabled by definition (because it doesn't contain any enabled plugins), and we wrongly transferred the disabled state when reloading the list.
BUG=73717
TEST=PluginListTest.HardcodedGroups
Review URL: http://codereview.chromium.org/6541072
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75874 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/plugins/npapi/plugin_list.cc')
-rw-r--r-- | webkit/plugins/npapi/plugin_list.cc | 48 |
1 files changed, 20 insertions, 28 deletions
diff --git a/webkit/plugins/npapi/plugin_list.cc b/webkit/plugins/npapi/plugin_list.cc index 5aa1a99..b1343c5 100644 --- a/webkit/plugins/npapi/plugin_list.cc +++ b/webkit/plugins/npapi/plugin_list.cc @@ -157,17 +157,6 @@ static const PluginGroupDefinition kGroupDefinitions[] = { }; #endif -// static -const PluginGroupDefinition* PluginList::GetPluginGroupDefinitions() { - return kGroupDefinitions; -} - -// static -size_t PluginList::GetPluginGroupDefinitionsSize() { - // TODO(viettrungluu): |arraysize()| doesn't work with zero-size arrays. - return ARRAYSIZE_UNSAFE(kGroupDefinitions); -} - base::LazyInstance<PluginList> g_singleton(base::LINKER_INITIALIZED); // static @@ -324,11 +313,24 @@ bool PluginList::ParseMimeTypes( PluginList::PluginList() : plugins_loaded_(false), plugins_need_refresh_(false), - disable_outdated_plugins_(false) { + disable_outdated_plugins_(false), + group_definitions_(kGroupDefinitions), + num_group_definitions_(ARRAYSIZE_UNSAFE(kGroupDefinitions)) { PlatformInit(); AddHardcodedPluginGroups(&plugin_groups_); } +PluginList::PluginList(const PluginGroupDefinition* definitions, + size_t num_definitions) + : plugins_loaded_(false), + plugins_need_refresh_(false), + disable_outdated_plugins_(false), + group_definitions_(definitions), + num_group_definitions_(num_definitions) { + // Don't do platform-dependend initialization in unit tests. + AddHardcodedPluginGroups(&plugin_groups_); +} + void PluginList::LoadPluginsInternal(ScopedVector<PluginGroup>* plugin_groups) { // Don't want to hold the lock while loading new plugins, so we don't block // other methods if they're called on other threads. @@ -429,17 +431,7 @@ void PluginList::LoadPlugins(bool refresh) { } } - // Check if the group was disabled previously by the user. - for (size_t j = 0; j < plugin_groups_.size(); ++j) { - if (plugin_groups_[j]->GetGroupName() == group_name && - !plugin_groups_[j]->Enabled()) { - group->EnableGroup(false); - } - } - if (group->IsEmpty()) { - if (!group->Enabled()) - groups_to_disable_.insert(group->GetGroupName()); new_plugin_groups.erase(new_plugin_groups.begin() + i); --i; continue; @@ -702,11 +694,10 @@ std::string PluginList::GetPluginGroupIdentifier( } void PluginList::AddHardcodedPluginGroups(ScopedVector<PluginGroup>* groups) { - base::AutoLock lock(lock_); - const PluginGroupDefinition* definitions = GetPluginGroupDefinitions(); - size_t num_definitions = GetPluginGroupDefinitionsSize(); - for (size_t i = 0; i < num_definitions; ++i) - groups->push_back(PluginGroup::FromPluginGroupDefinition(definitions[i])); + for (size_t i = 0; i < num_group_definitions_; ++i) { + groups->push_back( + PluginGroup::FromPluginGroupDefinition(group_definitions_[i])); + } } PluginGroup* PluginList::AddToPluginGroups( @@ -771,7 +762,8 @@ 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]->GetGroupName().find(group_name) != string16::npos) { + if (!plugin_groups_[i]->IsEmpty() && + plugin_groups_[i]->GetGroupName().find(group_name) != string16::npos) { group = plugin_groups_[i]; break; } |