Index: chrome/browser/ui/webui/plugins_ui.cc |
diff --git a/chrome/browser/ui/webui/plugins_ui.cc b/chrome/browser/ui/webui/plugins_ui.cc |
index a2f46aa21330441ec76716477278fd4fa5af70b3..c1340a0e7b6391064e82745344efc3951dac8ea2 100644 |
--- a/chrome/browser/ui/webui/plugins_ui.cc |
+++ b/chrome/browser/ui/webui/plugins_ui.cc |
@@ -44,6 +44,15 @@ |
#include "ui/base/resource/resource_bundle.h" |
#include "webkit/plugins/npapi/plugin_group.h" |
+#if defined(ENABLE_PLUGIN_INSTALLATION) |
+#include "chrome/browser/plugin_finder.h" |
+#include "chrome/browser/plugin_installer.h" |
+#else |
+// Forward-declare PluginFinder. It's never actually used, but we pass a NULL |
+// pointer instead. |
+class PluginFinder; |
+#endif |
+ |
using content::PluginService; |
using content::WebContents; |
using content::WebUIMessageHandler; |
@@ -149,10 +158,14 @@ class PluginsDOMHandler : public WebUIMessageHandler, |
private: |
// Call this to start getting the plugins on the UI thread. |
- void LoadPlugins(); |
+ void GetPluginFinder(); |
+ |
+ // Called when we have a PluginFinder and need to load the list of plug-ins. |
+ void LoadPlugins(PluginFinder* plugin_finder); |
// Called on the UI thread when the plugin information is ready. |
- void PluginsLoaded(const std::vector<PluginGroup>& groups); |
+ void PluginsLoaded(PluginFinder* plugin_finder, |
+ const std::vector<PluginGroup>& groups); |
content::NotificationRegistrar registrar_; |
@@ -197,7 +210,7 @@ void PluginsDOMHandler::RegisterMessages() { |
} |
void PluginsDOMHandler::HandleRequestPluginsData(const ListValue* args) { |
- LoadPlugins(); |
+ GetPluginFinder(); |
} |
void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) { |
@@ -295,22 +308,31 @@ void PluginsDOMHandler::Observe(int type, |
const content::NotificationSource& source, |
const content::NotificationDetails& details) { |
DCHECK_EQ(chrome::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED, type); |
- LoadPlugins(); |
+ GetPluginFinder(); |
} |
-void PluginsDOMHandler::LoadPlugins() { |
+void PluginsDOMHandler::GetPluginFinder() { |
if (weak_ptr_factory_.HasWeakPtrs()) |
return; |
+#if defined(ENABLE_PLUGIN_INSTALLATION) |
+ PluginFinder::Get(base::Bind(&PluginsDOMHandler::LoadPlugins, |
+ weak_ptr_factory_.GetWeakPtr())); |
+#else |
+ LoadPlugins(NULL); |
+#endif |
+} |
+ |
+void PluginsDOMHandler::LoadPlugins(PluginFinder* plugin_finder) { |
PluginService::GetInstance()->GetPluginGroups( |
base::Bind(&PluginsDOMHandler::PluginsLoaded, |
- weak_ptr_factory_.GetWeakPtr())); |
+ weak_ptr_factory_.GetWeakPtr(), plugin_finder)); |
} |
-void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) { |
+void PluginsDOMHandler::PluginsLoaded(PluginFinder* plugin_finder, |
+ const std::vector<PluginGroup>& groups) { |
Profile* profile = Profile::FromWebUI(web_ui()); |
- PluginPrefs* plugin_prefs = |
- PluginPrefs::GetForProfile(profile); |
+ PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile); |
HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); |
ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard(); |
@@ -396,7 +418,15 @@ void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) { |
group_data->SetString("description", active_plugin->desc); |
group_data->SetString("version", active_plugin->version); |
group_data->SetBoolean("critical", group.IsVulnerable(*active_plugin)); |
- group_data->SetString("update_url", group.GetUpdateURL()); |
+ |
+ std::string update_url; |
+#if defined(ENABLE_PLUGIN_INSTALLATION) |
+ PluginInstaller* installer = |
+ plugin_finder->FindPluginWithIdentifier(group.identifier()); |
+ if (installer) |
+ update_url = installer->plugin_url().spec(); |
+#endif |
+ group_data->SetString("update_url", update_url); |
std::string enabled_mode; |
if (all_plugins_enabled_by_policy) { |
@@ -410,7 +440,7 @@ void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) { |
} |
group_data->SetString("enabledMode", enabled_mode); |
- // TODO(bauerb): We should have a method on HostContentSettinsMap for this. |
+ // TODO(bauerb): We should have a method on HostContentSettingsMap for this. |
bool always_allowed = false; |
ContentSettingsForOneType settings; |
map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS, |