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