1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_PLUGIN_UPDATER_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_PLUGIN_UPDATER_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <set>
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <vector>
1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass DictionaryValue;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ListValue;
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass NotificationDetails;
203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass NotificationSource;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile;
2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace webkit {
2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace npapi {
2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass PluginGroup;
263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct WebPluginInfo;
2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass PluginUpdater : public NotificationObserver {
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public:
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Get a list of all the plugin groups. The caller should take ownership
333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // of the returned ListValue.
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  static ListValue* GetPluginGroupsData();
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Enable or disable a plugin group.
373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void EnablePluginGroup(bool enable, const string16& group_name);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Enable or disable a specific plugin file.
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void EnablePlugin(bool enable, const FilePath::StringType& file_path);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Enable or disable plugin groups as defined by the user's preference file.
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void UpdatePluginGroupsStateFromPrefs(Profile* profile);
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Write the enable/disable status to the user's preference file.
46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdatePreferences(Profile* profile, int delay_ms);
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // NotificationObserver method overrides
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Observe(NotificationType type,
5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                       const NotificationSource& source,
5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                       const NotificationDetails& details);
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  static PluginUpdater* GetInstance();
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private:
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  PluginUpdater();
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ~PluginUpdater() {}
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Called on the file thread to get the data necessary to update the saved
60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // preferences.  The profile pointer is only to be passed to the UI thread.
61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  static void GetPreferencesDataOnFileThread(void* profile);
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Called on the UI thread with the plugin data to save the preferences.
6421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  static void OnUpdatePreferences(
6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      Profile* profile,
6621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      const std::vector<webkit::npapi::WebPluginInfo>& plugins,
6721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      const std::vector<webkit::npapi::PluginGroup>& groups);
683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Queues sending the notification that plugin data has changed.  This is done
70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // so that if a bunch of changes happen, we only send one notification.
71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void NotifyPluginStatusChanged();
72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Used for the post task to notify that plugin enabled status changed.
74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  static void OnNotifyPluginStatusChanged();
75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
7621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  static DictionaryValue* CreatePluginFileSummary(
7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      const webkit::npapi::WebPluginInfo& plugin);
783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Force plugins to be enabled or disabled due to policy.
80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // |disabled_list| contains the list of StringValues of the names of the
81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // policy-disabled plugins, |exceptions_list| the policy-allowed plugins,
82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // and |enabled_list| the policy-enabled plugins.
83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void UpdatePluginsStateFromPolicy(const ListValue* disabled_list,
84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                    const ListValue* exceptions_list,
85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                    const ListValue* enabled_list);
86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void ListValueToStringSet(const ListValue* src, std::set<string16>* dest);
883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Needed to allow singleton instantiation using private constructor.
903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  friend struct DefaultSingletonTraits<PluginUpdater>;
913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  bool notify_pending_;
93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DISALLOW_COPY_AND_ASSIGN(PluginUpdater);
953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_PLUGIN_UPDATER_H_
98