Chromium Code Reviews| 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 397e6fcbc0d4c0e7756e2ec25f868c7a5d25a15d..015e8ead6bde64f0d252bab81d027f6d19202090 100644 |
| --- a/chrome/browser/ui/webui/plugins_ui.cc |
| +++ b/chrome/browser/ui/webui/plugins_ui.cc |
| @@ -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 @@ class PluginsDOMHandler : public WebUIMessageHandler, |
| 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 @@ PluginsDOMHandler::PluginsDOMHandler() |
| WebUIMessageHandler* PluginsDOMHandler::Attach(WebUI* web_ui) { |
| PrefService* prefs = web_ui->GetProfile()->GetPrefs(); |
| - show_details_.Init(prefs::kPluginsShowDetails, prefs, this); |
| + show_details_.Init(prefs::kPluginsShowDetails, prefs, NULL); |
| return WebUIMessageHandler::Attach(web_ui); |
| } |
| @@ -200,13 +196,13 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) { |
| return; |
| bool enable = enable_str == "true"; |
| - PluginUpdater* plugin_updater = PluginUpdater::GetInstance(); |
| + PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(web_ui_->GetProfile()); |
| 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( |
| @@ -214,9 +210,9 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) { |
| 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 { |
| @@ -224,13 +220,13 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) { |
| 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(web_ui_->GetProfile(), 0); |
| + plugin_prefs->UpdatePreferences(0); |
| } |
| void PluginsDOMHandler::HandleSaveShowDetailsToPrefs(const ListValue* args) { |
| @@ -254,41 +250,50 @@ void PluginsDOMHandler::Observe(int type, |
| 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( |
|
Evan Stade
2011/08/04 16:46:06
for example, I have no idea why there is a mixture
Bernhard Bauer
2011/08/05 13:42:20
The ScopedRunnableMethodFactory task isn't execute
|
| - &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); |
| } |