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