Bug 133605

Summary: [GTK] 8tracks.com triggers annoying pop-up window/installation of "About protocol source plugin" (GStreamer?)
Product: WebKit Reporter: Jiří Janoušek <janousek.jiri>
Component: WebKitGTKAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: agomez, berto, bunhere, calvaris, cdumez, cgarcia, commit-queue, eric.carlson, glenn, gustavo, gyuyoung.kim, jer.noble, menard, mrobinson, philipj, pnormand, sergio, vjaquez
Priority: P3    
Version: 528+ (Nightly build)   
Hardware: PC   
OS: Linux   
URL: http://8tracks.com
Attachments:
Description Flags
GST_DEBUG="webkit*:5" MiniBrowser
none
patch cgarcia: review+

Description Jiří Janoušek 2014-06-07 08:06:29 PDT
Hi,

a few users of my WebKitGtk-based application (Nuvola Player) reported that an annoying pop-up window at 8tracks.com is shown when a new song is played from the playlist. The text varies:

"Required plugin not found - Nuvola Player requires to install plugins to support the following multimedia feature: ABOUT protocol source."

"gnome-packagekit-session requires an additional plugin for this operation. The following plugin is required: ABOUT protocol source. Do you want to search for this now?"

"Invalid commandline. The parameters passed to the application had an invalid format. Please file a bug! The parameters were: gstreamer|1.0|nuvolaplayer|ABOUT protocol source|urisource-about"

The issue affects both WebKitGtk and WebKit2Gtk, for example using WebKit2Gtk 2.4.2 MiniBrowser on Debian Jessie:

- Run /usr/lib/x86_64-linux-gnu/webkit2gtk-3.0/libexec/MiniBrowser --enable-plugins=false http://8tracks.com/ellejolene/if-your-life-were-a-pixar-film
- Click Play button
- Click Skip to next song button
- A popup window is shown

I suspect 8tracks.com does some kind of check for HTML5 audio support and it triggers installation of missing GStreamer plugin. Is it possible to get rid of that pop-up window? 8tracks.com works great with WebKitGtk + GStreamer otherwise, but user experience suffers. Thank you.
Comment 1 Philippe Normand 2014-06-08 23:27:07 PDT
I can't seem to reproduce that issue here... But I see a bunch of these warnings:

CONSOLE ERROR Blocked a frame with origin "https://www.facebook.com" from accessing a frame with origin "http://8tracks.com".  The frame requesting access has a protocol of "https", the frame being accessed has a protocol of "about". Protocols must match.
Comment 2 Jiří Janoušek 2014-06-09 12:39:51 PDT
I don't think these "Blocked a frame with origin" warnings are irrelevant for this issue.

Which version of WebKitGtk and GStreamer have you tested? Maybe the issue has been fixed in the latest/development version. 

- I can reproduce it with WebKitGtk 2.4.2 + GStreamer 1.2.4 (Debian Jessie) and with WebKitGtk 2.4.0 + GStreamer 1.2.3 (Ubuntu 14.04).
- The issue is not reproducible with WebKitGtk 1.10.2 + GStreamer 1.2.0 (Ubuntu 13.10) and on older systems.
- Also, the issue is *not* reproducible when web plugins (Flash) are enabled.

According to xprop, the pop-up window is shown by "session-installer" on Ubuntu, "gstreamer-codec-install" on Debian.
Comment 3 Philippe Normand 2014-06-21 00:46:33 PDT
This very much looks like a duplicate of bug 123158.
Comment 4 Philippe Normand 2014-06-21 00:47:07 PDT
Wrong bug, please ignore previous comment :P
Comment 5 Philippe Normand 2014-06-21 01:10:19 PDT
Well I'm using WebKit trunk and GStreamer git master and it works just fine here :)

One issue though when I press the "Next" button, a GStreamer error is emitted:

0:00:14.370165986 10615      0x2a76590 WARN            uridecodebin gsturidecodebin.c:1416:gen_source_element:<uridecodebin1> error: No URI handler implemented for "about".
0:00:14.374626133 10615 0x7f79bc0e2d90 FIXME                default gstutils.c:3638:gst_pad_create_stream_id_internal:<appsrc1:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:14.400080435 10615      0x2a76590 ERROR      webkitmediaplayer ../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:922:handleMessage: Error 12: No URI handler implemented for "about". (url=about:blank)

But the next song starts playing anyway.

Can you please run MiniBrowser with GST_DEBUG_NO_COLOR=1 and GST_DEBUG=3 and attach the log here?

Please also try with GST_DEBUG="webkit*:5"
Comment 6 Jiří Janoušek 2014-06-22 11:03:54 PDT
Created attachment 233570 [details]
GST_DEBUG="webkit*:5" MiniBrowser
Comment 7 Jiří Janoušek 2014-06-22 11:05:03 PDT
> WARN            uridecodebin gsturidecodebin.c:1416:gen_source_element:<uridecodebin1> error: No URI handler implemented for "about".
> FIXME                default gstutils.c:3638:gst_pad_create_stream_id_internal:<appsrc1:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id

Same as in my case.

> ERROR      webkitmediaplayer 
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:922:handleMessage: Error 12: No URI handler implemented for "about". (url=about:blank)

I cannot see this error on my system, Gst Install Plugin Helper is launched instead [1]. Is the Gst Install Plugin Helper functionality enabled in builds from trunk/git master?

[1] https://developer.gnome.org/gst-plugins-libs/1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html

> But the next song starts playing anyway.

Yes, it does play, but this bug report is about the annoying dialog.

$ GST_DEBUG_NO_COLOR=1 GST_DEBUG=3 /usr/lib/x86_64-linux-gnu/webkit2gtk-3.0/libexec/MiniBrowser --enable-plugins=false http://8tracks.com/ellejolene/if-your-life-were-a-pixar-film
0:00:03.898039105  5337      0x1839990 FIXME                default gstutils.c:3648:gst_pad_create_stream_id_printf_valist:<appsrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:04.298987966  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:04.299040775  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:04.299057501  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:04.299075456  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:04.299089872  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again

<Skip to next button clicked>

0:00:21.806909262  5337 0x7f18f00018d0 WARN            uridecodebin gsturidecodebin.c:1398:gen_source_element:<uridecodebin1> error: No URI handler implemented for "about".
0:00:21.812233330  5337 0x7f18c81071e0 FIXME                default gstutils.c:3648:gst_pad_create_stream_id_printf_valist:<appsrc1:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
invalid commandline '['gstreamer|1.0|WebKitWebProcess|ABOUT protocol source|urisource-about']'
0:00:22.068199089  5337 0x7f18c81071e0 WARN                 qtdemux qtdemux_types.c:196:qtdemux_type_get: unknown QuickTime node type iods
0:00:22.068237503  5337 0x7f18c81071e0 WARN                 qtdemux qtdemux_types.c:196:qtdemux_type_get: unknown QuickTime node type sgpd
0:00:22.068250653  5337 0x7f18c81071e0 WARN                 qtdemux qtdemux_types.c:196:qtdemux_type_get: unknown QuickTime node type sbgp
0:00:22.068288511  5337 0x7f18c81071e0 WARN                 qtdemux qtdemux.c:7977:qtdemux_parse_trak:<qtdemux0> unknown version 00000000
0:00:22.068433734  5337 0x7f18c81071e0 WARN                 qtdemux qtdemux.c:6740:qtdemux_parse_segments:<qtdemux0> streaming; discarding edit list segments
0:00:22.136309263  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:22.136431534  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:22.136477645  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:22.136536062  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:22.136579585  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
0:00:22.158390890  5337 0x7f18f00018d0 FIXME                    bin gstbin.c:4008:gst_bin_query: implement duration caching in GstBin again
Comment 8 Philippe Normand 2014-06-22 12:24:15 PDT
The codec installer is not enabled in developer builds.

Have you contacted the 8tracks webmaster? This clearly looks like a bug in their code, the media elements are not supposed to play about: urls...
Comment 9 Philippe Normand 2014-06-22 12:46:26 PDT
OTOH I think we could also have a black-list for the unsupported protocols within the player, that would prevent the codec installer from kicking in. :)
Comment 10 Jiří Janoušek 2014-06-26 13:08:12 PDT
> Have you contacted the 8tracks webmaster? This clearly looks like a bug in their code, the media elements are not supposed to play about: urls...

I could contact the webmaster. However, the about: url causes troubles only in WebKit2Gtk and webmasters generally don't care about minor web browsers :-( The same issue affects also Jango.com and maybe other websites.

> OTOH I think we could also have a black-list for the unsupported protocols within the player, that would prevent the codec installer from kicking in. :)

About: URLs are generally considered as safe placeholder urls that do nothing, so it would make sense to catch them and don't attempt to play them :-)
Comment 11 Philippe Normand 2014-06-27 02:53:20 PDT
Created attachment 233975 [details]
patch
Comment 12 Sergio Villar Senin 2014-06-27 03:02:18 PDT
Comment on attachment 233975 [details]
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=233975&action=review

> Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:280
> +

Why is the MediaPlayer getting that url? Don't we control which URLs are handled by the MediaPlayer ?
Comment 13 Carlos Garcia Campos 2014-06-27 03:05:05 PDT
Comment on attachment 233975 [details]
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=233975&action=review

> Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:279
>      String cleanUrl(url);
>  
> +    if (kurl.isBlankURL())
> +        return;

That cleanUrl (that should be cleanURL) would be unused in case kurl is blank. Also, even if it was already there, I'm not sure kurl is a good name . . .
Comment 14 Philippe Normand 2014-06-27 03:29:28 PDT
(In reply to comment #12)
> (From update of attachment 233975 [details])
> View in context: https://bugs.webkit.org/attachment.cgi?id=233975&action=review
> 
> > Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:280
> > +
> 
> Why is the MediaPlayer getting that url? Don't we control which URLs are handled by the MediaPlayer ?

The MediaPlayer doesn't filter urls AFAIK.

Since the mac port players don't seem to have this issue I wrote the patch at the GStreamer player level
Comment 15 Philippe Normand 2014-06-27 04:29:17 PDT
Committed r170526: <http://trac.webkit.org/changeset/170526>