diff options
author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-19 10:36:59 +0000 |
---|---|---|
committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-19 10:36:59 +0000 |
commit | 8a2713686b6631c559ac4505747089fb2f93aeb6 (patch) | |
tree | df6c9ea119b68d5416bd04026359710380baacaa /chrome/browser/ui/webui/plugins_ui.cc | |
parent | 4c19b042ea31bd393d2265656f94339d1c3d82ff (diff) | |
download | chromium_src-8a2713686b6631c559ac4505747089fb2f93aeb6.zip chromium_src-8a2713686b6631c559ac4505747089fb2f93aeb6.tar.gz chromium_src-8a2713686b6631c559ac4505747089fb2f93aeb6.tar.bz2 |
Reland r96364: Rename PluginUpdater to PluginPrefs and make it per-profile.
BUG=80794
TEST=none
Review URL: http://codereview.chromium.org/7639017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97452 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/webui/plugins_ui.cc')
-rw-r--r-- | chrome/browser/ui/webui/plugins_ui.cc | 67 |
1 files changed, 36 insertions, 31 deletions
diff --git a/chrome/browser/ui/webui/plugins_ui.cc b/chrome/browser/ui/webui/plugins_ui.cc index b830969..55304c3 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 = 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 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) { 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 @@ 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 { @@ -226,13 +222,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(profile, 0); + plugin_prefs->UpdatePreferences(0); } void PluginsDOMHandler::HandleSaveShowDetailsToPrefs(const ListValue* args) { @@ -256,41 +252,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); } |