• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_PLUGIN_UPDATER_H_
6 #define CHROME_BROWSER_PLUGIN_UPDATER_H_
7 #pragma once
8 
9 #include <set>
10 #include <vector>
11 
12 #include "base/basictypes.h"
13 #include "base/file_path.h"
14 #include "base/memory/singleton.h"
15 #include "content/common/notification_observer.h"
16 
17 class DictionaryValue;
18 class ListValue;
19 class NotificationDetails;
20 class NotificationSource;
21 class Profile;
22 
23 namespace webkit {
24 namespace npapi {
25 class PluginGroup;
26 struct WebPluginInfo;
27 }
28 }
29 
30 class PluginUpdater : public NotificationObserver {
31  public:
32   // Get a list of all the plugin groups. The caller should take ownership
33   // of the returned ListValue.
34   static ListValue* GetPluginGroupsData();
35 
36   // Enable or disable a plugin group.
37   void EnablePluginGroup(bool enable, const string16& group_name);
38 
39   // Enable or disable a specific plugin file.
40   void EnablePlugin(bool enable, const FilePath::StringType& file_path);
41 
42   // Enable or disable plugin groups as defined by the user's preference file.
43   void UpdatePluginGroupsStateFromPrefs(Profile* profile);
44 
45   // Write the enable/disable status to the user's preference file.
46   void UpdatePreferences(Profile* profile, int delay_ms);
47 
48   // NotificationObserver method overrides
49   virtual void Observe(NotificationType type,
50                        const NotificationSource& source,
51                        const NotificationDetails& details);
52 
53   static PluginUpdater* GetInstance();
54 
55  private:
56   PluginUpdater();
~PluginUpdater()57   virtual ~PluginUpdater() {}
58 
59   // Called on the file thread to get the data necessary to update the saved
60   // preferences.  The profile pointer is only to be passed to the UI thread.
61   static void GetPreferencesDataOnFileThread(void* profile);
62 
63   // Called on the UI thread with the plugin data to save the preferences.
64   static void OnUpdatePreferences(
65       Profile* profile,
66       const std::vector<webkit::npapi::WebPluginInfo>& plugins,
67       const std::vector<webkit::npapi::PluginGroup>& groups);
68 
69   // Queues sending the notification that plugin data has changed.  This is done
70   // so that if a bunch of changes happen, we only send one notification.
71   void NotifyPluginStatusChanged();
72 
73   // Used for the post task to notify that plugin enabled status changed.
74   static void OnNotifyPluginStatusChanged();
75 
76   static DictionaryValue* CreatePluginFileSummary(
77       const webkit::npapi::WebPluginInfo& plugin);
78 
79   // Force plugins to be enabled or disabled due to policy.
80   // |disabled_list| contains the list of StringValues of the names of the
81   // policy-disabled plugins, |exceptions_list| the policy-allowed plugins,
82   // and |enabled_list| the policy-enabled plugins.
83   void UpdatePluginsStateFromPolicy(const ListValue* disabled_list,
84                                     const ListValue* exceptions_list,
85                                     const ListValue* enabled_list);
86 
87   void ListValueToStringSet(const ListValue* src, std::set<string16>* dest);
88 
89   // Needed to allow singleton instantiation using private constructor.
90   friend struct DefaultSingletonTraits<PluginUpdater>;
91 
92   bool notify_pending_;
93 
94   DISALLOW_COPY_AND_ASSIGN(PluginUpdater);
95 };
96 
97 #endif  // CHROME_BROWSER_PLUGIN_UPDATER_H_
98