Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1611)

Unified Diff: chrome/browser/ui/webui/plugins_ui.cc

Issue 7627001: Revert r96364, it's breaking a NaCl test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: make it prettier Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/profiles/profile_dependency_manager.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 55304c3a6a6f1a024e8cceb7053c34e22e0ad4a1..b830969fe074de8c9779731e39de13066cc2cc67 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_prefs.h"
+#include "chrome/browser/plugin_updater.h"
#include "chrome/browser/prefs/pref_member.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -122,19 +122,23 @@ 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(
- std::vector<webkit::npapi::PluginGroup>* groups, Task* task);
+ static void LoadPluginsOnFileThread(ListWrapper* wrapper, Task* task);
// Used in conjunction with ListWrapper to avoid any memory leaks.
- static void EnsurePluginGroupsDeleted(
- std::vector<webkit::npapi::PluginGroup>* groups);
+ static void EnsureListDeleted(ListWrapper* wrapper);
// 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(const std::vector<webkit::npapi::PluginGroup>* groups);
+ void PluginsLoaded(ListWrapper* wrapper);
NotificationRegistrar registrar_;
@@ -157,7 +161,7 @@ PluginsDOMHandler::PluginsDOMHandler()
WebUIMessageHandler* PluginsDOMHandler::Attach(WebUI* web_ui) {
PrefService* prefs = Profile::FromWebUI(web_ui)->GetPrefs();
- show_details_.Init(prefs::kPluginsShowDetails, prefs, NULL);
+ show_details_.Init(prefs::kPluginsShowDetails, prefs, this);
return WebUIMessageHandler::Attach(web_ui);
}
@@ -198,13 +202,13 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) {
return;
bool enable = enable_str == "true";
- PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile);
+ PluginUpdater* plugin_updater = PluginUpdater::GetInstance();
if (is_group_str == "true") {
string16 group_name;
if (!args->GetString(0, &group_name))
return;
- plugin_prefs->EnablePluginGroup(enable, group_name);
+ plugin_updater->EnablePluginGroup(enable, group_name);
if (enable) {
// See http://crbug.com/50105 for background.
string16 adobereader = ASCIIToUTF16(
@@ -212,9 +216,9 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) {
string16 internalpdf =
ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName);
if (group_name == adobereader) {
- plugin_prefs->EnablePluginGroup(false, internalpdf);
+ plugin_updater->EnablePluginGroup(false, internalpdf);
} else if (group_name == internalpdf) {
- plugin_prefs->EnablePluginGroup(false, adobereader);
+ plugin_updater->EnablePluginGroup(false, adobereader);
}
}
} else {
@@ -222,13 +226,13 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) {
if (!args->GetString(0, &file_path))
return;
- plugin_prefs->EnablePlugin(enable, FilePath(file_path));
+ plugin_updater->EnablePlugin(enable, 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_prefs->UpdatePreferences(0);
+ plugin_updater->UpdatePreferences(profile, 0);
}
void PluginsDOMHandler::HandleSaveShowDetailsToPrefs(const ListValue* args) {
@@ -252,50 +256,41 @@ void PluginsDOMHandler::Observe(int type,
LoadPlugins();
}
-void PluginsDOMHandler::LoadPluginsOnFileThread(
- std::vector<webkit::npapi::PluginGroup>* groups,
- Task* task) {
- webkit::npapi::PluginList::Singleton()->GetPluginGroups(true, groups);
-
+void PluginsDOMHandler::LoadPluginsOnFileThread(ListWrapper* wrapper,
+ Task* task) {
+ wrapper->list = PluginUpdater::GetInstance()->GetPluginGroupsData();
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, task);
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
- NewRunnableFunction(&PluginsDOMHandler::EnsurePluginGroupsDeleted,
- groups));
+ NewRunnableFunction(&PluginsDOMHandler::EnsureListDeleted, wrapper));
}
-void PluginsDOMHandler::EnsurePluginGroupsDeleted(
- std::vector<webkit::npapi::PluginGroup>* groups) {
- delete groups;
+void PluginsDOMHandler::EnsureListDeleted(ListWrapper* wrapper) {
+ delete wrapper->list;
+ delete wrapper;
}
void PluginsDOMHandler::LoadPlugins() {
if (!get_plugins_factory_.empty())
return;
- std::vector<webkit::npapi::PluginGroup>* groups =
- new std::vector<webkit::npapi::PluginGroup>;
+ ListWrapper* wrapper = new ListWrapper;
+ wrapper->list = NULL;
Task* task = get_plugins_factory_.NewRunnableMethod(
- &PluginsDOMHandler::PluginsLoaded, groups);
+ &PluginsDOMHandler::PluginsLoaded, wrapper);
BrowserThread::PostTask(
BrowserThread::FILE,
FROM_HERE,
NewRunnableFunction(
- &PluginsDOMHandler::LoadPluginsOnFileThread, groups, task));
+ &PluginsDOMHandler::LoadPluginsOnFileThread, wrapper, task));
}
-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.
- }
+void PluginsDOMHandler::PluginsLoaded(ListWrapper* wrapper) {
DictionaryValue results;
- results.Set("plugins", plugin_groups_data);
+ results.Set("plugins", wrapper->list);
+ wrapper->list = NULL; // So it doesn't get deleted.
web_ui_->CallJavascriptFunction("returnPluginsData", results);
}
« no previous file with comments | « chrome/browser/profiles/profile_dependency_manager.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698