| 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(
|
| - &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);
|
| }
|
|
|
|
|