Re-enable index-basics-workers test to see if still times
[chromium-blink-merge.git] / content / public / browser / plugin_service.h
blobf8d5e891567092a892b62639030c6e7188b0385f
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.
5 #ifndef CONTENT_PUBLIC_BROWSER_PLUGIN_SERVICE_H_
6 #define CONTENT_PUBLIC_BROWSER_PLUGIN_SERVICE_H_
8 #include <string>
9 #include <vector>
11 #include "base/callback.h"
12 #include "base/string16.h"
13 #include "content/common/content_export.h"
15 class GURL;
17 namespace base {
18 class FilePath;
21 namespace webkit {
22 struct WebPluginInfo;
23 namespace npapi {
24 class PluginList;
28 namespace content {
30 class BrowserContext;
31 class PluginProcessHost;
32 class PluginServiceFilter;
33 class ResourceContext;
34 struct PepperPluginInfo;
36 // This must be created on the main thread but it's only called on the IO/file
37 // thread. This is an asynchronous wrapper around the PluginList interface for
38 // querying plugin information. This must be used instead of that to avoid
39 // doing expensive disk operations on the IO/UI threads.
40 class PluginService {
41 public:
42 typedef base::Callback<void(const std::vector<webkit::WebPluginInfo>&)>
43 GetPluginsCallback;
45 // Returns the PluginService singleton.
46 CONTENT_EXPORT static PluginService* GetInstance();
48 // Tells all the renderer processes associated with the given browser context
49 // to throw away their cache of the plugin list, and optionally also reload
50 // all the pages with plugins. If |browser_context| is NULL, purges the cache
51 // in all renderers.
52 // NOTE: can only be called on the UI thread.
53 CONTENT_EXPORT static void PurgePluginListCache(
54 BrowserContext* browser_context,
55 bool reload_pages);
57 virtual ~PluginService() {}
59 // Must be called on the instance to finish initialization.
60 virtual void Init() = 0;
62 // Starts watching for changes in the list of installed plug-ins.
63 virtual void StartWatchingPlugins() = 0;
65 // Gets the plugin in the list of plugins that matches the given url and mime
66 // type. Returns true if the data is frome a stale plugin list, false if it
67 // is up to date. This can be called from any thread.
68 virtual bool GetPluginInfoArray(
69 const GURL& url,
70 const std::string& mime_type,
71 bool allow_wildcard,
72 std::vector<webkit::WebPluginInfo>* info,
73 std::vector<std::string>* actual_mime_types) = 0;
75 // Gets plugin info for an individual plugin and filters the plugins using
76 // the |context| and renderer IDs. This will report whether the data is stale
77 // via |is_stale| and returns whether or not the plugin can be found.
78 virtual bool GetPluginInfo(int render_process_id,
79 int render_view_id,
80 ResourceContext* context,
81 const GURL& url,
82 const GURL& page_url,
83 const std::string& mime_type,
84 bool allow_wildcard,
85 bool* is_stale,
86 webkit::WebPluginInfo* info,
87 std::string* actual_mime_type) = 0;
89 // Get plugin info by plugin path (including disabled plugins). Returns true
90 // if the plugin is found and WebPluginInfo has been filled in |info|. This
91 // will use cached data in the plugin list.
92 virtual bool GetPluginInfoByPath(const base::FilePath& plugin_path,
93 webkit::WebPluginInfo* info) = 0;
95 // Returns the display name for the plugin identified by the given path. If
96 // the path doesn't identify a plugin, or the plugin has no display name,
97 // this will attempt to generate a display name from the path.
98 virtual string16 GetPluginDisplayNameByPath(
99 const base::FilePath& plugin_path) = 0;
101 // Asynchronously loads plugins if necessary and then calls back to the
102 // provided function on the calling MessageLoop on completion.
103 virtual void GetPlugins(const GetPluginsCallback& callback) = 0;
105 // Returns information about a pepper plugin if it exists, otherwise NULL.
106 // The caller does not own the pointer, and it's not guaranteed to live past
107 // the call stack.
108 virtual PepperPluginInfo* GetRegisteredPpapiPluginInfo(
109 const base::FilePath& plugin_path) = 0;
111 virtual void SetFilter(PluginServiceFilter* filter) = 0;
112 virtual PluginServiceFilter* GetFilter() = 0;
114 // If the plugin with the given path is running, cleanly shuts it down.
115 virtual void ForcePluginShutdown(const base::FilePath& plugin_path) = 0;
117 // Used to monitor plug-in stability. An unstable plug-in is one that has
118 // crashed more than a set number of times in a set time period.
119 virtual bool IsPluginUnstable(const base::FilePath& plugin_path) = 0;
121 // The following functions are wrappers around webkit::npapi::PluginList.
122 // These must be used instead of those in order to ensure that we have a
123 // single global list in the component build and so that we don't
124 // accidentally load plugins in the wrong process or thread. Refer to
125 // PluginList for further documentation of these functions.
126 virtual void RefreshPlugins() = 0;
127 virtual void AddExtraPluginPath(const base::FilePath& path) = 0;
128 virtual void AddExtraPluginDir(const base::FilePath& path) = 0;
129 virtual void RemoveExtraPluginPath(const base::FilePath& path) = 0;
130 virtual void UnregisterInternalPlugin(const base::FilePath& path) = 0;
131 virtual void RegisterInternalPlugin(const webkit::WebPluginInfo& info,
132 bool add_at_beginning) = 0;
133 virtual void GetInternalPlugins(
134 std::vector<webkit::WebPluginInfo>* plugins) = 0;
136 // TODO(dpranke): This should be private.
137 virtual webkit::npapi::PluginList* GetPluginList() = 0;
139 virtual void SetPluginListForTesting(
140 webkit::npapi::PluginList* plugin_list) = 0;
142 #if defined(OS_MACOSX)
143 // Called when the application is made active so that modal plugin windows can
144 // be made forward too.
145 virtual void AppActivated() = 0;
146 #endif
149 } // namespace content
151 #endif // CONTENT_PUBLIC_BROWSER_PLUGIN_SERVICE_H_