| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef WEBKIT_PLUGINS_NPAPI_PLUGIN_LIST_H_ | 5 #ifndef WEBKIT_PLUGINS_NPAPI_PLUGIN_LIST_H_ |
| 6 #define WEBKIT_PLUGINS_NPAPI_PLUGIN_LIST_H_ | 6 #define WEBKIT_PLUGINS_NPAPI_PLUGIN_LIST_H_ |
| 7 | 7 |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 static bool SupportsType(const webkit::WebPluginInfo& plugin, | 64 static bool SupportsType(const webkit::WebPluginInfo& plugin, |
| 65 const std::string& mime_type, | 65 const std::string& mime_type, |
| 66 bool allow_wildcard); | 66 bool allow_wildcard); |
| 67 | 67 |
| 68 // Cause the plugin list to refresh next time they are accessed, regardless | 68 // Cause the plugin list to refresh next time they are accessed, regardless |
| 69 // of whether they are already loaded. | 69 // of whether they are already loaded. |
| 70 void RefreshPlugins(); | 70 void RefreshPlugins(); |
| 71 | 71 |
| 72 // Add/Remove an extra plugin to load when we actually do the loading. Must | 72 // Add/Remove an extra plugin to load when we actually do the loading. Must |
| 73 // be called before the plugins have been loaded. | 73 // be called before the plugins have been loaded. |
| 74 void AddExtraPluginPath(const FilePath& plugin_path); | 74 void AddExtraPluginPath(const base::FilePath& plugin_path); |
| 75 void RemoveExtraPluginPath(const FilePath& plugin_path); | 75 void RemoveExtraPluginPath(const base::FilePath& plugin_path); |
| 76 | 76 |
| 77 // Same as above, but specifies a directory in which to search for plugins. | 77 // Same as above, but specifies a directory in which to search for plugins. |
| 78 void AddExtraPluginDir(const FilePath& plugin_dir); | 78 void AddExtraPluginDir(const base::FilePath& plugin_dir); |
| 79 | 79 |
| 80 // Get the ordered list of directories from which to load plugins | 80 // Get the ordered list of directories from which to load plugins |
| 81 void GetPluginDirectories(std::vector<FilePath>* plugin_dirs); | 81 void GetPluginDirectories(std::vector<base::FilePath>* plugin_dirs); |
| 82 | 82 |
| 83 // Register an internal plugin with the specified plugin information. | 83 // Register an internal plugin with the specified plugin information. |
| 84 // An internal plugin must be registered before it can | 84 // An internal plugin must be registered before it can |
| 85 // be loaded using PluginList::LoadPlugin(). | 85 // be loaded using PluginList::LoadPlugin(). |
| 86 // If |add_at_beginning| is true the plugin will be added earlier in | 86 // If |add_at_beginning| is true the plugin will be added earlier in |
| 87 // the list so that it can override the MIME types of older registrations. | 87 // the list so that it can override the MIME types of older registrations. |
| 88 void RegisterInternalPlugin(const webkit::WebPluginInfo& info, | 88 void RegisterInternalPlugin(const webkit::WebPluginInfo& info, |
| 89 bool add_at_beginning); | 89 bool add_at_beginning); |
| 90 | 90 |
| 91 // This second version is for "plugins" that have been compiled directly into | 91 // This second version is for "plugins" that have been compiled directly into |
| 92 // the binary -- callers must provide the plugin information and the entry | 92 // the binary -- callers must provide the plugin information and the entry |
| 93 // points. | 93 // points. |
| 94 void RegisterInternalPluginWithEntryPoints( | 94 void RegisterInternalPluginWithEntryPoints( |
| 95 const webkit::WebPluginInfo& info, | 95 const webkit::WebPluginInfo& info, |
| 96 bool add_at_beginning, | 96 bool add_at_beginning, |
| 97 const PluginEntryPoints& entry_points); | 97 const PluginEntryPoints& entry_points); |
| 98 | 98 |
| 99 // Removes a specified internal plugin from the list. The search will match | 99 // Removes a specified internal plugin from the list. The search will match |
| 100 // on the path from the version info previously registered. | 100 // on the path from the version info previously registered. |
| 101 // | 101 // |
| 102 // This is generally only necessary for tests. | 102 // This is generally only necessary for tests. |
| 103 void UnregisterInternalPlugin(const FilePath& path); | 103 void UnregisterInternalPlugin(const base::FilePath& path); |
| 104 | 104 |
| 105 // Gets a list of all the registered internal plugins. | 105 // Gets a list of all the registered internal plugins. |
| 106 void GetInternalPlugins(std::vector<webkit::WebPluginInfo>* plugins); | 106 void GetInternalPlugins(std::vector<webkit::WebPluginInfo>* plugins); |
| 107 | 107 |
| 108 // Creates a WebPluginInfo structure given a plugin's path. On success | 108 // Creates a WebPluginInfo structure given a plugin's path. On success |
| 109 // returns true, with the information being put into "info". If it's an | 109 // returns true, with the information being put into "info". If it's an |
| 110 // internal plugin, "entry_points" is filled in as well with a | 110 // internal plugin, "entry_points" is filled in as well with a |
| 111 // internally-owned PluginEntryPoints pointer. | 111 // internally-owned PluginEntryPoints pointer. |
| 112 // Returns false if the library couldn't be found, or if it's not a plugin. | 112 // Returns false if the library couldn't be found, or if it's not a plugin. |
| 113 bool ReadPluginInfo(const FilePath& filename, | 113 bool ReadPluginInfo(const base::FilePath& filename, |
| 114 webkit::WebPluginInfo* info, | 114 webkit::WebPluginInfo* info, |
| 115 const PluginEntryPoints** entry_points); | 115 const PluginEntryPoints** entry_points); |
| 116 | 116 |
| 117 // In Windows plugins, the mime types are passed as a specially formatted list | 117 // In Windows plugins, the mime types are passed as a specially formatted list |
| 118 // of strings. This function parses those strings into a WebPluginMimeType | 118 // of strings. This function parses those strings into a WebPluginMimeType |
| 119 // vector. | 119 // vector. |
| 120 // TODO(evan): move this code into plugin_list_win. | 120 // TODO(evan): move this code into plugin_list_win. |
| 121 static bool ParseMimeTypes( | 121 static bool ParseMimeTypes( |
| 122 const std::string& mime_types, | 122 const std::string& mime_types, |
| 123 const std::string& file_extensions, | 123 const std::string& file_extensions, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 146 // will be true iff the plug-in list was stale. | 146 // will be true iff the plug-in list was stale. |
| 147 void GetPluginInfoArray(const GURL& url, | 147 void GetPluginInfoArray(const GURL& url, |
| 148 const std::string& mime_type, | 148 const std::string& mime_type, |
| 149 bool allow_wildcard, | 149 bool allow_wildcard, |
| 150 bool* use_stale, | 150 bool* use_stale, |
| 151 std::vector<webkit::WebPluginInfo>* info, | 151 std::vector<webkit::WebPluginInfo>* info, |
| 152 std::vector<std::string>* actual_mime_types); | 152 std::vector<std::string>* actual_mime_types); |
| 153 | 153 |
| 154 // Load a specific plugin with full path. Return true iff loading the plug-in | 154 // Load a specific plugin with full path. Return true iff loading the plug-in |
| 155 // was successful. | 155 // was successful. |
| 156 bool LoadPluginIntoPluginList(const FilePath& filename, | 156 bool LoadPluginIntoPluginList(const base::FilePath& filename, |
| 157 std::vector<webkit::WebPluginInfo>* plugins, | 157 std::vector<webkit::WebPluginInfo>* plugins, |
| 158 webkit::WebPluginInfo* plugin_info); | 158 webkit::WebPluginInfo* plugin_info); |
| 159 | 159 |
| 160 // The following functions are used to support probing for WebPluginInfo | 160 // The following functions are used to support probing for WebPluginInfo |
| 161 // using a different instance of this class. | 161 // using a different instance of this class. |
| 162 | 162 |
| 163 // Computes a list of all plugins to potentially load from all sources. | 163 // Computes a list of all plugins to potentially load from all sources. |
| 164 void GetPluginPathsToLoad(std::vector<FilePath>* plugin_paths); | 164 void GetPluginPathsToLoad(std::vector<base::FilePath>* plugin_paths); |
| 165 | 165 |
| 166 // Clears the internal list of Plugins and copies them from the vector. | 166 // Clears the internal list of Plugins and copies them from the vector. |
| 167 void SetPlugins(const std::vector<webkit::WebPluginInfo>& plugins); | 167 void SetPlugins(const std::vector<webkit::WebPluginInfo>& plugins); |
| 168 | 168 |
| 169 void set_will_load_plugins_callback(const base::Closure& callback); | 169 void set_will_load_plugins_callback(const base::Closure& callback); |
| 170 | 170 |
| 171 virtual ~PluginList(); | 171 virtual ~PluginList(); |
| 172 | 172 |
| 173 protected: | 173 protected: |
| 174 // Constructors are private for singletons but we expose this one | 174 // Constructors are private for singletons but we expose this one |
| (...skipping 18 matching lines...) Expand all Loading... |
| 193 // Implements all IO dependent operations of the LoadPlugins method so that | 193 // Implements all IO dependent operations of the LoadPlugins method so that |
| 194 // test classes can mock these out. | 194 // test classes can mock these out. |
| 195 virtual void LoadPluginsIntoPluginListInternal( | 195 virtual void LoadPluginsIntoPluginListInternal( |
| 196 std::vector<webkit::WebPluginInfo>* plugins); | 196 std::vector<webkit::WebPluginInfo>* plugins); |
| 197 | 197 |
| 198 // Load all plugins from the default plugins directory. | 198 // Load all plugins from the default plugins directory. |
| 199 void LoadPlugins(); | 199 void LoadPlugins(); |
| 200 | 200 |
| 201 // Walks a directory and produces a list of all the plugins to potentially | 201 // Walks a directory and produces a list of all the plugins to potentially |
| 202 // load in that directory. | 202 // load in that directory. |
| 203 void GetPluginsInDir(const FilePath& path, std::vector<FilePath>* plugins); | 203 void GetPluginsInDir(const base::FilePath& path, |
| 204 std::vector<base::FilePath>* plugins); |
| 204 | 205 |
| 205 // Returns true if we should load the given plugin, or false otherwise. | 206 // Returns true if we should load the given plugin, or false otherwise. |
| 206 // |plugins| is the list of plugins we have crawled in the current plugin | 207 // |plugins| is the list of plugins we have crawled in the current plugin |
| 207 // loading run. | 208 // loading run. |
| 208 bool ShouldLoadPluginUsingPluginList( | 209 bool ShouldLoadPluginUsingPluginList( |
| 209 const webkit::WebPluginInfo& info, | 210 const webkit::WebPluginInfo& info, |
| 210 std::vector<webkit::WebPluginInfo>* plugins); | 211 std::vector<webkit::WebPluginInfo>* plugins); |
| 211 | 212 |
| 212 // Returns true if the given plugin supports a given file extension. | 213 // Returns true if the given plugin supports a given file extension. |
| 213 // |extension| should be all lower case. If |mime_type| is not NULL, it will | 214 // |extension| should be all lower case. If |mime_type| is not NULL, it will |
| (...skipping 13 matching lines...) Expand all Loading... |
| 227 // | 228 // |
| 228 // Command-line switches | 229 // Command-line switches |
| 229 // | 230 // |
| 230 | 231 |
| 231 #if defined(OS_WIN) | 232 #if defined(OS_WIN) |
| 232 // true if we shouldn't load the new WMP plugin. | 233 // true if we shouldn't load the new WMP plugin. |
| 233 bool dont_load_new_wmp_; | 234 bool dont_load_new_wmp_; |
| 234 | 235 |
| 235 // Gets plugin paths registered under HKCU\Software\MozillaPlugins and | 236 // Gets plugin paths registered under HKCU\Software\MozillaPlugins and |
| 236 // HKLM\Software\MozillaPlugins. | 237 // HKLM\Software\MozillaPlugins. |
| 237 void GetPluginPathsFromRegistry(std::vector<FilePath>* plugins); | 238 void GetPluginPathsFromRegistry(std::vector<base::FilePath>* plugins); |
| 238 #endif | 239 #endif |
| 239 | 240 |
| 240 // | 241 // |
| 241 // Internals | 242 // Internals |
| 242 // | 243 // |
| 243 | 244 |
| 244 // States whether we will load the plug-in list the next time we try to access | 245 // States whether we will load the plug-in list the next time we try to access |
| 245 // it, whether we are currently in the process of loading it, or whether we | 246 // it, whether we are currently in the process of loading it, or whether we |
| 246 // consider it up-to-date. | 247 // consider it up-to-date. |
| 247 LoadingState loading_state_; | 248 LoadingState loading_state_; |
| 248 | 249 |
| 249 // Extra plugin paths that we want to search when loading. | 250 // Extra plugin paths that we want to search when loading. |
| 250 std::vector<FilePath> extra_plugin_paths_; | 251 std::vector<base::FilePath> extra_plugin_paths_; |
| 251 | 252 |
| 252 // Extra plugin directories that we want to search when loading. | 253 // Extra plugin directories that we want to search when loading. |
| 253 std::vector<FilePath> extra_plugin_dirs_; | 254 std::vector<base::FilePath> extra_plugin_dirs_; |
| 254 | 255 |
| 255 // Holds information about internal plugins. | 256 // Holds information about internal plugins. |
| 256 std::vector<InternalPlugin> internal_plugins_; | 257 std::vector<InternalPlugin> internal_plugins_; |
| 257 | 258 |
| 258 // A list holding all plug-ins. | 259 // A list holding all plug-ins. |
| 259 std::vector<webkit::WebPluginInfo> plugins_list_; | 260 std::vector<webkit::WebPluginInfo> plugins_list_; |
| 260 | 261 |
| 261 // Callback that is invoked whenever the PluginList will reload the plugins. | 262 // Callback that is invoked whenever the PluginList will reload the plugins. |
| 262 base::Closure will_load_plugins_callback_; | 263 base::Closure will_load_plugins_callback_; |
| 263 | 264 |
| 264 // Need synchronization for the above members since this object can be | 265 // Need synchronization for the above members since this object can be |
| 265 // accessed on multiple threads. | 266 // accessed on multiple threads. |
| 266 base::Lock lock_; | 267 base::Lock lock_; |
| 267 | 268 |
| 268 DISALLOW_COPY_AND_ASSIGN(PluginList); | 269 DISALLOW_COPY_AND_ASSIGN(PluginList); |
| 269 }; | 270 }; |
| 270 | 271 |
| 271 } // namespace npapi | 272 } // namespace npapi |
| 272 } // namespace webkit | 273 } // namespace webkit |
| 273 | 274 |
| 274 #endif // WEBKIT_PLUGINS_NPAPI_PLUGIN_LIST_H_ | 275 #endif // WEBKIT_PLUGINS_NPAPI_PLUGIN_LIST_H_ |
| OLD | NEW |