WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patach rebased to current git master
wk2-plugin-info2.diff (text/plain), 7.38 KB, created by
Carlos Garcia Campos
on 2011-06-20 06:05:38 PDT
(
hide
)
Description:
Patach rebased to current git master
Filename:
MIME Type:
Creator:
Carlos Garcia Campos
Created:
2011-06-20 06:05:38 PDT
Size:
7.38 KB
patch
obsolete
>diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index a6371ef..9d109b4 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,28 @@ >+2011-06-20 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ [UNIX] Don't use WebCore::PluginPackage to get plugin information >+ https://bugs.webkit.org/show_bug.cgi?id=62899 >+ >+ The problem is that both PluginPackage in WebCore and >+ NetscapePluginModule in webkit2 install their own netscape browser >+ functions and that can cause conflicts in some situations. >+ >+ * Shared/Plugins/Netscape/NetscapePluginModule.h: Add helper >+ function to set plugin mime type descriptions. >+ * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp: >+ (WebKit::NetscapePluginModule::setMIMEDescription): Helper >+ function to set plugin mime type descriptions. >+ (WebKit::NetscapePluginModule::getPluginInfo): Use >+ NetscapePluginModule instead of PluginPackage. >+ * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp: Remove unneeded >+ header include. >+ * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp: >+ (WebKit::NPN_GetValue): Do not try to get the XDisplay if the >+ plugin doesn't have a view. It fixes a crash with flash plugin and >+ matches WebCore. >+ > 2011-06-19 MORITA Hajime <morrita@google.com> > > Unreviewed wincairo build fix. >diff --git a/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h b/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h >index 6626997..ed6f182 100644 >--- a/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h >+++ b/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h >@@ -68,6 +68,7 @@ private: > > #if PLUGIN_ARCHITECTURE(X11) > void applyX11QuirksBeforeLoad(); >+ static void setMIMEDescription(const String& mimeDescription, PluginModuleInfo&); > #endif > > bool tryGetSitesWithData(Vector<String>&); >diff --git a/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp b/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp >index 458e17b..941aade 100644 >--- a/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp >+++ b/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp >@@ -28,8 +28,8 @@ > > #include "NetscapePluginModule.h" > >-#include "PluginDatabase.h" >-#include "PluginPackage.h" >+#include "NetscapeBrowserFuncs.h" >+#include <WebCore/FileSystem.h> > > #if PLATFORM(QT) > #include <QLibrary> >@@ -93,6 +93,33 @@ void NetscapePluginModule::applyX11QuirksBeforeLoad() > #endif > } > >+void NetscapePluginModule::setMIMEDescription(const String& mimeDescription, PluginModuleInfo& plugin) >+{ >+ Vector<String> types; >+ mimeDescription.lower().split(UChar(';'), false, types); >+ plugin.info.mimes.reserveCapacity(types.size()); >+ >+ size_t mimeInfoCount = 0; >+ for (size_t i = 0; i < types.size(); ++i) { >+ Vector<String> mime; >+ types[i].split(UChar(':'), true, mime); >+ if (mime.size() <= 0) >+ continue; >+ >+ plugin.info.mimes.uncheckedAppend(MimeClassInfo()); >+ MimeClassInfo& mimeInfo = plugin.info.mimes[mimeInfoCount++]; >+ mimeInfo.type = mime[0]; >+ >+ Vector<String> extensions; >+ if (mime.size() > 1) { >+ mime[1].split(UChar(','), false, extensions); >+ mimeInfo.extensions = extensions; >+ } >+ if (mime.size() > 2) >+ mimeInfo.desc = mime[2]; >+ } >+} >+ > bool NetscapePluginModule::getPluginInfo(const String& pluginPath, PluginModuleInfo& plugin) > { > // Tempararily suppress stdout in this function as plugins will be loaded and shutdown and debug info >@@ -101,31 +128,33 @@ bool NetscapePluginModule::getPluginInfo(const String& pluginPath, PluginModuleI > > // We are loading the plugin here since it does not seem to be a standardized way to > // get the needed informations from a UNIX plugin without loading it. >- >- RefPtr<PluginPackage> package = PluginPackage::createPackage(pluginPath, 0 /*lastModified*/); >- if (!package) >+ RefPtr<NetscapePluginModule> pluginModule = NetscapePluginModule::getOrCreate(pluginPath); >+ if (!pluginModule) > return false; > > plugin.path = pluginPath; >- plugin.info.desc = package->description(); >- plugin.info.file = package->fileName(); >- >- const MIMEToDescriptionsMap& descriptions = package->mimeToDescriptions(); >- const MIMEToExtensionsMap& extensions = package->mimeToExtensions(); >- MIMEToDescriptionsMap::const_iterator descEnd = descriptions.end(); >- plugin.info.mimes.reserveCapacity(descriptions.size()); >- unsigned i = 0; >- for (MIMEToDescriptionsMap::const_iterator it = descriptions.begin(); it != descEnd; ++it) { >- plugin.info.mimes.uncheckedAppend(MimeClassInfo()); >- MimeClassInfo& mime = plugin.info.mimes[i++]; >- mime.type = it->first; >- mime.desc = it->second; >- MIMEToExtensionsMap::const_iterator extensionIt = extensions.find(it->first); >- ASSERT(extensionIt != extensions.end()); >- mime.extensions = extensionIt->second; >- } >+ plugin.info.file = pathGetFileName(pluginPath); >+ >+ Module* module = pluginModule->module(); >+ NPP_GetValueProcPtr NPP_GetValue = module->functionPointer<NPP_GetValueProcPtr>("NP_GetValue"); >+ if (!NPP_GetValue) >+ return false; >+ >+ NP_GetMIMEDescriptionFuncPtr NP_GetMIMEDescription = module->functionPointer<NP_GetMIMEDescriptionFuncPtr>("NP_GetMIMEDescription"); >+ if (!NP_GetMIMEDescription) >+ return false; >+ >+ char* buffer = 0; >+ NPError err = NPP_GetValue(0, NPPVpluginDescriptionString, &buffer); >+ if (err == NPERR_NO_ERROR) >+ plugin.info.desc = buffer; >+ >+ const char* mimeDescription = NP_GetMIMEDescription(); >+ if (!mimeDescription) >+ return false; >+ >+ setMIMEDescription(mimeDescription, plugin); > >- package->unload(); > return true; > } > >diff --git a/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp b/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp >index 3c54e53..85dc8d8 100644 >--- a/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp >+++ b/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp >@@ -30,7 +30,6 @@ > > #include "NetscapePluginModule.h" > #include "PluginDatabase.h" >-#include "PluginPackage.h" > > using namespace WebCore; > >diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp >index c7e0c2f..1e81fe3 100644 >--- a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp >+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp >@@ -503,7 +503,10 @@ static NPError NPN_GetValue(NPP npp, NPNVariable variable, void *value) > *(NPBool*)value = true; > break; > #elif PLUGIN_ARCHITECTURE(X11) >- case NPNVxDisplay: >+ case NPNVxDisplay: { >+ RefPtr<NetscapePlugin> plugin = NetscapePlugin::fromNPP(npp); >+ if (!plugin) >+ return NPERR_GENERIC_ERROR; > #if PLATFORM(QT) > *reinterpret_cast<Display**>(value) = QX11Info::display(); > break; >@@ -513,6 +516,7 @@ static NPError NPN_GetValue(NPP npp, NPNVariable variable, void *value) > #else > goto default; > #endif >+ } > case NPNVSupportsXEmbedBool: > *static_cast<NPBool*>(value) = true; > break;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
mrobinson
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 62899
:
97633
| 97790