08d87407bf5114c54ac2a5109f88bd8246c6c3bc
[WebKit-https.git] / Source / WebKit2 / Shared / Plugins / Netscape / NetscapePluginModule.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef NetscapePluginModule_h
27 #define NetscapePluginModule_h
28
29 #include "Module.h"
30 #include "PluginModuleInfo.h"
31 #include "PluginQuirks.h"
32 #include <WebCore/npruntime_internal.h>
33 #include <wtf/RefCounted.h>
34 #include <wtf/text/WTFString.h>
35
36 namespace WebKit {
37
38 class NetscapePluginModule : public RefCounted<NetscapePluginModule> {
39 public:
40     static PassRefPtr<NetscapePluginModule> getOrCreate(const String& pluginPath);
41     ~NetscapePluginModule();
42
43     const NPPluginFuncs& pluginFuncs() const { return m_pluginFuncs; }
44  
45     void incrementLoadCount();
46     void decrementLoadCount();
47
48     static bool getPluginInfo(const String& pluginPath, PluginModuleInfo&);
49
50     const PluginQuirks& pluginQuirks() const { return m_pluginQuirks; }
51
52     // Return a list of domains for which the plug-in has data stored.
53     Vector<String> sitesWithData();
54
55     // Request that the plug-in clear the site data.
56     bool clearSiteData(const String& site, uint64_t flags, uint64_t maxAge);
57
58     Module* module() const { return m_module.get(); }
59
60 #if PLUGIN_ARCHITECTURE(MAC)
61     static bool createPluginMIMETypesPreferences(const String& pluginPath);
62 #endif
63
64 private:
65     explicit NetscapePluginModule(const String& pluginPath);
66
67     void determineQuirks();
68
69 #if PLUGIN_ARCHITECTURE(X11)
70     void applyX11QuirksBeforeLoad();
71     static void setMIMEDescription(const String& mimeDescription, PluginModuleInfo&);
72     bool pluginInfo(PluginModuleInfo&);
73 #endif
74
75     bool tryGetSitesWithData(Vector<String>&);
76     bool tryClearSiteData(const String& site, uint64_t flags, uint64_t maxAge);
77
78     bool tryLoad();
79     bool load();
80     void unload();
81
82     void shutdown();
83
84     String m_pluginPath;
85     bool m_isInitialized;
86     unsigned m_loadCount;
87
88     PluginQuirks m_pluginQuirks;
89
90     NPP_ShutdownProcPtr m_shutdownProcPtr;
91     NPPluginFuncs m_pluginFuncs;
92
93     OwnPtr<Module> m_module;
94 };
95     
96 } // namespace WebKit
97
98 #endif // NetscapePluginModule_h