Index: chrome/browser/ui/webui/plugins_ui.cc |
=================================================================== |
--- chrome/browser/ui/webui/plugins_ui.cc (revision 96410) |
+++ chrome/browser/ui/webui/plugins_ui.cc (working copy) |
@@ -13,7 +13,7 @@ |
#include "base/path_service.h" |
#include "base/utf_string_conversions.h" |
#include "base/values.h" |
-#include "chrome/browser/plugin_updater.h" |
+#include "chrome/browser/plugin_prefs.h" |
#include "chrome/browser/prefs/pref_member.h" |
#include "chrome/browser/prefs/pref_service.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -122,23 +122,19 @@ |
const NotificationDetails& details) OVERRIDE; |
private: |
- // This extra wrapper is used to ensure we don't leak the ListValue* pointer |
- // if the PluginsDOMHandler object goes away before the task on the UI thread |
- // to give it the plugin list runs. |
- struct ListWrapper { |
- ListValue* list; |
- }; |
// Loads the plugins on the FILE thread. |
- static void LoadPluginsOnFileThread(ListWrapper* wrapper, Task* task); |
+ static void LoadPluginsOnFileThread( |
+ std::vector<webkit::npapi::PluginGroup>* groups, Task* task); |
// Used in conjunction with ListWrapper to avoid any memory leaks. |
- static void EnsureListDeleted(ListWrapper* wrapper); |
+ static void EnsurePluginGroupsDeleted( |
+ std::vector<webkit::npapi::PluginGroup>* groups); |
// Call this to start getting the plugins on the UI thread. |
void LoadPlugins(); |
// Called on the UI thread when the plugin information is ready. |
- void PluginsLoaded(ListWrapper* wrapper); |
+ void PluginsLoaded(const std::vector<webkit::npapi::PluginGroup>* groups); |
NotificationRegistrar registrar_; |
@@ -161,7 +157,7 @@ |
WebUIMessageHandler* PluginsDOMHandler::Attach(WebUI* web_ui) { |
PrefService* prefs = Profile::FromWebUI(web_ui)->GetPrefs(); |
- show_details_.Init(prefs::kPluginsShowDetails, prefs, this); |
+ show_details_.Init(prefs::kPluginsShowDetails, prefs, NULL); |
return WebUIMessageHandler::Attach(web_ui); |
} |
@@ -202,13 +198,13 @@ |
return; |
bool enable = enable_str == "true"; |
- PluginUpdater* plugin_updater = PluginUpdater::GetInstance(); |
+ PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile); |
if (is_group_str == "true") { |
string16 group_name; |
if (!args->GetString(0, &group_name)) |
return; |
- plugin_updater->EnablePluginGroup(enable, group_name); |
+ plugin_prefs->EnablePluginGroup(enable, group_name); |
if (enable) { |
// See http://crbug.com/50105 for background. |
string16 adobereader = ASCIIToUTF16( |
@@ -216,9 +212,9 @@ |
string16 internalpdf = |
ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName); |
if (group_name == adobereader) { |
- plugin_updater->EnablePluginGroup(false, internalpdf); |
+ plugin_prefs->EnablePluginGroup(false, internalpdf); |
} else if (group_name == internalpdf) { |
- plugin_updater->EnablePluginGroup(false, adobereader); |
+ plugin_prefs->EnablePluginGroup(false, adobereader); |
} |
} |
} else { |
@@ -226,13 +222,13 @@ |
if (!args->GetString(0, &file_path)) |
return; |
- plugin_updater->EnablePlugin(enable, file_path); |
+ plugin_prefs->EnablePlugin(enable, FilePath(file_path)); |
} |
// TODO(viettrungluu): We might also want to ensure that the plugins |
// list is always written to prefs even when the user hasn't disabled a |
// plugin. <http://crbug.com/39101> |
- plugin_updater->UpdatePreferences(Profile::FromWebUI(web_ui_), 0); |
+ plugin_prefs->UpdatePreferences(0); |
} |
void PluginsDOMHandler::HandleSaveShowDetailsToPrefs(const ListValue* args) { |
@@ -256,41 +252,50 @@ |
LoadPlugins(); |
} |
-void PluginsDOMHandler::LoadPluginsOnFileThread(ListWrapper* wrapper, |
- Task* task) { |
- wrapper->list = PluginUpdater::GetInstance()->GetPluginGroupsData(); |
+void PluginsDOMHandler::LoadPluginsOnFileThread( |
+ std::vector<webkit::npapi::PluginGroup>* groups, |
+ Task* task) { |
+ webkit::npapi::PluginList::Singleton()->GetPluginGroups(true, groups); |
+ |
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, task); |
BrowserThread::PostTask( |
BrowserThread::UI, |
FROM_HERE, |
- NewRunnableFunction(&PluginsDOMHandler::EnsureListDeleted, wrapper)); |
+ NewRunnableFunction(&PluginsDOMHandler::EnsurePluginGroupsDeleted, |
+ groups)); |
} |
-void PluginsDOMHandler::EnsureListDeleted(ListWrapper* wrapper) { |
- delete wrapper->list; |
- delete wrapper; |
+void PluginsDOMHandler::EnsurePluginGroupsDeleted( |
+ std::vector<webkit::npapi::PluginGroup>* groups) { |
+ delete groups; |
} |
void PluginsDOMHandler::LoadPlugins() { |
if (!get_plugins_factory_.empty()) |
return; |
- ListWrapper* wrapper = new ListWrapper; |
- wrapper->list = NULL; |
+ std::vector<webkit::npapi::PluginGroup>* groups = |
+ new std::vector<webkit::npapi::PluginGroup>; |
Task* task = get_plugins_factory_.NewRunnableMethod( |
- &PluginsDOMHandler::PluginsLoaded, wrapper); |
+ &PluginsDOMHandler::PluginsLoaded, groups); |
BrowserThread::PostTask( |
BrowserThread::FILE, |
FROM_HERE, |
NewRunnableFunction( |
- &PluginsDOMHandler::LoadPluginsOnFileThread, wrapper, task)); |
+ &PluginsDOMHandler::LoadPluginsOnFileThread, groups, task)); |
} |
-void PluginsDOMHandler::PluginsLoaded(ListWrapper* wrapper) { |
+void PluginsDOMHandler::PluginsLoaded( |
+ const std::vector<webkit::npapi::PluginGroup>* groups) { |
+ // Construct DictionaryValues to return to the UI |
+ ListValue* plugin_groups_data = new ListValue(); |
+ for (size_t i = 0; i < groups->size(); ++i) { |
+ plugin_groups_data->Append((*groups)[i].GetDataForUI()); |
+ // TODO(bauerb): Fetch plugin enabled state from PluginPrefs. |
+ } |
DictionaryValue results; |
- results.Set("plugins", wrapper->list); |
- wrapper->list = NULL; // So it doesn't get deleted. |
+ results.Set("plugins", plugin_groups_data); |
web_ui_->CallJavascriptFunction("returnPluginsData", results); |
} |