Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package webkit2gtk Apparently Google introduced a new sign-in page. This breaks users of webkit2gtk in a rather bad way as it is no longer possible to log in. The most important affected packages are probably epiphany-browser and gnome-online-accounts. The upstream bug report is at https://bugs.webkit.org/show_bug.cgi?id=171770 We already have two downstream bug reports: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=862156 and users reporting this on the user mailing list: https://lists.debian.org/debian-user/2017/05/msg00404.html This was fixed in the new upstream release 2.14.7-1 and it's important we git this fix into stretch. Full debdiff is attached. Regards, Michael unblock webkit2gtk/2.14.7-1 -- System Information: Debian Release: 9.0 APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.9.0-3-amd64 (SMP w/4 CPU cores) Locale: LANG=de_DE.utf8, LC_CTYPE=de_DE.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)
diff -Nru webkit2gtk-2.14.6/debian/changelog webkit2gtk-2.14.7/debian/changelog --- webkit2gtk-2.14.6/debian/changelog 2017-04-07 12:56:45.000000000 +0200 +++ webkit2gtk-2.14.7/debian/changelog 2017-05-09 15:48:39.000000000 +0200 @@ -1,3 +1,11 @@ +webkit2gtk (2.14.7-1) unstable; urgency=medium + + * New upstream release. + * debian/copyright: + + Update copyright years and remove nonexistent files. + + -- Alberto Garcia <be...@igalia.com> Tue, 09 May 2017 16:48:39 +0300 + webkit2gtk (2.14.6-1) unstable; urgency=high * New upstream release. diff -Nru webkit2gtk-2.14.6/debian/copyright webkit2gtk-2.14.7/debian/copyright --- webkit2gtk-2.14.6/debian/copyright 2017-04-07 12:56:45.000000000 +0200 +++ webkit2gtk-2.14.7/debian/copyright 2017-05-09 15:48:39.000000000 +0200 @@ -3,7 +3,7 @@ Source: https://webkitgtk.org/releases/ Files: * -Copyright: © 2002-2016 Apple Inc. and others +Copyright: © 2002-2017 Apple Inc. and others License: BSD-2-clause Comment: The default license of WebKit is BSD 2-clause, available in @@ -22,8 +22,6 @@ Source/JavaScriptCore/bytecode/JumpTable.h Source/JavaScriptCore/bytecode/Opcode.cpp Source/JavaScriptCore/bytecode/Opcode.h - Source/JavaScriptCore/bytecode/SamplingTool.cpp - Source/JavaScriptCore/bytecode/SamplingTool.h Source/JavaScriptCore/bytecode/SpeculatedType.cpp Source/JavaScriptCore/bytecode/SpeculatedType.h Source/JavaScriptCore/bytecode/ValueProfile.h @@ -64,16 +62,10 @@ Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h Source/JavaScriptCore/interpreter/Interpreter.cpp Source/JavaScriptCore/interpreter/Interpreter.h - Source/JavaScriptCore/interpreter/JSStack.cpp - Source/JavaScriptCore/interpreter/JSStack.h Source/JavaScriptCore/interpreter/Register.h Source/JavaScriptCore/jit/CompactJITCodeMap.h Source/JavaScriptCore/parser/SourceCode.h Source/JavaScriptCore/parser/SourceProvider.h - Source/JavaScriptCore/profiler/LegacyProfiler.cpp - Source/JavaScriptCore/profiler/LegacyProfiler.h - Source/JavaScriptCore/profiler/ProfileNode.cpp - Source/JavaScriptCore/profiler/ProfileNode.h Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py Source/JavaScriptCore/runtime/CallData.h Source/JavaScriptCore/runtime/ConstructData.h @@ -86,8 +78,6 @@ Source/JavaScriptCore/runtime/JSGlobalObject.cpp Source/JavaScriptCore/runtime/JSLexicalEnvironment.cpp Source/JavaScriptCore/runtime/JSLexicalEnvironment.h - Source/JavaScriptCore/runtime/JSNotAnObject.cpp - Source/JavaScriptCore/runtime/JSNotAnObject.h Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h Source/JavaScriptCore/runtime/JSSymbolTableObject.cpp @@ -205,7 +195,6 @@ Source/WebCore/bindings/js/JSCallbackData.h Source/WebCore/bindings/js/JSCommandLineAPIHostCustom.cpp Source/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp - Source/WebCore/bindings/js/JSDOMFormDataCustom.cpp Source/WebCore/bindings/js/JSDOMWindowShell.cpp Source/WebCore/bindings/js/JSDOMWindowShell.h Source/WebCore/bindings/js/JSDataTransferCustom.cpp @@ -248,16 +237,12 @@ Source/WebCore/css/CSSGridLineNamesValue.h Source/WebCore/css/CSSGridTemplateAreasValue.cpp Source/WebCore/css/CSSGridTemplateAreasValue.h - Source/WebCore/css/CSSOMUtils.cpp - Source/WebCore/css/CSSOMUtils.h Source/WebCore/css/CSSPropertySourceData.cpp Source/WebCore/css/CSSPropertySourceData.h Source/WebCore/css/CSSSupportsRule.cpp Source/WebCore/css/CSSSupportsRule.h Source/WebCore/css/CSSToLengthConversionData.cpp Source/WebCore/css/CSSToLengthConversionData.h - Source/WebCore/css/DOMWindowCSS.cpp - Source/WebCore/css/DOMWindowCSS.h Source/WebCore/dom/ChildListMutationScope.cpp Source/WebCore/dom/ChildListMutationScope.h Source/WebCore/dom/CurrentScriptIncrementer.h @@ -273,13 +258,10 @@ Source/WebCore/dom/ElementRareData.cpp Source/WebCore/dom/ErrorEvent.cpp Source/WebCore/dom/ErrorEvent.h - Source/WebCore/dom/EventException.h Source/WebCore/dom/ExceptionBase.cpp Source/WebCore/dom/ExceptionBase.h Source/WebCore/dom/ExceptionCodePlaceholder.cpp Source/WebCore/dom/ExceptionCodePlaceholder.h - Source/WebCore/dom/IconURL.h - Source/WebCore/dom/MessagePortChannel.cpp Source/WebCore/dom/MessagePortChannel.h Source/WebCore/dom/MutationCallback.h Source/WebCore/dom/MutationObserver.cpp @@ -320,7 +302,6 @@ Source/WebCore/editing/SmartReplace.cpp Source/WebCore/editing/SmartReplace.h Source/WebCore/editing/SmartReplaceCF.cpp - Source/WebCore/editing/SurroundingText.cpp Source/WebCore/editing/SurroundingText.h Source/WebCore/editing/UndoStep.h Source/WebCore/extract-localizable-strings.pl @@ -451,8 +432,6 @@ Source/WebCore/page/Performance.h Source/WebCore/page/PerformanceEntry.cpp Source/WebCore/page/PerformanceEntry.h - Source/WebCore/page/PerformanceEntryList.cpp - Source/WebCore/page/PerformanceEntryList.h Source/WebCore/page/PerformanceNavigation.cpp Source/WebCore/page/PerformanceNavigation.h Source/WebCore/page/PerformanceResourceTiming.cpp @@ -472,8 +451,6 @@ Source/WebCore/platform/CalculationValue.h Source/WebCore/platform/ColorChooser.h Source/WebCore/platform/ColorChooserClient.h - Source/WebCore/platform/CrossThreadCopier.cpp - Source/WebCore/platform/CrossThreadCopier.h Source/WebCore/platform/DateComponents.cpp Source/WebCore/platform/DateComponents.h Source/WebCore/platform/DateTimeChooser.h @@ -546,14 +523,7 @@ Source/WebCore/platform/network/MIMEHeader.h Source/WebCore/platform/network/ParsedContentType.cpp Source/WebCore/platform/network/ParsedContentType.h - Source/WebCore/platform/network/SocketStreamErrorBase.cpp - Source/WebCore/platform/network/SocketStreamErrorBase.h - Source/WebCore/platform/network/SocketStreamHandleBase.cpp - Source/WebCore/platform/network/SocketStreamHandleBase.h Source/WebCore/platform/network/SocketStreamHandleClient.h - Source/WebCore/platform/network/soup/SocketStreamError.h - Source/WebCore/platform/network/soup/SocketStreamHandle.h - Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp Source/WebCore/platform/posix/FileSystemPOSIX.cpp Source/WebCore/platform/sql/SQLValue.cpp Source/WebCore/platform/sql/SQLValue.h @@ -575,7 +545,6 @@ Source/WebCore/platform/text/TextChecking.h Source/WebCore/platform/text/TextEncodingDetector.h Source/WebCore/platform/text/TextEncodingDetectorICU.cpp - Source/WebCore/platform/text/TextEncodingDetectorNone.cpp Source/WebCore/platform/text/WritingMode.h Source/WebCore/plugins/npruntime.h Source/WebCore/rendering/OrderIterator.cpp @@ -598,11 +567,8 @@ Source/WebCore/rendering/RenderRubyRun.h Source/WebCore/rendering/RenderRubyText.cpp Source/WebCore/rendering/RenderRubyText.h - Source/WebCore/rendering/style/GridCoordinate.h Source/WebCore/rendering/style/GridLength.h Source/WebCore/rendering/style/GridPosition.h - Source/WebCore/rendering/style/GridResolvedPosition.cpp - Source/WebCore/rendering/style/GridResolvedPosition.h Source/WebCore/rendering/style/GridTrackSize.h Source/WebCore/rendering/style/StyleGridItemData.cpp Source/WebCore/rendering/style/StyleGridItemData.h @@ -616,7 +582,6 @@ Source/WebCore/xml/XPathException.h Source/WebCore/xml/XSLTUnicodeSort.cpp Source/WebCore/xml/XSLTUnicodeSort.h - Source/WebKit/scripts/* Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h Source/WebKit2/UIProcess/InspectorServer/HTTPRequest.h @@ -803,7 +768,6 @@ Source/WTF/wtf/ListHashSet.h Source/WTF/wtf/Noncopyable.h Source/WTF/wtf/NumberOfCores.h - Source/WTF/wtf/PassRef.h Source/WTF/wtf/PassRefPtr.h Source/WTF/wtf/RefCounted.h Source/WTF/wtf/RefCountedLeakCounter.cpp @@ -838,7 +802,6 @@ Source/WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp Source/WebCore/bindings/js/JSDOMPluginArrayCustom.cpp Source/WebCore/bindings/js/JSDOMPluginCustom.cpp - Source/WebCore/bindings/js/JSDOMStringListCustom.cpp Source/WebCore/bindings/js/JSDOMWindowBase.cpp Source/WebCore/bindings/js/JSDOMWindowBase.h Source/WebCore/bindings/js/JSDOMWindowCustom.cpp @@ -879,8 +842,6 @@ Source/WebCore/dom/CDATASection.h Source/WebCore/dom/CharacterData.cpp Source/WebCore/dom/CharacterData.h - Source/WebCore/dom/CheckedRadioButtons.cpp - Source/WebCore/dom/CheckedRadioButtons.h Source/WebCore/dom/ChildNodeList.cpp Source/WebCore/dom/ChildNodeList.h Source/WebCore/dom/ClipboardEvent.cpp @@ -908,9 +869,6 @@ Source/WebCore/dom/Element.h Source/WebCore/dom/ElementRareData.h Source/WebCore/dom/ElementTraversal.h - Source/WebCore/dom/Entity.h - Source/WebCore/dom/EntityReference.cpp - Source/WebCore/dom/EntityReference.h Source/WebCore/dom/Event.cpp Source/WebCore/dom/Event.h Source/WebCore/dom/EventDispatcher.cpp @@ -954,7 +912,6 @@ Source/WebCore/dom/QualifiedName.h Source/WebCore/dom/Range.cpp Source/WebCore/dom/Range.h - Source/WebCore/dom/RegisteredEventListener.cpp Source/WebCore/dom/RegisteredEventListener.h Source/WebCore/dom/ScriptElement.cpp Source/WebCore/dom/ScriptElement.h @@ -1050,8 +1007,6 @@ Source/WebCore/platform/graphics/IntSizeHash.h Source/WebCore/platform/graphics/Latin1TextIterator.h Source/WebCore/platform/graphics/PathTraversalState.cpp - Source/WebCore/platform/graphics/SVGGlyph.cpp - Source/WebCore/platform/graphics/SVGGlyph.h Source/WebCore/platform/graphics/StrokeStyleApplier.h Source/WebCore/platform/graphics/SurrogatePairAwareTextIterator.cpp Source/WebCore/platform/graphics/SurrogatePairAwareTextIterator.h @@ -1078,8 +1033,6 @@ Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedSurface.h Source/WebCore/platform/graphics/texmap/coordinated/SurfaceUpdateInfo.h - Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.cpp - Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.h Source/WebCore/platform/graphics/transforms/* Source/WebCore/platform/gtk/* Source/WebCore/platform/image-decoders/ImageDecoder.cpp @@ -1104,12 +1057,7 @@ Source/WebCore/platform/text/ParserUtilities.h Source/WebCore/platform/text/SegmentedString.cpp Source/WebCore/platform/text/SegmentedString.h - Source/WebCore/platform/text/TextBreakIterator.cpp - Source/WebCore/platform/text/TextBreakIterator.h - Source/WebCore/platform/text/TextBreakIteratorInternalICU.h Source/WebCore/platform/text/enchant/* - Source/WebCore/platform/text/gtk/* - Source/WebCore/platform/text/wchar/* Source/WebCore/plugins/DOMMimeType.cpp Source/WebCore/plugins/DOMMimeType.h Source/WebCore/plugins/DOMMimeTypeArray.cpp @@ -1208,8 +1156,6 @@ Files: Source/WebCore/bridge/npruntime_internal.h Source/WebCore/platform/graphics/OpenGLShims.cpp Source/WebCore/platform/graphics/OpenGLShims.h - Source/WebCore/platform/graphics/texmap/coordinated/AreaAllocator.cpp - Source/WebCore/platform/graphics/texmap/coordinated/AreaAllocator.h Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.h Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp @@ -1238,7 +1184,6 @@ Source/WTF/wtf/DateMath.cpp Source/WTF/wtf/DateMath.h Source/WebCore/html/HTMLDocument.cpp - Source/WebCore/platform/gtk/CursorGtk.h Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp Source/WebCore/platform/image-decoders/gif/GIFImageReader.h Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp @@ -1288,7 +1233,7 @@ Files: debian/* Copyright: © 2007-2009 Mike Hommey <gland...@debian.org> © 2009 Gustavo Noronha Silva <k...@debian.org> - © 2014-2016 Alberto Garcia <be...@igalia.com> + © 2014-2017 Alberto Garcia <be...@igalia.com> License: LGPL-2+ License: BSD-2-clause diff -Nru webkit2gtk-2.14.6/Documentation/webkit2gtk-4.0/html/index.html webkit2gtk-2.14.7/Documentation/webkit2gtk-4.0/html/index.html --- webkit2gtk-2.14.6/Documentation/webkit2gtk-4.0/html/index.html 2017-04-06 15:35:56.000000000 +0200 +++ webkit2gtk-2.14.7/Documentation/webkit2gtk-4.0/html/index.html 2017-05-09 12:53:37.000000000 +0200 @@ -14,7 +14,7 @@ <div class="titlepage"> <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">WebKit2GTK+ Reference Manual</p></th></tr></table></div> -<div><p class="releaseinfo">for WebKit2GTK+ 2.14.6</p></div> +<div><p class="releaseinfo">for WebKit2GTK+ 2.14.7</p></div> </div> <hr> </div> diff -Nru webkit2gtk-2.14.6/Documentation/webkit2gtk-4.0/html/webkit2gtk-4.0-WebKitVersion.html webkit2gtk-2.14.7/Documentation/webkit2gtk-4.0/html/webkit2gtk-4.0-WebKitVersion.html --- webkit2gtk-2.14.6/Documentation/webkit2gtk-4.0/html/webkit2gtk-4.0-WebKitVersion.html 2017-04-06 15:35:46.000000000 +0200 +++ webkit2gtk-2.14.7/Documentation/webkit2gtk-4.0/html/webkit2gtk-4.0-WebKitVersion.html 2017-05-09 12:53:27.000000000 +0200 @@ -177,7 +177,7 @@ <hr> <div class="refsect2"> <a name="WEBKIT-MICRO-VERSION:CAPS"></a><h3>WEBKIT_MICRO_VERSION</h3> -<pre class="programlisting">#define WEBKIT_MICRO_VERSION (6) +<pre class="programlisting">#define WEBKIT_MICRO_VERSION (7) </pre> <p>Like <a class="link" href="webkit2gtk-4.0-WebKitVersion.html#webkit-get-micro-version" title="webkit_get_micro_version ()"><code class="function">webkit_get_micro_version()</code></a>, but from the headers used at application compile time, rather than from the library linked diff -Nru webkit2gtk-2.14.6/Documentation/webkitdomgtk-4.0/html/index.html webkit2gtk-2.14.7/Documentation/webkitdomgtk-4.0/html/index.html --- webkit2gtk-2.14.6/Documentation/webkitdomgtk-4.0/html/index.html 2017-04-06 15:35:28.000000000 +0200 +++ webkit2gtk-2.14.7/Documentation/webkitdomgtk-4.0/html/index.html 2017-05-09 12:53:09.000000000 +0200 @@ -14,7 +14,7 @@ <div class="titlepage"> <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">WebKitDOMGTK+ Reference Manual</p></th></tr></table></div> -<div><p class="releaseinfo">for WebKitDOMGTK+ 2.14.6</p></div> +<div><p class="releaseinfo">for WebKitDOMGTK+ 2.14.7</p></div> </div> <hr> </div> diff -Nru webkit2gtk-2.14.6/NEWS webkit2gtk-2.14.7/NEWS --- webkit2gtk-2.14.6/NEWS 2017-04-06 15:16:08.000000000 +0200 +++ webkit2gtk-2.14.7/NEWS 2017-05-09 12:23:58.000000000 +0200 @@ -1,4 +1,13 @@ ================== +WebKitGTK+ 2.14.7 +================== + +What's new in WebKitGTK+ 2.14.7? + + - Update user agent quirks to make Youtube and new Google login page work. + - Fix playing of some live streams. + +================== WebKitGTK+ 2.14.6 ================== diff -Nru webkit2gtk-2.14.6/Source/cmake/OptionsGTK.cmake webkit2gtk-2.14.7/Source/cmake/OptionsGTK.cmake --- webkit2gtk-2.14.6/Source/cmake/OptionsGTK.cmake 2017-04-06 15:07:35.000000000 +0200 +++ webkit2gtk-2.14.7/Source/cmake/OptionsGTK.cmake 2017-05-09 12:22:01.000000000 +0200 @@ -2,7 +2,7 @@ set(PROJECT_VERSION_MAJOR 2) set(PROJECT_VERSION_MINOR 14) -set(PROJECT_VERSION_MICRO 6) +set(PROJECT_VERSION_MICRO 7) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_MICRO}) set(WEBKITGTK_API_VERSION 4.0) @@ -15,8 +15,8 @@ # Libtool library version, not to be confused with API version. # See http://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html -CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(WEBKIT2 51 13 14) -CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(JAVASCRIPTCORE 22 13 4) +CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(WEBKIT2 51 14 14) +CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(JAVASCRIPTCORE 22 14 4) # These are shared variables, but we special case their definition so that we can use the # CMAKE_INSTALL_* variables that are populated by the GNUInstallDirs macro. diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/graphics/GeometryUtilities.cpp webkit2gtk-2.14.7/Source/WebCore/platform/graphics/GeometryUtilities.cpp --- webkit2gtk-2.14.6/Source/WebCore/platform/graphics/GeometryUtilities.cpp 2017-02-07 09:05:08.000000000 +0100 +++ webkit2gtk-2.14.7/Source/WebCore/platform/graphics/GeometryUtilities.cpp 2017-05-09 12:01:40.000000000 +0200 @@ -146,4 +146,18 @@ return destRect; } +bool ellipseContainsPoint(const FloatPoint& center, const FloatSize& radii, const FloatPoint& point) +{ + FloatPoint transformedPoint(point); + transformedPoint.move(-center.x(), -center.y()); + transformedPoint.scale(radii.height(), radii.width()); + float radius = radii.width() * radii.height(); + + if (transformedPoint.x() > radius || transformedPoint.y() > radius) + return false; + if (transformedPoint.x() + transformedPoint.y() <= radius) + return true; + return (transformedPoint.lengthSquared() <= radius * radius); +} + } diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/graphics/GeometryUtilities.h webkit2gtk-2.14.7/Source/WebCore/platform/graphics/GeometryUtilities.h --- webkit2gtk-2.14.6/Source/WebCore/platform/graphics/GeometryUtilities.h 2017-02-07 09:05:08.000000000 +0100 +++ webkit2gtk-2.14.7/Source/WebCore/platform/graphics/GeometryUtilities.h 2017-05-09 12:01:40.000000000 +0200 @@ -23,8 +23,7 @@ * THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef GeometryUtilities_h -#define GeometryUtilities_h +#pragma once #include "FloatRect.h" #include "IntRect.h" @@ -51,6 +50,5 @@ // Compute a rect that encloses all points covered by the given rect if it were rotated a full turn around (0,0). FloatRect boundsOfRotatingRect(const FloatRect&); +bool ellipseContainsPoint(const FloatPoint& center, const FloatSize& radii, const FloatPoint&); } - -#endif // GeometryUtilities_h diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp webkit2gtk-2.14.7/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp --- webkit2gtk-2.14.6/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 2017-04-06 14:40:14.000000000 +0200 +++ webkit2gtk-2.14.7/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 2017-05-09 11:59:35.000000000 +0200 @@ -901,9 +901,7 @@ GST_DEBUG("Message %s received from element %s", GST_MESSAGE_TYPE_NAME(message), GST_MESSAGE_SRC_NAME(message)); switch (GST_MESSAGE_TYPE(message)) { case GST_MESSAGE_ERROR: - if (m_resetPipeline) - break; - if (m_missingPluginsCallback) + if (m_resetPipeline || m_missingPluginsCallback || m_errorOccured) break; gst_message_parse_error(message, &err.outPtr(), &debug.outPtr()); GST_ERROR("Error %d: %s (url=%s)", err->code, err->message, m_url.string().utf8().data()); @@ -911,20 +909,19 @@ GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_pipeline.get()), GST_DEBUG_GRAPH_SHOW_ALL, "webkit-video.error"); error = MediaPlayer::Empty; - if (err->code == GST_STREAM_ERROR_CODEC_NOT_FOUND - || err->code == GST_STREAM_ERROR_WRONG_TYPE - || err->code == GST_STREAM_ERROR_FAILED - || err->code == GST_CORE_ERROR_MISSING_PLUGIN - || err->code == GST_RESOURCE_ERROR_NOT_FOUND) + if (g_error_matches(err.get(), GST_STREAM_ERROR, GST_STREAM_ERROR_CODEC_NOT_FOUND) + || g_error_matches(err.get(), GST_STREAM_ERROR, GST_STREAM_ERROR_WRONG_TYPE) + || g_error_matches(err.get(), GST_STREAM_ERROR, GST_STREAM_ERROR_FAILED) + || g_error_matches(err.get(), GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN) + || g_error_matches(err.get(), GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_NOT_FOUND)) error = MediaPlayer::FormatError; - else if (err->domain == GST_STREAM_ERROR) { + else if (g_error_matches(err.get(), GST_STREAM_ERROR, GST_STREAM_ERROR_TYPE_NOT_FOUND)) { // Let the mediaPlayerClient handle the stream error, in // this case the HTMLMediaElement will emit a stalled // event. - if (err->code == GST_STREAM_ERROR_TYPE_NOT_FOUND) { - GST_ERROR("Decode error, let the Media element emit a stalled event."); - break; - } + GST_ERROR("Decode error, let the Media element emit a stalled event."); + break; + } else if (err->domain == GST_STREAM_ERROR) { error = MediaPlayer::DecodeError; attemptNextLocation = true; } else if (err->domain == GST_RESOURCE_ERROR) @@ -1380,6 +1377,23 @@ #endif } +bool MediaPlayerPrivateGStreamer::hasSingleSecurityOrigin() const +{ + if (!WEBKIT_IS_WEB_SRC(m_source.get())) + return false; + + GUniqueOutPtr<char> originalURI, resolvedURI; + g_object_get(m_source.get(), "location", &originalURI.outPtr(), "resolved-location", &resolvedURI.outPtr(), nullptr); + if (!originalURI || !resolvedURI) + return false; + if (!g_strcmp0(originalURI.get(), resolvedURI.get())) + return true; + + Ref<SecurityOrigin> resolvedOrigin(SecurityOrigin::createFromString(String::fromUTF8(resolvedURI.get()))); + Ref<SecurityOrigin> requestedOrigin(SecurityOrigin::createFromString(String::fromUTF8(originalURI.get()))); + return resolvedOrigin->isSameSchemeHostPort(&requestedOrigin.get()); +} + void MediaPlayerPrivateGStreamer::cancelLoad() { if (m_networkState < MediaPlayer::Loading || m_networkState == MediaPlayer::Loaded) diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h webkit2gtk-2.14.7/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h --- webkit2gtk-2.14.6/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 2017-04-06 14:33:43.000000000 +0200 +++ webkit2gtk-2.14.7/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 2017-05-09 11:48:38.000000000 +0200 @@ -108,6 +108,8 @@ unsigned long long totalBytes() const override; float maxTimeLoaded() const override; + bool hasSingleSecurityOrigin() const override; + void loadStateChanged(); void timeChanged(); void didEnd(); diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp webkit2gtk-2.14.7/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp --- webkit2gtk-2.14.6/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp 2017-02-07 10:39:33.000000000 +0100 +++ webkit2gtk-2.14.7/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp 2017-05-09 11:56:14.000000000 +0200 @@ -49,68 +49,76 @@ using namespace WebCore; class StreamingClient { - public: - StreamingClient(WebKitWebSrc*); - virtual ~StreamingClient(); - - protected: - char* createReadBuffer(size_t requestedSize, size_t& actualSize); - void handleResponseReceived(const ResourceResponse&); - void handleDataReceived(const char*, int); - void handleNotifyFinished(); +public: + StreamingClient(WebKitWebSrc*, ResourceRequest&&); + virtual ~StreamingClient(); + +protected: + char* createReadBuffer(size_t requestedSize, size_t& actualSize); + void handleResponseReceived(const ResourceResponse&); + void handleDataReceived(const char*, int); + void handleNotifyFinished(); - GstElement* m_src; + GRefPtr<GstElement> m_src; + ResourceRequest m_request; }; class CachedResourceStreamingClient final : public PlatformMediaResourceClient, public StreamingClient { WTF_MAKE_NONCOPYABLE(CachedResourceStreamingClient); - public: - CachedResourceStreamingClient(WebKitWebSrc*); - virtual ~CachedResourceStreamingClient(); +public: + CachedResourceStreamingClient(WebKitWebSrc*, ResourceRequest&&); + virtual ~CachedResourceStreamingClient(); - private: - // PlatformMediaResourceClient virtual methods. +private: + // PlatformMediaResourceClient virtual methods. #if USE(SOUP) - char* getOrCreateReadBuffer(PlatformMediaResource&, size_t requestedSize, size_t& actualSize) override; + char* getOrCreateReadBuffer(PlatformMediaResource&, size_t requestedSize, size_t& actualSize) override; #endif - void responseReceived(PlatformMediaResource&, const ResourceResponse&) override; - void dataReceived(PlatformMediaResource&, const char*, int) override; - void accessControlCheckFailed(PlatformMediaResource&, const ResourceError&) override; - void loadFailed(PlatformMediaResource&, const ResourceError&) override; - void loadFinished(PlatformMediaResource&) override; + void responseReceived(PlatformMediaResource&, const ResourceResponse&) override; + void dataReceived(PlatformMediaResource&, const char*, int) override; + void accessControlCheckFailed(PlatformMediaResource&, const ResourceError&) override; + void loadFailed(PlatformMediaResource&, const ResourceError&) override; + void loadFinished(PlatformMediaResource&) override; }; -class ResourceHandleStreamingClient : public ResourceHandleClient, public StreamingClient { - WTF_MAKE_NONCOPYABLE(ResourceHandleStreamingClient); WTF_MAKE_FAST_ALLOCATED; - public: - ResourceHandleStreamingClient(WebKitWebSrc*, ResourceRequest&&); - virtual ~ResourceHandleStreamingClient(); - - // StreamingClient virtual methods. - bool loadFailed() const; - void setDefersLoading(bool); +class ResourceHandleStreamingClient : public ThreadSafeRefCounted<ResourceHandleStreamingClient>, public ResourceHandleClient, public StreamingClient { +public: + static Ref<ResourceHandleStreamingClient> create(WebKitWebSrc* src, ResourceRequest&& request) + { + return adoptRef(*new ResourceHandleStreamingClient(src, WTFMove(request))); + } + virtual ~ResourceHandleStreamingClient(); + + void invalidate(); + + // StreamingClient virtual methods. + bool loadFailed() const; + void setDefersLoading(bool); + +private: + ResourceHandleStreamingClient(WebKitWebSrc*, ResourceRequest&&); + void cleanupAndStopRunLoop(); - private: - // ResourceHandleClient virtual methods. + // ResourceHandleClient virtual methods. #if USE(SOUP) - char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize) override; + char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize) override; #endif - ResourceRequest willSendRequest(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) override; - void didReceiveResponse(ResourceHandle*, ResourceResponse&&) override; - void didReceiveData(ResourceHandle*, const char*, unsigned, int) override; - void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, int encodedLength) override; - void didFinishLoading(ResourceHandle*, double /*finishTime*/) override; - void didFail(ResourceHandle*, const ResourceError&) override; - void wasBlocked(ResourceHandle*) override; - void cannotShowURL(ResourceHandle*) override; - - ThreadIdentifier m_thread { 0 }; - Lock m_initializeRunLoopConditionMutex; - Condition m_initializeRunLoopCondition; - RunLoop* m_runLoop { nullptr }; - Lock m_terminateRunLoopConditionMutex; - Condition m_terminateRunLoopCondition; - RefPtr<ResourceHandle> m_resource; + ResourceRequest willSendRequest(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) override; + void didReceiveResponse(ResourceHandle*, ResourceResponse&&) override; + void didReceiveData(ResourceHandle*, const char*, unsigned, int) override; + void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, int encodedLength) override; + void didFinishLoading(ResourceHandle*, double) override; + void didFail(ResourceHandle*, const ResourceError&) override; + void wasBlocked(ResourceHandle*) override; + void cannotShowURL(ResourceHandle*) override; + + ThreadIdentifier m_thread { 0 }; + Lock m_initializeRunLoopConditionMutex; + Condition m_initializeRunLoopCondition; + RunLoop* m_runLoop { nullptr }; + Lock m_terminateRunLoopConditionMutex; + Condition m_terminateRunLoopCondition; + RefPtr<ResourceHandle> m_resource; }; enum MainThreadSourceNotification { @@ -125,7 +133,8 @@ struct _WebKitWebSrcPrivate { GstAppSrc* appsrc; GstPad* srcpad; - gchar* uri; + CString originalURI; + CString redirectedURI; bool keepAlive; GUniquePtr<GstStructure> extraHeaders; bool compress; @@ -135,7 +144,7 @@ RefPtr<PlatformMediaResourceLoader> loader; RefPtr<PlatformMediaResource> resource; - std::unique_ptr<ResourceHandleStreamingClient> client; + RefPtr<ResourceHandleStreamingClient> client; bool didPassAccessControlCheck; @@ -155,6 +164,7 @@ enum { PROP_0, PROP_LOCATION, + PROP_RESOLVED_LOCATION, PROP_KEEP_ALIVE, PROP_EXTRA_HEADERS, PROP_COMPRESS, @@ -223,13 +233,13 @@ /* Allows setting the uri using the 'location' property, which is used * for example by gst_element_make_from_uri() */ - g_object_class_install_property(oklass, - PROP_LOCATION, - g_param_spec_string("location", - "location", - "Location to read from", - 0, - (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + g_object_class_install_property(oklass, PROP_LOCATION, + g_param_spec_string("location", "location", "Location to read from", + nullptr, static_cast<GParamFlags>(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + + g_object_class_install_property(oklass, PROP_RESOLVED_LOCATION, + g_param_spec_string("resolved-location", "Resolved location", "The location resolved by the server", + nullptr, static_cast<GParamFlags>(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property(oklass, PROP_KEEP_ALIVE, g_param_spec_boolean("keep-alive", "keep-alive", "Use HTTP persistent connections", @@ -301,6 +311,8 @@ // This might need tweaking for ports not using libsoup. g_object_set(priv->appsrc, "min-percent", 20, NULL); + gst_base_src_set_automatic_eos(GST_BASE_SRC(priv->appsrc), FALSE); + gst_app_src_set_caps(priv->appsrc, 0); gst_app_src_set_size(priv->appsrc, -1); } @@ -317,10 +329,8 @@ static void webKitWebSrcFinalize(GObject* object) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(object); - WebKitWebSrcPrivate* priv = src->priv; + WebKitWebSrcPrivate* priv = WEBKIT_WEB_SRC(object)->priv; - g_free(priv->uri); priv->~WebKitWebSrcPrivate(); GST_CALL_PARENT(G_OBJECT_CLASS, finalize, (object)); @@ -362,7 +372,10 @@ WTF::GMutexLocker<GMutex> locker(*GST_OBJECT_GET_LOCK(src)); switch (propID) { case PROP_LOCATION: - g_value_set_string(value, priv->uri); + g_value_set_string(value, priv->originalURI.data()); + break; + case PROP_RESOLVED_LOCATION: + g_value_set_string(value, priv->redirectedURI.isNull() ? priv->originalURI.data() : priv->redirectedURI.data()); break; case PROP_KEEP_ALIVE: g_value_set_boolean(value, priv->keepAlive); @@ -404,12 +417,15 @@ }); } + if (priv->client) { + priv->client->invalidate(); + priv->client = nullptr; + } + WTF::GMutexLocker<GMutex> locker(*GST_OBJECT_GET_LOCK(src)); bool wasSeeking = std::exchange(priv->isSeeking, false); - priv->client = nullptr; - if (priv->buffer) { unmapGstBuffer(priv->buffer.get()); priv->buffer.clear(); @@ -496,7 +512,7 @@ priv->didPassAccessControlCheck = false; - if (!priv->uri) { + if (priv->originalURI.isNull()) { GST_ERROR_OBJECT(src, "No URI provided"); locker.unlock(); webKitWebSrcStop(src); @@ -505,8 +521,8 @@ ASSERT(!priv->client); - GST_DEBUG_OBJECT(src, "Fetching %s", priv->uri); - URL url = URL(URL(), priv->uri); + GST_DEBUG_OBJECT(src, "Fetching %s", priv->originalURI.data()); + URL url = URL(URL(), priv->originalURI.data()); ResourceRequest request(url); request.setAllowCookies(true); @@ -557,10 +573,9 @@ request.setHTTPHeaderField(HTTPHeaderName::IcyMetadata, "1"); if (!priv->player || !priv->createdInMainThread) { - priv->client = std::make_unique<ResourceHandleStreamingClient>(src, WTFMove(request)); + priv->client = ResourceHandleStreamingClient::create(src, WTFMove(request)); if (priv->client->loadFailed()) { GST_ERROR_OBJECT(src, "Failed to setup streaming client"); - priv->client = nullptr; locker.unlock(); webKitWebSrcStop(src); } else @@ -582,7 +597,7 @@ loadOptions |= PlatformMediaResourceLoader::LoadOption::BufferData; priv->resource = priv->loader->requestResource(request, loadOptions); if (priv->resource) { - priv->resource->setClient(std::make_unique<CachedResourceStreamingClient>(protector.get())); + priv->resource->setClient(std::make_unique<CachedResourceStreamingClient>(protector.get(), ResourceRequest(request))); GST_DEBUG_OBJECT(protector.get(), "Started request"); } else { GST_ERROR_OBJECT(protector.get(), "Failed to setup streaming client"); @@ -659,7 +674,9 @@ } case GST_QUERY_URI: { WTF::GMutexLocker<GMutex> locker(*GST_OBJECT_GET_LOCK(src)); - gst_query_set_uri(query, src->priv->uri); + gst_query_set_uri(query, src->priv->originalURI.data()); + if (!src->priv->redirectedURI.isNull()) + gst_query_set_uri_redirection(query, src->priv->redirectedURI.data()); result = TRUE; break; } @@ -711,7 +728,7 @@ gchar* ret; WTF::GMutexLocker<GMutex> locker(*GST_OBJECT_GET_LOCK(src)); - ret = g_strdup(src->priv->uri); + ret = g_strdup(src->priv->originalURI.data()); return ret; } @@ -727,9 +744,8 @@ WTF::GMutexLocker<GMutex> locker(*GST_OBJECT_GET_LOCK(src)); - g_free(priv->uri); - priv->uri = 0; - + priv->redirectedURI = CString(); + priv->originalURI = CString(); if (!uri) return TRUE; @@ -739,7 +755,7 @@ return FALSE; } - priv->uri = g_strdup(url.string().utf8().data()); + priv->originalURI = url.string().utf8(); return TRUE; } @@ -847,19 +863,19 @@ return src->priv->didPassAccessControlCheck; } -StreamingClient::StreamingClient(WebKitWebSrc* src) - : m_src(static_cast<GstElement*>(gst_object_ref(src))) +StreamingClient::StreamingClient(WebKitWebSrc* src, ResourceRequest&& request) + : m_src(GST_ELEMENT(src)) + , m_request(WTFMove(request)) { } StreamingClient::~StreamingClient() { - gst_object_unref(m_src); } char* StreamingClient::createReadBuffer(size_t requestedSize, size_t& actualSize) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); WebKitWebSrcPrivate* priv = src->priv; ASSERT(!priv->buffer); @@ -878,11 +894,15 @@ void StreamingClient::handleResponseReceived(const ResourceResponse& response) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); WebKitWebSrcPrivate* priv = src->priv; GST_DEBUG_OBJECT(src, "Received response: %d", response.httpStatusCode()); + auto responseURI = response.url().string().utf8(); + if (priv->originalURI != responseURI) + priv->redirectedURI = WTFMove(responseURI); + if (response.httpStatusCode() >= 400) { GST_ELEMENT_ERROR(src, RESOURCE, READ, ("Received %d HTTP error code", response.httpStatusCode()), (nullptr)); gst_app_src_end_of_stream(priv->appsrc); @@ -928,11 +948,26 @@ gst_app_src_set_size(priv->appsrc, -1); gst_app_src_set_caps(priv->appsrc, 0); + + // Emit a GST_EVENT_CUSTOM_DOWNSTREAM_STICKY event to let GStreamer know about the HTTP headers sent and received. + GstStructure* httpHeaders = gst_structure_new_empty("http-headers"); + gst_structure_set(httpHeaders, "uri", G_TYPE_STRING, priv->originalURI.data(), nullptr); + if (!priv->redirectedURI.isNull()) + gst_structure_set(httpHeaders, "redirection-uri", G_TYPE_STRING, priv->redirectedURI.data(), nullptr); + GUniquePtr<GstStructure> headers(gst_structure_new_empty("request-headers")); + for (const auto& header : m_request.httpHeaderFields()) + gst_structure_set(headers.get(), header.key.utf8().data(), G_TYPE_STRING, header.value.utf8().data(), nullptr); + gst_structure_set(httpHeaders, "request-headers", GST_TYPE_STRUCTURE, headers.get(), nullptr); + headers.reset(gst_structure_new_empty("response-headers")); + for (const auto& header : response.httpHeaderFields()) + gst_structure_set(headers.get(), header.key.utf8().data(), G_TYPE_STRING, header.value.utf8().data(), nullptr); + gst_structure_set(httpHeaders, "response-headers", GST_TYPE_STRUCTURE, headers.get(), nullptr); + gst_pad_push_event(GST_BASE_SRC_PAD(priv->appsrc), gst_event_new_custom(GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, httpHeaders)); } void StreamingClient::handleDataReceived(const char* data, int length) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); WebKitWebSrcPrivate* priv = src->priv; WTF::GMutexLocker<GMutex> locker(*GST_OBJECT_GET_LOCK(src)); @@ -999,7 +1034,7 @@ void StreamingClient::handleNotifyFinished() { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); WebKitWebSrcPrivate* priv = src->priv; GST_DEBUG_OBJECT(src, "Have EOS"); @@ -1011,8 +1046,8 @@ } } -CachedResourceStreamingClient::CachedResourceStreamingClient(WebKitWebSrc* src) - : StreamingClient(src) +CachedResourceStreamingClient::CachedResourceStreamingClient(WebKitWebSrc* src, ResourceRequest&& request) + : StreamingClient(src, WTFMove(request)) { } @@ -1029,7 +1064,7 @@ void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, const ResourceResponse& response) { - WebKitWebSrcPrivate* priv = WEBKIT_WEB_SRC(m_src)->priv; + WebKitWebSrcPrivate* priv = WEBKIT_WEB_SRC(m_src.get())->priv; priv->didPassAccessControlCheck = priv->resource->didPassAccessControlCheck(); handleResponseReceived(response); } @@ -1041,7 +1076,7 @@ void CachedResourceStreamingClient::accessControlCheckFailed(PlatformMediaResource&, const ResourceError& error) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); GST_ELEMENT_ERROR(src, RESOURCE, READ, ("%s", error.localizedDescription().utf8().data()), (nullptr)); gst_app_src_end_of_stream(src->priv->appsrc); webKitWebSrcStop(src); @@ -1049,7 +1084,7 @@ void CachedResourceStreamingClient::loadFailed(PlatformMediaResource&, const ResourceError& error) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); if (!error.isCancellation()) { GST_ERROR_OBJECT(src, "Have failure: %s", error.localizedDescription().utf8().data()); @@ -1065,14 +1100,14 @@ } ResourceHandleStreamingClient::ResourceHandleStreamingClient(WebKitWebSrc* src, ResourceRequest&& request) - : StreamingClient(src) + : StreamingClient(src, WTFMove(request)) { LockHolder locker(m_initializeRunLoopConditionMutex); - m_thread = createThread("ResourceHandleStreamingClient", [this, request = WTFMove(request)] { + m_thread = createThread("ResourceHandleStreamingClient", [this] { { LockHolder locker(m_initializeRunLoopConditionMutex); m_runLoop = &RunLoop::current(); - m_resource = ResourceHandle::create(nullptr /*context*/, request, this, true, false); + m_resource = ResourceHandle::create(nullptr /*context*/, m_request, this, true, false); m_initializeRunLoopCondition.notifyOne(); } if (!m_resource) @@ -1080,14 +1115,6 @@ m_runLoop->dispatch([this] { m_resource->setDefersLoading(false); }); m_runLoop->run(); - { - LockHolder locker(m_terminateRunLoopConditionMutex); - m_runLoop = nullptr; - m_resource->clearClient(); - m_resource->cancel(); - m_resource = nullptr; - m_terminateRunLoopCondition.notifyOne(); - } }); m_initializeRunLoopCondition.wait(m_initializeRunLoopConditionMutex); } @@ -1098,14 +1125,30 @@ detachThread(m_thread); m_thread = 0; } +} - if (m_runLoop == &RunLoop::current()) - m_runLoop->stop(); - else { - LockHolder locker(m_terminateRunLoopConditionMutex); - m_runLoop->stop(); - m_terminateRunLoopCondition.wait(m_terminateRunLoopConditionMutex); +void ResourceHandleStreamingClient::cleanupAndStopRunLoop() +{ + m_resource->clearClient(); + m_resource->cancel(); + m_resource = nullptr; + m_runLoop->stop(); +} + +void ResourceHandleStreamingClient::invalidate() +{ + if (m_runLoop == &RunLoop::current()) { + cleanupAndStopRunLoop(); + return; } + + LockHolder locker(m_terminateRunLoopConditionMutex); + m_runLoop->dispatch([this, protectedThis = makeRef(*this)] { + cleanupAndStopRunLoop(); + LockHolder locker(m_terminateRunLoopConditionMutex); + m_terminateRunLoopCondition.notifyOne(); + }); + m_terminateRunLoopCondition.wait(m_terminateRunLoopConditionMutex); } bool ResourceHandleStreamingClient::loadFailed() const @@ -1115,7 +1158,7 @@ void ResourceHandleStreamingClient::setDefersLoading(bool defers) { - m_runLoop->dispatch([this, defers] { + m_runLoop->dispatch([this, protectedThis = makeRef(*this), defers] { if (m_resource) m_resource->setDefersLoading(defers); }); @@ -1135,7 +1178,8 @@ void ResourceHandleStreamingClient::didReceiveResponse(ResourceHandle*, ResourceResponse&& response) { - handleResponseReceived(response); + if (m_resource) + handleResponseReceived(response); } void ResourceHandleStreamingClient::didReceiveData(ResourceHandle*, const char* /* data */, unsigned /* length */, int) @@ -1145,6 +1189,9 @@ void ResourceHandleStreamingClient::didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&& buffer, int /* encodedLength */) { + if (!m_resource) + return; + // This pattern is suggested by SharedBuffer.h. const char* segment; unsigned position = 0; @@ -1156,12 +1203,13 @@ void ResourceHandleStreamingClient::didFinishLoading(ResourceHandle*, double) { - handleNotifyFinished(); + if (m_resource) + handleNotifyFinished(); } void ResourceHandleStreamingClient::didFail(ResourceHandle*, const ResourceError& error) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); GST_ERROR_OBJECT(src, "Have failure: %s", error.localizedDescription().utf8().data()); GST_ELEMENT_ERROR(src, RESOURCE, FAILED, ("%s", error.localizedDescription().utf8().data()), (0)); @@ -1170,13 +1218,13 @@ void ResourceHandleStreamingClient::wasBlocked(ResourceHandle*) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); GUniquePtr<gchar> uri; GST_ERROR_OBJECT(src, "Request was blocked"); WTF::GMutexLocker<GMutex> locker(*GST_OBJECT_GET_LOCK(src)); - uri.reset(g_strdup(src->priv->uri)); + uri.reset(g_strdup(src->priv->originalURI.data())); locker.unlock(); GST_ELEMENT_ERROR(src, RESOURCE, OPEN_READ, ("Access to \"%s\" was blocked", uri.get()), (0)); @@ -1184,13 +1232,13 @@ void ResourceHandleStreamingClient::cannotShowURL(ResourceHandle*) { - WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src); + WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); GUniquePtr<gchar> uri; GST_ERROR_OBJECT(src, "Cannot show URL"); WTF::GMutexLocker<GMutex> locker(*GST_OBJECT_GET_LOCK(src)); - uri.reset(g_strdup(src->priv->uri)); + uri.reset(g_strdup(src->priv->originalURI.data())); locker.unlock(); GST_ELEMENT_ERROR(src, RESOURCE, OPEN_READ, ("Can't show \"%s\"", uri.get()), (0)); diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/graphics/RoundedRect.cpp webkit2gtk-2.14.7/Source/WebCore/platform/graphics/RoundedRect.cpp --- webkit2gtk-2.14.6/Source/WebCore/platform/graphics/RoundedRect.cpp 2017-02-07 09:05:08.000000000 +0100 +++ webkit2gtk-2.14.7/Source/WebCore/platform/graphics/RoundedRect.cpp 2017-05-09 12:01:40.000000000 +0200 @@ -29,6 +29,7 @@ #include "RoundedRect.h" #include "FloatRoundedRect.h" +#include "GeometryUtilities.h" #include "LayoutRect.h" #include "LayoutUnit.h" @@ -232,6 +233,50 @@ return false; } } + + return true; +} + +bool RoundedRect::contains(const LayoutRect& otherRect) const +{ + if (!rect().contains(otherRect)) + return false; + + const LayoutSize& topLeft = m_radii.topLeft(); + if (!topLeft.isEmpty()) { + FloatPoint center = { m_rect.x() + topLeft.width(), m_rect.y() + topLeft.height() }; + if (otherRect.x() <= center.x() && otherRect.y() <= center.y()) { + if (!ellipseContainsPoint(center, topLeft, otherRect.location())) + return false; + } + } + + const LayoutSize& topRight = m_radii.topRight(); + if (!topRight.isEmpty()) { + FloatPoint center = { m_rect.maxX() - topRight.width(), m_rect.y() + topRight.height() }; + if (otherRect.maxX() >= center.x() && otherRect.y() <= center.y()) { + if (!ellipseContainsPoint(center, topRight, otherRect.location())) + return false; + } + } + + const LayoutSize& bottomLeft = m_radii.bottomLeft(); + if (!bottomLeft.isEmpty()) { + FloatPoint center = { m_rect.x() + bottomLeft.width(), m_rect.maxY() - bottomLeft.height() }; + if (otherRect.maxX() >= center.x() && otherRect.maxY() >= center.y()) { + if (!ellipseContainsPoint(center, bottomLeft, otherRect.location())) + return false; + } + } + + const LayoutSize& bottomRight = m_radii.bottomRight(); + if (!bottomRight.isEmpty()) { + FloatPoint center = { m_rect.maxX() - bottomRight.width(), m_rect.maxY() - bottomRight.height() }; + if (otherRect.x() <= center.x() && otherRect.maxY() >= center.y()) { + if (!ellipseContainsPoint(center, bottomRight, otherRect.location())) + return false; + } + } return true; } diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/graphics/RoundedRect.h webkit2gtk-2.14.7/Source/WebCore/platform/graphics/RoundedRect.h --- webkit2gtk-2.14.6/Source/WebCore/platform/graphics/RoundedRect.h 2017-02-07 09:05:08.000000000 +0100 +++ webkit2gtk-2.14.7/Source/WebCore/platform/graphics/RoundedRect.h 2017-05-09 12:01:40.000000000 +0200 @@ -106,6 +106,7 @@ // Tests whether the quad intersects any part of this rounded rectangle. // This only works for convex quads. bool intersectsQuad(const FloatQuad&) const; + bool contains(const LayoutRect&) const; FloatRoundedRect pixelSnappedRoundedRectForPainting(float deviceScaleFactor) const; diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/gtk/UserAgentGtk.cpp webkit2gtk-2.14.7/Source/WebCore/platform/gtk/UserAgentGtk.cpp --- webkit2gtk-2.14.6/Source/WebCore/platform/gtk/UserAgentGtk.cpp 2017-02-07 09:05:08.000000000 +0100 +++ webkit2gtk-2.14.7/Source/WebCore/platform/gtk/UserAgentGtk.cpp 2017-05-09 12:19:53.000000000 +0200 @@ -212,10 +212,6 @@ if (baseDomain == "typekit.net" || baseDomain == "typekit.com") return true; - // Needed for YouTube 360 (requires ENABLE_MEDIA_SOURCE). - if (baseDomain == "youtube.com") - return true; - // Slack completely blocks users with our standard user agent. if (baseDomain == "slack.com") return true; @@ -225,7 +221,7 @@ static bool urlRequiresFirefoxBrowser(const URL& url) { - return isGoogle(url); + return isGoogle(url) && url.host() != "accounts.google.com"; } static bool urlRequiresMacintoshPlatform(const URL& url) diff -Nru webkit2gtk-2.14.6/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp webkit2gtk-2.14.7/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp --- webkit2gtk-2.14.6/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp 2017-02-07 09:05:08.000000000 +0100 +++ webkit2gtk-2.14.7/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp 2017-05-09 11:12:37.000000000 +0200 @@ -175,7 +175,7 @@ { LOG(Network, "SocketStreamHandle %p platformSend", this); if (!m_outputStream || !data) - return Nullopt; + return 0; GUniqueOutPtr<GError> error; gssize written = g_pollable_output_stream_write_nonblocking(m_outputStream.get(), data, length, m_cancellable.get(), &error.outPtr()); diff -Nru webkit2gtk-2.14.6/Source/WebCore/rendering/RenderBoxModelObject.cpp webkit2gtk-2.14.7/Source/WebCore/rendering/RenderBoxModelObject.cpp --- webkit2gtk-2.14.6/Source/WebCore/rendering/RenderBoxModelObject.cpp 2017-02-07 09:05:09.000000000 +0100 +++ webkit2gtk-2.14.7/Source/WebCore/rendering/RenderBoxModelObject.cpp 2017-05-09 12:01:42.000000000 +0200 @@ -1691,6 +1691,10 @@ RoundedRect outerBorder = style.getRoundedBorderFor(rect, includeLogicalLeftEdge, includeLogicalRightEdge); RoundedRect innerBorder = style.getRoundedInnerBorderFor(borderInnerRectAdjustedForBleedAvoidance(graphicsContext, rect, bleedAvoidance), includeLogicalLeftEdge, includeLogicalRightEdge); + // If no borders intersects with the dirty area, we can skip the border painting. + if (innerBorder.contains(info.rect)) + return; + bool haveAlphaColor = false; bool haveAllSolidEdges = true; bool haveAllDoubleEdges = true;