summaryrefslogtreecommitdiffstats
path: root/webkit/plugins/npapi/plugin_list.cc
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-24 11:59:06 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-24 11:59:06 +0000
commit613409bb31cfbee5cd0a0b8f2b372f6c41df1b86 (patch)
tree8dd2401738021e9fa03d1a6269fc60a6ea33bcea /webkit/plugins/npapi/plugin_list.cc
parent50da390205ab51690a1e42d3cd0caa96dcfff40a (diff)
downloadchromium_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.cc48
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;
}