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_
11 #include "base/callback.h"
12 #include "base/string16.h"
13 #include "content/common/content_export.h"
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.
42 typedef base::Callback
<void(const std::vector
<webkit::WebPluginInfo
>&)>
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
52 // NOTE: can only be called on the UI thread.
53 CONTENT_EXPORT
static void PurgePluginListCache(
54 BrowserContext
* browser_context
,
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(
70 const std::string
& mime_type
,
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
,
80 ResourceContext
* context
,
83 const std::string
& mime_type
,
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
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;
149 } // namespace content
151 #endif // CONTENT_PUBLIC_BROWSER_PLUGIN_SERVICE_H_