Your message dated Sun, 14 May 2017 06:55:10 +0000
with message-id <e1d9nqs-0005kd...@respighi.debian.org>
and subject line unblock webkit2gtk
has caused the Debian Bug report #862502,
regarding unblock: webkit2gtk/2.14.7-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
862502: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=862502
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
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;

--- End Message ---
--- Begin Message ---
Unblocked webkit2gtk.

--- End Message ---

Reply via email to