summaryrefslogtreecommitdiffstats
path: root/Source/WebKit2/Shared/Plugins/Netscape
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-24 11:24:40 +0100
committerBen Murdoch <benm@google.com>2011-06-02 09:53:15 +0100
commit81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch)
tree7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebKit2/Shared/Plugins/Netscape
parent94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff)
downloadexternal_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebKit2/Shared/Plugins/Netscape')
-rw-r--r--Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp115
-rw-r--r--Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h20
-rw-r--r--Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm1
-rw-r--r--Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp28
4 files changed, 147 insertions, 17 deletions
diff --git a/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp b/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp
index a1f0833..7bbdaa8 100644
--- a/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp
+++ b/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp
@@ -27,8 +27,14 @@
#include "NetscapePluginModule.h"
#include "Module.h"
+#include "NPRuntimeUtilities.h"
#include "NetscapeBrowserFuncs.h"
#include <wtf/PassOwnPtr.h>
+#include <wtf/text/CString.h>
+
+#if !PLUGIN_ARCHITECTURE(MAC) && !PLUGIN_ARCHITECTURE(WIN) && !PLUGIN_ARCHITECTURE(X11)
+#error Unknown plug-in architecture
+#endif
namespace WebKit {
@@ -41,7 +47,7 @@ static Vector<NetscapePluginModule*>& initializedNetscapePluginModules()
NetscapePluginModule::NetscapePluginModule(const String& pluginPath)
: m_pluginPath(pluginPath)
, m_isInitialized(false)
- , m_pluginCount(0)
+ , m_loadCount(0)
, m_shutdownProcPtr(0)
, m_pluginFuncs()
{
@@ -54,23 +60,72 @@ NetscapePluginModule::~NetscapePluginModule()
void NetscapePluginModule::pluginCreated()
{
- if (!m_pluginCount) {
- // Load the plug-in module if necessary.
- load();
- }
-
- m_pluginCount++;
+ incrementLoadCount();
}
void NetscapePluginModule::pluginDestroyed()
{
- ASSERT(m_pluginCount > 0);
- m_pluginCount--;
-
- if (!m_pluginCount) {
- shutdown();
- unload();
+ decrementLoadCount();
+}
+
+Vector<String> NetscapePluginModule::sitesWithData()
+{
+ Vector<String> sites;
+
+ incrementLoadCount();
+ tryGetSitesWithData(sites);
+ decrementLoadCount();
+
+ return sites;
+}
+
+bool NetscapePluginModule::clearSiteData(const String& site, uint64_t flags, uint64_t maxAge)
+{
+ incrementLoadCount();
+ bool result = tryClearSiteData(site, flags, maxAge);
+ decrementLoadCount();
+
+ return result;
+}
+
+bool NetscapePluginModule::tryGetSitesWithData(Vector<String>& sites)
+{
+ if (!m_isInitialized)
+ return false;
+
+ // Check if the plug-in supports NPP_GetSitesWithData.
+ if (!m_pluginFuncs.getsiteswithdata)
+ return false;
+
+ char** siteArray = m_pluginFuncs.getsiteswithdata();
+ for (int i = 0; siteArray[i]; ++i) {
+ char* site = siteArray[i];
+
+ String siteString = String::fromUTF8(site);
+ if (!siteString.isNull())
+ sites.append(siteString);
+
+ npnMemFree(site);
}
+
+ npnMemFree(siteArray);
+ return true;
+}
+
+bool NetscapePluginModule::tryClearSiteData(const String& site, uint64_t flags, uint64_t maxAge)
+{
+ if (!m_isInitialized)
+ return false;
+
+ // Check if the plug-in supports NPP_ClearSiteData.
+ if (!m_pluginFuncs.clearsitedata)
+ return false;
+
+ CString siteString;
+ if (!site.isNull())
+ siteString = site.utf8();
+
+ return m_pluginFuncs.clearsitedata(siteString.data(), flags, maxAge) == NPERR_NO_ERROR;
}
void NetscapePluginModule::shutdown()
@@ -106,6 +161,27 @@ PassRefPtr<NetscapePluginModule> NetscapePluginModule::getOrCreate(const String&
return pluginModule.release();
}
+void NetscapePluginModule::incrementLoadCount()
+{
+ if (!m_loadCount) {
+ // Load the plug-in module if necessary.
+ load();
+ }
+
+ m_loadCount++;
+}
+
+void NetscapePluginModule::decrementLoadCount()
+{
+ ASSERT(m_loadCount > 0);
+ m_loadCount--;
+
+ if (!m_loadCount) {
+ shutdown();
+ unload();
+ }
+}
+
bool NetscapePluginModule::load()
{
if (m_isInitialized) {
@@ -130,6 +206,10 @@ bool NetscapePluginModule::load()
bool NetscapePluginModule::tryLoad()
{
+#if PLUGIN_ARCHITECTURE(X11)
+ applyX11QuirksBeforeLoad();
+#endif
+
m_module = adoptPtr(new Module(m_pluginPath));
if (!m_module->load())
return false;
@@ -138,9 +218,11 @@ bool NetscapePluginModule::tryLoad()
if (!initializeFuncPtr)
return false;
+#if !PLUGIN_ARCHITECTURE(X11)
NP_GetEntryPointsFuncPtr getEntryPointsFuncPtr = m_module->functionPointer<NP_GetEntryPointsFuncPtr>("NP_GetEntryPoints");
if (!getEntryPointsFuncPtr)
return false;
+#endif
m_shutdownProcPtr = m_module->functionPointer<NPP_ShutdownProcPtr>("NP_Shutdown");
if (!m_shutdownProcPtr)
@@ -152,12 +234,15 @@ bool NetscapePluginModule::tryLoad()
// On Mac, NP_Initialize must be called first, then NP_GetEntryPoints. On Windows, the order is
// reversed. Failing to follow this order results in crashes (e.g., in Silverlight on Mac and
// in Flash and QuickTime on Windows).
-#if PLATFORM(MAC)
+#if PLUGIN_ARCHITECTURE(MAC)
if (initializeFuncPtr(netscapeBrowserFuncs()) != NPERR_NO_ERROR || getEntryPointsFuncPtr(&m_pluginFuncs) != NPERR_NO_ERROR)
return false;
-#elif PLATFORM(WIN)
+#elif PLUGIN_ARCHITECTURE(WIN)
if (getEntryPointsFuncPtr(&m_pluginFuncs) != NPERR_NO_ERROR || initializeFuncPtr(netscapeBrowserFuncs()) != NPERR_NO_ERROR)
return false;
+#elif PLUGIN_ARCHITECTURE(X11)
+ if (initializeFuncPtr(netscapeBrowserFuncs(), &m_pluginFuncs) != NPERR_NO_ERROR)
+ return false;
#endif
return true;
diff --git a/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h b/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h
index a245b11..aee26bb 100644
--- a/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h
+++ b/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h
@@ -28,7 +28,7 @@
#include "Module.h"
#include "PluginQuirks.h"
-#include <WebCore/npfunctions.h>
+#include <WebCore/npruntime_internal.h>
#include <wtf/RefCounted.h>
#include <wtf/text/WTFString.h>
@@ -53,11 +53,27 @@ public:
const PluginQuirks& pluginQuirks() const { return m_pluginQuirks; }
+ // Return a list of domains for which the plug-in has data stored.
+ Vector<String> sitesWithData();
+
+ // Request that the plug-in clear the site data.
+ bool clearSiteData(const String& site, uint64_t flags, uint64_t maxAge);
+
private:
explicit NetscapePluginModule(const String& pluginPath);
void determineQuirks();
+#if PLUGIN_ARCHITECTURE(X11)
+ void applyX11QuirksBeforeLoad();
+#endif
+
+ void incrementLoadCount();
+ void decrementLoadCount();
+
+ bool tryGetSitesWithData(Vector<String>&);
+ bool tryClearSiteData(const String& site, uint64_t flags, uint64_t maxAge);
+
bool tryLoad();
bool load();
void unload();
@@ -66,7 +82,7 @@ private:
String m_pluginPath;
bool m_isInitialized;
- unsigned m_pluginCount;
+ unsigned m_loadCount;
PluginQuirks m_pluginQuirks;
diff --git a/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm b/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
index 544def3..accab46 100644
--- a/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
+++ b/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
@@ -333,6 +333,7 @@ void NetscapePluginModule::determineQuirks()
if (plugin.bundleIdentifier == "com.macromedia.Flash Player.plugin") {
// Flash requires that the return value of getprogname() be "WebKitPluginHost".
m_pluginQuirks.add(PluginQuirks::PrognameShouldBeWebKitPluginHost);
+ m_pluginQuirks.add(PluginQuirks::SupportsSnapshotting);
}
}
diff --git a/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp b/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
index a651d3b..b5e3aad 100644
--- a/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
+++ b/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
@@ -29,10 +29,38 @@
#include "PluginDatabase.h"
#include "PluginPackage.h"
+#if PLATFORM(QT)
+#include <QLibrary>
+#endif
+
using namespace WebCore;
namespace WebKit {
+#if PLATFORM(QT)
+static void initializeGTK()
+{
+ QLibrary library("libgtk-x11-2.0.so.0");
+ if (library.load()) {
+ typedef void *(*gtk_init_check_ptr)(int*, char***);
+ gtk_init_check_ptr gtkInitCheck = reinterpret_cast<gtk_init_check_ptr>(library.resolve("gtk_init_check"));
+ // NOTE: We're using gtk_init_check() since gtk_init() calls exit() on failure.
+ if (gtkInitCheck)
+ (void) gtkInitCheck(0, 0);
+ }
+}
+#endif
+
+void NetscapePluginModule::applyX11QuirksBeforeLoad()
+{
+#if PLATFORM(QT)
+ if (m_pluginPath.contains("npwrapper") || m_pluginPath.contains("flashplayer")) {
+ initializeGTK();
+ m_pluginQuirks.add(PluginQuirks::RequiresGTKToolKit);
+ }
+#endif
+}
+
bool NetscapePluginModule::getPluginInfo(const String& pluginPath, PluginInfoStore::Plugin& plugin)
{
// We are loading the plugin here since it does not seem to be a standardized way to