summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/webui/plugins_ui.cc
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-19 10:36:59 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-19 10:36:59 +0000
commit8a2713686b6631c559ac4505747089fb2f93aeb6 (patch)
treedf6c9ea119b68d5416bd04026359710380baacaa /chrome/browser/ui/webui/plugins_ui.cc
parent4c19b042ea31bd393d2265656f94339d1c3d82ff (diff)
downloadchromium_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.cc67
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);
}