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#ifndef CHROME_BROWSER_PLUGINS_PLUGIN_STATUS_PREF_SETTER_H_ 6#define CHROME_BROWSER_PLUGINS_PLUGIN_STATUS_PREF_SETTER_H_ 7 8#include <vector> 9 10#include "base/memory/ref_counted.h" 11#include "base/memory/weak_ptr.h" 12#include "base/prefs/pref_member.h" 13#include "content/public/browser/notification_observer.h" 14#include "content/public/browser/notification_registrar.h" 15 16class PluginPrefs; 17class PrefService; 18class Profile; 19 20namespace content { 21struct WebPluginInfo; 22} 23 24// Helper class modeled after BooleanPrefMember to (asynchronously) update 25// preferences related to plugin enable status. 26// It should only be used from the UI thread. The client has to make sure that 27// the passed profile outlives this object. 28class PluginStatusPrefSetter : public content::NotificationObserver { 29 public: 30 PluginStatusPrefSetter(); 31 virtual ~PluginStatusPrefSetter(); 32 33 // Binds the preferences in the profile's PrefService, notifying |observer| if 34 // any value changes. 35 // This asynchronously calls the PluginService to get the list of installed 36 // plug-ins. 37 void Init(Profile* profile, 38 const BooleanPrefMember::NamedChangeCallback& observer); 39 40 bool IsClearPluginLSODataEnabled() const { 41 return clear_plugin_lso_data_enabled_.GetValue(); 42 } 43 44 bool IsPepperFlashSettingsEnabled() const { 45 return pepper_flash_settings_enabled_.GetValue(); 46 } 47 48 // content::NotificationObserver methods: 49 virtual void Observe(int type, 50 const content::NotificationSource& source, 51 const content::NotificationDetails& details) OVERRIDE; 52 53 private: 54 void StartUpdate(); 55 void GotPlugins(scoped_refptr<PluginPrefs> plugin_prefs, 56 const std::vector<content::WebPluginInfo>& plugins); 57 58 content::NotificationRegistrar registrar_; 59 // Weak pointer. 60 Profile* profile_; 61 62 // Whether clearing LSO data is supported. 63 BooleanPrefMember clear_plugin_lso_data_enabled_; 64 // Whether we should show Pepper Flash-specific settings. 65 BooleanPrefMember pepper_flash_settings_enabled_; 66 67 base::WeakPtrFactory<PluginStatusPrefSetter> factory_; 68 69 DISALLOW_COPY_AND_ASSIGN(PluginStatusPrefSetter); 70}; 71 72#endif // CHROME_BROWSER_PLUGINS_PLUGIN_STATUS_PREF_SETTER_H_ 73