summaryrefslogtreecommitdiffstats
path: root/webkit/glue/plugins/plugin_lib.h
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/glue/plugins/plugin_lib.h')
-rw-r--r--webkit/glue/plugins/plugin_lib.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/webkit/glue/plugins/plugin_lib.h b/webkit/glue/plugins/plugin_lib.h
new file mode 100644
index 0000000..647916e
--- /dev/null
+++ b/webkit/glue/plugins/plugin_lib.h
@@ -0,0 +1,120 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_GLUE_PLUGINS_PLUGIN_LIB_H_
+#define WEBKIT_GLUE_PLUGINS_PLUGIN_LIB_H_
+
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/file_path.h"
+#include "base/native_library.h"
+#include "base/ref_counted.h"
+#include "build/build_config.h"
+#include "webkit/glue/plugins/plugin_list.h"
+#include "webkit/glue/plugins/webplugin.h"
+
+struct WebPluginInfo;
+
+namespace NPAPI {
+
+class PluginInstance;
+
+// A PluginLib is a single NPAPI Plugin Library, and is the lifecycle
+// manager for new PluginInstances.
+class PluginLib : public base::RefCounted<PluginLib> {
+ public:
+ static PluginLib* CreatePluginLib(const FilePath& filename);
+
+ // Creates a WebPluginInfo structure given a plugin's path. On success
+ // returns true, with the information being put into "info".
+ // Returns false if the library couldn't be found, or if it's not a plugin.
+ static bool ReadWebPluginInfo(const FilePath& filename, WebPluginInfo* info);
+
+#if defined(OS_POSIX) && !defined(OS_MACOSX)
+ // Parse the result of an NP_GetMIMEDescription() call.
+ // This API is only used on Unixes, and is exposed here for testing.
+ static void ParseMIMEDescription(const std::string& description,
+ std::vector<WebPluginMimeType>* mime_types);
+#endif
+
+ // Unloads all the loaded plugin libraries and cleans up the plugin map.
+ static void UnloadAllPlugins();
+
+ // Shuts down all loaded plugin instances.
+ static void ShutdownAllPlugins();
+
+ // Get the Plugin's function pointer table.
+ NPPluginFuncs* functions();
+
+ // Creates a new instance of this plugin.
+ PluginInstance* CreateInstance(const std::string& mime_type);
+
+ // Called by the instance when the instance is tearing down.
+ void CloseInstance();
+
+ // Gets information about this plugin and the mime types that it
+ // supports.
+ const WebPluginInfo& plugin_info() { return web_plugin_info_; }
+
+ bool internal() { return internal_; }
+
+ //
+ // NPAPI functions
+ //
+
+ // NPAPI method to initialize a Plugin.
+ // Initialize can be safely called multiple times
+ NPError NP_Initialize();
+
+ // NPAPI method to shutdown a Plugin.
+ void NP_Shutdown(void);
+
+ int instance_count() const { return instance_count_; }
+
+ // Prevents the library code from being unload when Unload() is called (since
+ // some plugins crash if unloaded).
+ void PreventLibraryUnload();
+
+ // protected for testability.
+ protected:
+ friend class base::RefCounted<PluginLib>;
+
+ // Creates a new PluginLib.
+ // |entry_points| is non-NULL for internal plugins.
+ PluginLib(const WebPluginInfo& info,
+ const PluginEntryPoints* entry_points);
+
+ virtual ~PluginLib();
+
+ // Attempts to load the plugin from the library.
+ // Returns true if it is a legitimate plugin, false otherwise
+ bool Load();
+
+ // Unloads the plugin library.
+ void Unload();
+
+ // Shutdown the plugin library.
+ void Shutdown();
+
+ private:
+ bool internal_; // True for plugins that are built-in into chrome binaries.
+ WebPluginInfo web_plugin_info_; // Supported mime types, description
+ base::NativeLibrary library_; // The opened library reference.
+ NPPluginFuncs plugin_funcs_; // The struct of plugin side functions.
+ bool initialized_; // Is the plugin initialized?
+ NPSavedData *saved_data_; // Persisted plugin info for NPAPI.
+ int instance_count_; // Count of plugins in use.
+ bool skip_unload_; // True if library_ should not be unloaded.
+
+ // Function pointers to entry points into the plugin.
+ PluginEntryPoints entry_points_;
+
+ DISALLOW_COPY_AND_ASSIGN(PluginLib);
+};
+
+} // namespace NPAPI
+
+#endif // WEBKIT_GLUE_PLUGINS_PLUGIN_LIB_H_