Home | History | Annotate | Download | only in plugins
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/plugins/plugin_status_pref_setter.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/prefs/pref_service.h"
      9 #include "chrome/browser/chrome_notification_types.h"
     10 #include "chrome/browser/pepper_flash_settings_manager.h"
     11 #include "chrome/browser/plugins/plugin_data_remover_helper.h"
     12 #include "chrome/browser/plugins/plugin_prefs.h"
     13 #include "chrome/browser/profiles/profile.h"
     14 #include "chrome/common/pref_names.h"
     15 #include "content/public/browser/browser_thread.h"
     16 #include "content/public/browser/notification_source.h"
     17 #include "content/public/browser/plugin_service.h"
     18 #include "content/public/common/webplugininfo.h"
     19 
     20 using content::BrowserThread;
     21 using content::PluginService;
     22 
     23 PluginStatusPrefSetter::PluginStatusPrefSetter()
     24     : profile_(NULL),
     25       factory_(this) {}
     26 
     27 PluginStatusPrefSetter::~PluginStatusPrefSetter() {
     28 }
     29 
     30 void PluginStatusPrefSetter::Init(
     31     Profile* profile,
     32     const BooleanPrefMember::NamedChangeCallback& observer) {
     33   clear_plugin_lso_data_enabled_.Init(prefs::kClearPluginLSODataEnabled,
     34                                       profile->GetPrefs(), observer);
     35   pepper_flash_settings_enabled_.Init(prefs::kPepperFlashSettingsEnabled,
     36                                       profile->GetPrefs(), observer);
     37   profile_ = profile;
     38   registrar_.Add(this, chrome::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED,
     39                  content::Source<Profile>(profile));
     40   StartUpdate();
     41 }
     42 
     43 void PluginStatusPrefSetter::Observe(
     44     int type,
     45     const content::NotificationSource& source,
     46     const content::NotificationDetails& details) {
     47   if (type == chrome::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED) {
     48     StartUpdate();
     49   } else {
     50     NOTREACHED();
     51   }
     52 }
     53 
     54 void PluginStatusPrefSetter::StartUpdate() {
     55   PluginService::GetInstance()->GetPlugins(
     56       base::Bind(&PluginStatusPrefSetter::GotPlugins, factory_.GetWeakPtr(),
     57                  PluginPrefs::GetForProfile(profile_)));
     58 }
     59 
     60 void PluginStatusPrefSetter::GotPlugins(
     61     scoped_refptr<PluginPrefs> plugin_prefs,
     62     const std::vector<content::WebPluginInfo>& plugins) {
     63   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     64   // Set the values on the PrefService instead of through the PrefMembers to
     65   // notify observers if they changed.
     66   profile_->GetPrefs()->SetBoolean(
     67       clear_plugin_lso_data_enabled_.GetPrefName().c_str(),
     68       PluginDataRemoverHelper::IsSupported(plugin_prefs.get()));
     69   profile_->GetPrefs()->SetBoolean(
     70       pepper_flash_settings_enabled_.GetPrefName().c_str(),
     71       PepperFlashSettingsManager::IsPepperFlashInUse(plugin_prefs.get(), NULL));
     72 }
     73