Index: webkit/plugins/npapi/plugin_list_win.cc |
diff --git a/webkit/plugins/npapi/plugin_list_win.cc b/webkit/plugins/npapi/plugin_list_win.cc |
index 324dffb03efdf64c510745ceea1cd366da78dde8..eaa64a7e1e007ddaee90ea9357002b2ef05eddd4 100644 |
--- a/webkit/plugins/npapi/plugin_list_win.cc |
+++ b/webkit/plugins/npapi/plugin_list_win.cc |
@@ -250,7 +250,7 @@ void PluginList::GetPluginDirectories(std::vector<FilePath>* plugin_dirs) { |
} |
void PluginList::LoadPluginsFromDir(const FilePath &path, |
- std::vector<WebPluginInfo>* plugins, |
+ ScopedVector<PluginGroup>* plugin_groups, |
std::set<FilePath>* visited_plugins) { |
WIN32_FIND_DATA find_file_data; |
HANDLE find_handle; |
@@ -266,7 +266,7 @@ void PluginList::LoadPluginsFromDir(const FilePath &path, |
do { |
if (!(find_file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { |
FilePath filename = path.Append(find_file_data.cFileName); |
- LoadPlugin(filename, plugins); |
+ LoadPlugin(filename, plugin_groups); |
visited_plugins->insert(filename); |
} |
} while (FindNextFile(find_handle, &find_file_data) != 0); |
@@ -276,7 +276,7 @@ void PluginList::LoadPluginsFromDir(const FilePath &path, |
} |
void PluginList::LoadPluginsFromRegistry( |
- std::vector<WebPluginInfo>* plugins, |
+ ScopedVector<PluginGroup>* plugin_groups, |
std::set<FilePath>* visited_plugins) { |
std::set<FilePath> plugin_dirs; |
@@ -287,7 +287,7 @@ void PluginList::LoadPluginsFromRegistry( |
for (std::set<FilePath>::iterator i = plugin_dirs.begin(); |
i != plugin_dirs.end(); ++i) { |
- LoadPlugin(*i, plugins); |
+ LoadPlugin(*i, plugin_groups); |
visited_plugins->insert(*i); |
} |
} |
@@ -335,22 +335,26 @@ bool IsNewerVersion(const std::wstring& a, const std::wstring& b) { |
} |
bool PluginList::ShouldLoadPlugin(const WebPluginInfo& info, |
- std::vector<WebPluginInfo>* plugins) { |
+ ScopedVector<PluginGroup>* plugin_groups) { |
// Version check |
- for (size_t i = 0; i < plugins->size(); ++i) { |
- std::wstring plugin1 = |
- StringToLowerASCII((*plugins)[i].path.BaseName().ToWStringHack()); |
- std::wstring plugin2 = |
- StringToLowerASCII(info.path.BaseName().ToWStringHack()); |
- if ((plugin1 == plugin2 && HaveSharedMimeType((*plugins)[i], info)) || |
- (plugin1 == kJavaDeploy1 && plugin2 == kJavaDeploy2) || |
- (plugin1 == kJavaDeploy2 && plugin2 == kJavaDeploy1)) { |
- if (!IsNewerVersion((*plugins)[i].version, info.version)) |
- return false; // We have loaded a plugin whose version is newer. |
- |
- plugins->erase(plugins->begin() + i); |
- break; |
+ for (size_t i = 0; i < plugin_groups->size(); ++i) { |
+ const std::vector<WebPluginInfo>& plugins = |
+ (*plugin_groups)[i]->web_plugins_info(); |
+ for (size_t j = 0; j < plugins.size(); ++j) { |
+ std::wstring plugin1 = |
+ StringToLowerASCII(plugins[j].path.BaseName().ToWStringHack()); |
+ std::wstring plugin2 = |
+ StringToLowerASCII(info.path.BaseName().ToWStringHack()); |
+ if ((plugin1 == plugin2 && HaveSharedMimeType(plugins[j], info)) || |
+ (plugin1 == kJavaDeploy1 && plugin2 == kJavaDeploy2) || |
+ (plugin1 == kJavaDeploy2 && plugin2 == kJavaDeploy1)) { |
+ if (!IsNewerVersion(plugins[j].version, info.version)) |
+ return false; // We have loaded a plugin whose version is newer. |
+ |
+ (*plugin_groups)[i]->RemovePlugin(plugins[j].path); |
+ break; |
+ } |
} |
} |
@@ -396,16 +400,24 @@ bool PluginList::ShouldLoadPlugin(const WebPluginInfo& info, |
if (dont_load_new_wmp_) |
return false; |
- for (size_t i = 0; i < plugins->size(); ++i) { |
- if ((*plugins)[i].path.BaseName().value() == kOldWMPPlugin) { |
- plugins->erase(plugins->begin() + i); |
- break; |
+ for (size_t i = 0; i < plugin_groups->size(); ++i) { |
+ const std::vector<WebPluginInfo>& plugins = |
+ (*plugin_groups)[i]->web_plugins_info(); |
+ for (size_t j = 0; j < plugins.size(); ++j) { |
+ if (plugins[j].path.BaseName().value() == kOldWMPPlugin) { |
+ (*plugin_groups)[i]->RemovePlugin(plugins[j].path); |
+ break; |
+ } |
} |
} |
} else if (filename == kOldWMPPlugin) { |
- for (size_t i = 0; i < plugins->size(); ++i) { |
- if ((*plugins)[i].path.BaseName().value() == kNewWMPPlugin) |
- return false; |
+ for (size_t i = 0; i < plugin_groups->size(); ++i) { |
+ const std::vector<WebPluginInfo>& plugins = |
+ (*plugin_groups)[i]->web_plugins_info(); |
+ for (size_t j = 0; j < plugins.size(); ++j) { |
+ if (plugins[j].path.BaseName().value() == kNewWMPPlugin) |
+ return false; |
+ } |
} |
} |