blob: 7207bc43ac231d7190cc6b07b25fdf1fded06ac6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
// Copyright (c) 2006-2008 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_PLUGIN_PLUGIN_LIB_H__
#define WEBKIT_GLUE_PLUGIN_PLUGIN_LIB_H__
#include "build/build_config.h"
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "base/file_path.h"
#include "base/ref_counted.h"
#include "base/scoped_ptr.h"
#include "webkit/glue/plugins/plugin_list.h"
#include "webkit/glue/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);
virtual ~PluginLib();
// 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);
// 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_; }
//
// 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_; }
private:
// Creates a new PluginLib.
// |entry_points| is non-NULL for internal plugins.
PluginLib(const WebPluginInfo& info,
const PluginEntryPoints* entry_points);
// 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();
public:
#if defined(OS_WIN)
typedef HMODULE NativeLibrary;
typedef char* NativeLibraryFunctionNameType;
#define FUNCTION_NAME(x) x
#elif defined(OS_MACOSX)
typedef CFBundleRef NativeLibrary;
typedef CFStringRef NativeLibraryFunctionNameType;
#define FUNCTION_NAME(x) CFSTR(x)
#elif defined(OS_LINUX)
typedef void* NativeLibrary;
typedef const char* NativeLibraryFunctionNameType;
#define FUNCTION_NAME(x) x
#endif // OS_*
// Loads a native library from disk. NOTE: You must release it with
// UnloadNativeLibrary when you're done.
static NativeLibrary LoadNativeLibrary(const FilePath& library_path);
// Unloads a native library.
static void UnloadNativeLibrary(NativeLibrary library);
private:
// Gets a function pointer from a native library.
static void* GetFunctionPointerFromNativeLibrary(
NativeLibrary library,
NativeLibraryFunctionNameType name);
bool internal_; // Whether this an internal plugin.
WebPluginInfo web_plugin_info_; // supported mime types, description
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
// Function pointers to entry points into the plugin.
PluginEntryPoints entry_points_;
DISALLOW_EVIL_CONSTRUCTORS(PluginLib);
};
} // namespace NPAPI
#endif // WEBKIT_GLUE_PLUGIN_PLUGIN_LIB_H__
|