Bug#862502: unblock: webkit2gtk/2.14.7-1

Michael Biebl biebl at debian.org
Sat May 13 18:07:12 UTC 2017


Package: release.debian.org
Severity: normal
User: release.debian.org at 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)
-------------- next part --------------
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 <berto at 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 <glandium at debian.org>
            ? 2009 Gustavo Noronha Silva <kov at debian.org>
-           ? 2014-2016 Alberto Garcia <berto at igalia.com>
+           ? 2014-2017 Alberto Garcia <berto at 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;


More information about the Pkg-webkit-maintainers mailing list