<!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>[170800] releases/WebKitGTK/webkit-2.4/Source/WebCore</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/170800">170800</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2014-07-04 01:55:12 -0700 (Fri, 04 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/170526">r170526</a> - [GTK] 8tracks.com triggers annoying pop-up window/installation of &quot;About protocol source plugin&quot; (GStreamer?)
https://bugs.webkit.org/show_bug.cgi?id=133605

Reviewed by Carlos Garcia Campos.

Don't attempt to load blank URLs with the GStreamer media
player. Those URLs trigger the codec installer which is useless in
this scenario. This patch also renames some of the variables of
the ::load method, as suggested by Carlos.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
Check video-sink validity before disconnecting its signal handlers.
(WebCore::MediaPlayerPrivateGStreamer::load): Don't load blank
URLs (about:blank).
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
(WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
Disconnect repaint handler only if it's valid.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit24SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.4/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit24SourceWebCoreplatformgraphicsgstreamerMediaPlayerPrivateGStreamercpp">releases/WebKitGTK/webkit-2.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit24SourceWebCoreplatformgraphicsgstreamerMediaPlayerPrivateGStreamerBasecpp">releases/WebKitGTK/webkit-2.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit24SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.4/Source/WebCore/ChangeLog (170799 => 170800)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.4/Source/WebCore/ChangeLog        2014-07-04 08:50:56 UTC (rev 170799)
+++ releases/WebKitGTK/webkit-2.4/Source/WebCore/ChangeLog        2014-07-04 08:55:12 UTC (rev 170800)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2014-06-27  Philippe Normand  &lt;pnormand@igalia.com&gt;
+
+        [GTK] 8tracks.com triggers annoying pop-up window/installation of &quot;About protocol source plugin&quot; (GStreamer?)
+        https://bugs.webkit.org/show_bug.cgi?id=133605
+
+        Reviewed by Carlos Garcia Campos.
+
+        Don't attempt to load blank URLs with the GStreamer media
+        player. Those URLs trigger the codec installer which is useless in
+        this scenario. This patch also renames some of the variables of
+        the ::load method, as suggested by Carlos.
+
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
+        Check video-sink validity before disconnecting its signal handlers.
+        (WebCore::MediaPlayerPrivateGStreamer::load): Don't load blank
+        URLs (about:blank).
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
+        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
+        Disconnect repaint handler only if it's valid.
+
</ins><span class="cx"> 2014-06-12  Alberto Garcia  &lt;berto@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] fails to build with --disable-webgl --disable-accelerated-compositing
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit24SourceWebCoreplatformgraphicsgstreamerMediaPlayerPrivateGStreamercpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp (170799 => 170800)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp        2014-07-04 08:50:56 UTC (rev 170799)
+++ releases/WebKitGTK/webkit-2.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp        2014-07-04 08:55:12 UTC (rev 170800)
</span><span class="lines">@@ -322,8 +322,10 @@
</span><span class="cx">         m_playBin.clear();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    GRefPtr&lt;GstPad&gt; videoSinkPad = adoptGRef(gst_element_get_static_pad(m_webkitVideoSink.get(), &quot;sink&quot;));
-    g_signal_handlers_disconnect_by_func(videoSinkPad.get(), reinterpret_cast&lt;gpointer&gt;(mediaPlayerPrivateVideoSinkCapsChangedCallback), this);
</del><ins>+    if (m_webkitVideoSink) {
+        GRefPtr&lt;GstPad&gt; videoSinkPad = adoptGRef(gst_element_get_static_pad(m_webkitVideoSink.get(), &quot;sink&quot;));
+        g_signal_handlers_disconnect_by_func(videoSinkPad.get(), reinterpret_cast&lt;gpointer&gt;(mediaPlayerPrivateVideoSinkCapsChangedCallback), this);
+    }
</ins><span class="cx"> 
</span><span class="cx">     if (m_videoTimerHandler)
</span><span class="cx">         g_source_remove(m_videoTimerHandler);
</span><span class="lines">@@ -338,27 +340,29 @@
</span><span class="cx">         g_source_remove(m_videoCapsTimerHandler);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void MediaPlayerPrivateGStreamer::load(const String&amp; url)
</del><ins>+void MediaPlayerPrivateGStreamer::load(const String&amp; urlString)
</ins><span class="cx"> {
</span><span class="cx">     if (!initializeGStreamerAndRegisterWebKitElements())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    URL kurl(URL(), url);
-    String cleanUrl(url);
</del><ins>+    URL url(URL(), urlString);
+    if (url.isBlankURL())
+        return;
</ins><span class="cx"> 
</span><span class="cx">     // Clean out everything after file:// url path.
</span><del>-    if (kurl.isLocalFile())
-        cleanUrl = cleanUrl.substring(0, kurl.pathEnd());
</del><ins>+    String cleanURL(urlString);
+    if (url.isLocalFile())
+        cleanURL = cleanURL.substring(0, url.pathEnd());
</ins><span class="cx"> 
</span><span class="cx">     if (!m_playBin)
</span><span class="cx">         createGSTPlayBin();
</span><span class="cx"> 
</span><span class="cx">     ASSERT(m_playBin);
</span><span class="cx"> 
</span><del>-    m_url = URL(URL(), cleanUrl);
-    g_object_set(m_playBin.get(), &quot;uri&quot;, cleanUrl.utf8().data(), NULL);
</del><ins>+    m_url = URL(URL(), cleanURL);
+    g_object_set(m_playBin.get(), &quot;uri&quot;, cleanURL.utf8().data(), NULL);
</ins><span class="cx"> 
</span><del>-    INFO_MEDIA_MESSAGE(&quot;Load %s&quot;, cleanUrl.utf8().data());
</del><ins>+    INFO_MEDIA_MESSAGE(&quot;Load %s&quot;, cleanURL.utf8().data());
</ins><span class="cx"> 
</span><span class="cx">     if (m_preload == MediaPlayer::None) {
</span><span class="cx">         LOG_MEDIA_MESSAGE(&quot;Delaying load.&quot;);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit24SourceWebCoreplatformgraphicsgstreamerMediaPlayerPrivateGStreamerBasecpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp (170799 => 170800)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp        2014-07-04 08:50:56 UTC (rev 170799)
+++ releases/WebKitGTK/webkit-2.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp        2014-07-04 08:55:12 UTC (rev 170800)
</span><span class="lines">@@ -120,7 +120,10 @@
</span><span class="cx"> 
</span><span class="cx"> MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase()
</span><span class="cx"> {
</span><del>-    g_signal_handler_disconnect(m_webkitVideoSink.get(), m_repaintHandler);
</del><ins>+    if (m_repaintHandler) {
+        g_signal_handler_disconnect(m_webkitVideoSink.get(), m_repaintHandler);
+        m_repaintHandler = 0;
+    }
</ins><span class="cx"> 
</span><span class="cx"> #if GLIB_CHECK_VERSION(2, 31, 0)
</span><span class="cx">     g_mutex_clear(m_bufferMutex);
</span></span></pre>
</div>
</div>

</body>
</html>