<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[172922] releases/WebKitGTK/webkit-2.4/Source/WebKit2</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/172922">172922</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2014-08-25 06:39:42 -0700 (Mon, 25 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/172919">r172919</a> - [GTK] Should check if a plugin mixes GTK+ symbols earlier
https://bugs.webkit.org/show_bug.cgi?id=136214

Reviewed by Philippe Normand.

We are currently checking if the plugin module and the plugin
process mix GTK symbols after the plugin has been loaded and
initialized. This is too late in many cases, since plugins can use
GTK methods in the NP_Initialize implementation. This is causing
the apps using WebKitGTK+ 2.4 to freeze when the plugin process
scans the plugins and there's a plugin using GTK+3 installed. We
should move the check earlier, once the module is loaded but
before calling NP_Initialize.

* Shared/Plugins/Netscape/NetscapePluginModule.cpp:
(WebKit::moduleMixesGtkSymbols):
(WebKit::NetscapePluginModule::tryLoad):
* WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
(WebKit::NetscapePlugin::platformPostInitialize):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit24SourceWebKit2ChangeLog">releases/WebKitGTK/webkit-2.4/Source/WebKit2/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit24SourceWebKit2SharedPluginsNetscapeNetscapePluginModulecpp">releases/WebKitGTK/webkit-2.4/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit24SourceWebKit2WebProcessPluginsNetscapex11NetscapePluginX11cpp">releases/WebKitGTK/webkit-2.4/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit24SourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.4/Source/WebKit2/ChangeLog (172921 => 172922)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.4/Source/WebKit2/ChangeLog        2014-08-25 13:05:31 UTC (rev 172921)
+++ releases/WebKitGTK/webkit-2.4/Source/WebKit2/ChangeLog        2014-08-25 13:39:42 UTC (rev 172922)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2014-08-25  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [GTK] Should check if a plugin mixes GTK+ symbols earlier
+        https://bugs.webkit.org/show_bug.cgi?id=136214
+
+        Reviewed by Philippe Normand.
+
+        We are currently checking if the plugin module and the plugin
+        process mix GTK symbols after the plugin has been loaded and
+        initialized. This is too late in many cases, since plugins can use
+        GTK methods in the NP_Initialize implementation. This is causing
+        the apps using WebKitGTK+ 2.4 to freeze when the plugin process
+        scans the plugins and there's a plugin using GTK+3 installed. We
+        should move the check earlier, once the module is loaded but
+        before calling NP_Initialize.
+
+        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
+        (WebKit::moduleMixesGtkSymbols):
+        (WebKit::NetscapePluginModule::tryLoad):
+        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
+        (WebKit::NetscapePlugin::platformPostInitialize):
+
</ins><span class="cx"> 2014-08-08  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Do not use GtkWindow:resize-grip-visible with recent GTK+ versions
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit24SourceWebKit2SharedPluginsNetscapeNetscapePluginModulecpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.4/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp (172921 => 172922)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.4/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp        2014-08-25 13:05:31 UTC (rev 172921)
+++ releases/WebKitGTK/webkit-2.4/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp        2014-08-25 13:39:42 UTC (rev 172922)
</span><span class="lines">@@ -197,12 +197,28 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if PLATFORM(GTK)
+static bool moduleMixesGtkSymbols(Module* module)
+{
+#ifdef GTK_API_VERSION_2
+    return module-&gt;functionPointer&lt;gpointer&gt;(&quot;gtk_application_get_type&quot;);
+#else
+    return module-&gt;functionPointer&lt;gpointer&gt;(&quot;gtk_object_get_type&quot;);
+#endif
+}
+#endif
+
</ins><span class="cx"> bool NetscapePluginModule::tryLoad()
</span><span class="cx"> {
</span><span class="cx">     m_module = std::make_unique&lt;Module&gt;(m_pluginPath);
</span><span class="cx">     if (!m_module-&gt;load())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><ins>+#if PLATFORM(GTK)
+    if (moduleMixesGtkSymbols(m_module.get()))
+        return false;
+#endif
+
</ins><span class="cx">     NP_InitializeFuncPtr initializeFuncPtr = m_module-&gt;functionPointer&lt;NP_InitializeFuncPtr&gt;(&quot;NP_Initialize&quot;);
</span><span class="cx">     if (!initializeFuncPtr)
</span><span class="cx">         return false;
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit24SourceWebKit2WebProcessPluginsNetscapex11NetscapePluginX11cpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.4/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp (172921 => 172922)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.4/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp        2014-08-25 13:05:31 UTC (rev 172921)
+++ releases/WebKitGTK/webkit-2.4/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp        2014-08-25 13:39:42 UTC (rev 172922)
</span><span class="lines">@@ -101,17 +101,6 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if PLATFORM(GTK)
-static bool moduleMixesGtkSymbols(Module* module)
-{
-#ifdef GTK_API_VERSION_2
-    return module-&gt;functionPointer&lt;gpointer&gt;(&quot;gtk_application_get_type&quot;);
-#else
-    return module-&gt;functionPointer&lt;gpointer&gt;(&quot;gtk_object_get_type&quot;);
-#endif
-}
-#endif
-
</del><span class="cx"> Display* NetscapePlugin::x11HostDisplay()
</span><span class="cx"> {
</span><span class="cx"> #if PLATFORM(GTK)
</span><span class="lines">@@ -211,11 +200,6 @@
</span><span class="cx"> 
</span><span class="cx"> bool NetscapePlugin::platformPostInitialize()
</span><span class="cx"> {
</span><del>-#if PLATFORM(GTK)
-    if (moduleMixesGtkSymbols(m_pluginModule-&gt;module()))
-        return false;
-#endif
-
</del><span class="cx">     uint64_t windowID = 0;
</span><span class="cx">     bool needsXEmbed = false;
</span><span class="cx">     if (m_isWindowed) {
</span></span></pre>
</div>
</div>

</body>
</html>