[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#862502: marked as done (unblock: webkit2gtk/2.14.7-1)



Your message dated Sun, 14 May 2017 06:55:10 +0000
with message-id <E1d9nQs-0005kD-07@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 owner@bugs.debian.org
immediately.)


-- 
862502: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=862502
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@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 <berto@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@debian.org>
            © 2009 Gustavo Noronha Silva <kov@debian.org>
-           © 2014-2016 Alberto Garcia <berto@igalia.com>
+           © 2014-2017 Alberto Garcia <berto@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 to: