Title: [270101] trunk
Revision
270101
Author
[email protected]
Date
2020-11-20 03:05:32 -0800 (Fri, 20 Nov 2020)

Log Message

Add support for RTCPeerConnection.onicecandidateerror event
https://bugs.webkit.org/show_bug.cgi?id=169644

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

* web-platform-tests/webrtc/idlharness.https.window-expected.txt:

Source/WebCore:

Expose RTCPeerConnection.onicecandidateerror and use it for wrong STUN/TURN server URLs.
For that matter, add RTCPeerConnectionIceErrorEvent as per spec with a slight change to the init directory to keep the same terminology between event and init dictionary.

Covered by updated webrtc/stun-server-filtering.html test.

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* Modules/mediastream/RTCPeerConnection.cpp:
(WebCore::RTCPeerConnection::iceServersFromConfiguration):
(WebCore::iceServersFromConfiguration): Deleted.
* Modules/mediastream/RTCPeerConnection.h:
* Modules/mediastream/RTCPeerConnection.idl:
* Modules/mediastream/RTCPeerConnectionIceErrorEvent.cpp: Added.
(WebCore::RTCPeerConnectionIceErrorEvent::create):
(WebCore::RTCPeerConnectionIceErrorEvent::RTCPeerConnectionIceErrorEvent):
(WebCore::RTCPeerConnectionIceErrorEvent::eventInterface const):
* Modules/mediastream/RTCPeerConnectionIceErrorEvent.h: Added.
* Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl: Added.
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/WebCoreBuiltinNames.h:
* dom/EventNames.h:
* dom/EventNames.in:

LayoutTests:

* webrtc/rtcpeerconnection-error-messages-expected.txt:
* webrtc/stun-server-filtering.html:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (270100 => 270101)


--- trunk/LayoutTests/ChangeLog	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/LayoutTests/ChangeLog	2020-11-20 11:05:32 UTC (rev 270101)
@@ -1,3 +1,13 @@
+2020-11-20  Youenn Fablet  <[email protected]>
+
+        Add support for RTCPeerConnection.onicecandidateerror event
+        https://bugs.webkit.org/show_bug.cgi?id=169644
+
+        Reviewed by Alex Christensen.
+
+        * webrtc/rtcpeerconnection-error-messages-expected.txt:
+        * webrtc/stun-server-filtering.html:
+
 2020-11-19  Zalan Bujtas  <[email protected]>
 
         [LFC][Integration] Enable inline-block

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (270100 => 270101)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2020-11-20 11:05:32 UTC (rev 270101)
@@ -1,3 +1,12 @@
+2020-11-20  Youenn Fablet  <[email protected]>
+
+        Add support for RTCPeerConnection.onicecandidateerror event
+        https://bugs.webkit.org/show_bug.cgi?id=169644
+
+        Reviewed by Alex Christensen.
+
+        * web-platform-tests/webrtc/idlharness.https.window-expected.txt:
+
 2020-11-16  Sergio Villar Senin  <[email protected]>
 
         [css-flex] Images as flex items should use the overridingLogicalHeight when defined to compute the logical width

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt (270100 => 270101)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt	2020-11-20 11:05:32 UTC (rev 270101)
@@ -44,7 +44,7 @@
 PASS RTCPeerConnection interface: operation close()
 PASS RTCPeerConnection interface: attribute onnegotiationneeded
 PASS RTCPeerConnection interface: attribute onicecandidate
-FAIL RTCPeerConnection interface: attribute onicecandidateerror assert_true: The prototype object must have a property "onicecandidateerror" expected true got false
+PASS RTCPeerConnection interface: attribute onicecandidateerror
 PASS RTCPeerConnection interface: attribute onsignalingstatechange
 PASS RTCPeerConnection interface: attribute oniceconnectionstatechange
 PASS RTCPeerConnection interface: attribute onicegatheringstatechange
@@ -96,7 +96,7 @@
 PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "close()" with the proper type
 PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "onnegotiationneeded" with the proper type
 PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "onicecandidate" with the proper type
-FAIL RTCPeerConnection interface: new RTCPeerConnection() must inherit property "onicecandidateerror" with the proper type assert_inherits: property "onicecandidateerror" not found in prototype chain
+PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "onicecandidateerror" with the proper type
 PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "onsignalingstatechange" with the proper type
 PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "oniceconnectionstatechange" with the proper type
 PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "onicegatheringstatechange" with the proper type
@@ -195,24 +195,24 @@
 PASS Stringification of new RTCPeerConnectionIceEvent('ice')
 PASS RTCPeerConnectionIceEvent interface: new RTCPeerConnectionIceEvent('ice') must inherit property "candidate" with the proper type
 PASS RTCPeerConnectionIceEvent interface: new RTCPeerConnectionIceEvent('ice') must inherit property "url" with the proper type
-FAIL RTCPeerConnectionIceErrorEvent interface: existence and properties of interface object assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface object length assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface object name assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface: existence and properties of interface prototype object assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface: attribute address assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface: attribute port assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface: attribute url assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface: attribute errorCode assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent interface: attribute errorText assert_own_property: self does not have own property "RTCPeerConnectionIceErrorEvent" expected property "RTCPeerConnectionIceErrorEvent" missing
-FAIL RTCPeerConnectionIceErrorEvent must be primary interface of new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: RTCPeerConnectionIceErrorEvent"
-FAIL Stringification of new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: RTCPeerConnectionIceErrorEvent"
-FAIL RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "address" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: RTCPeerConnectionIceErrorEvent"
-FAIL RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "port" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: RTCPeerConnectionIceErrorEvent"
-FAIL RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "url" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: RTCPeerConnectionIceErrorEvent"
-FAIL RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "errorCode" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: RTCPeerConnectionIceErrorEvent"
-FAIL RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "errorText" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: RTCPeerConnectionIceErrorEvent"
+PASS RTCPeerConnectionIceErrorEvent interface: existence and properties of interface object
+PASS RTCPeerConnectionIceErrorEvent interface object length
+PASS RTCPeerConnectionIceErrorEvent interface object name
+PASS RTCPeerConnectionIceErrorEvent interface: existence and properties of interface prototype object
+PASS RTCPeerConnectionIceErrorEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS RTCPeerConnectionIceErrorEvent interface: existence and properties of interface prototype object's @@unscopables property
+PASS RTCPeerConnectionIceErrorEvent interface: attribute address
+PASS RTCPeerConnectionIceErrorEvent interface: attribute port
+PASS RTCPeerConnectionIceErrorEvent interface: attribute url
+PASS RTCPeerConnectionIceErrorEvent interface: attribute errorCode
+PASS RTCPeerConnectionIceErrorEvent interface: attribute errorText
+PASS RTCPeerConnectionIceErrorEvent must be primary interface of new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 });
+PASS Stringification of new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 });
+PASS RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "address" with the proper type
+PASS RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "port" with the proper type
+PASS RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "url" with the proper type
+PASS RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "errorCode" with the proper type
+PASS RTCPeerConnectionIceErrorEvent interface: new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 }); must inherit property "errorText" with the proper type
 PASS RTCCertificate interface: existence and properties of interface object
 PASS RTCCertificate interface object length
 PASS RTCCertificate interface object name

Modified: trunk/LayoutTests/webrtc/rtcpeerconnection-error-messages-expected.txt (270100 => 270101)


--- trunk/LayoutTests/webrtc/rtcpeerconnection-error-messages-expected.txt	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/LayoutTests/webrtc/rtcpeerconnection-error-messages-expected.txt	2020-11-20 11:05:32 UTC (rev 270101)
@@ -15,7 +15,7 @@
 TypeError: Can only call RTCPeerConnection.close on instances of RTCPeerConnection
 TypeError: The RTCPeerConnection.onnegotiationneeded getter can only be used on instances of RTCPeerConnection
 TypeError: The RTCPeerConnection.onicecandidate getter can only be used on instances of RTCPeerConnection
-[object RTCPeerConnection] has no property named onicecandidateerror
+TypeError: The RTCPeerConnection.onicecandidateerror getter can only be used on instances of RTCPeerConnection
 TypeError: The RTCPeerConnection.onsignalingstatechange getter can only be used on instances of RTCPeerConnection
 TypeError: The RTCPeerConnection.oniceconnectionstatechange getter can only be used on instances of RTCPeerConnection
 TypeError: The RTCPeerConnection.onicegatheringstatechange getter can only be used on instances of RTCPeerConnection

Modified: trunk/LayoutTests/webrtc/stun-server-filtering.html (270100 => 270101)


--- trunk/LayoutTests/webrtc/stun-server-filtering.html	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/LayoutTests/webrtc/stun-server-filtering.html	2020-11-20 11:05:32 UTC (rev 270101)
@@ -2,19 +2,29 @@
 <script src=''></script>
 <script src=''></script>
 <script>
-test((test) => {
+promise_test(async (test) => {
     let pc = new RTCPeerConnection({iceServers:[{urls:['stun:foo.com', 'stun:blabla.local']}]});
+    let promise = new Promise(resolve => pc._onicecandidateerror_ = resolve);
     let configuration = pc.getConfiguration();
 
     assert_equals(configuration.iceServers[0].urls.length, 1);
     assert_equals(configuration.iceServers[0].urls[0], 'stun:foo.com');
+
+    const event = await promise;
+    assert_equals(event.url, 'stun:blabla.local');
+    assert_equals(event.errorCode, 701);
 }, "RTCPeerConnection and local STUN server");
 
-test((test) => {
+promise_test(async (test) => {
     let pc = new RTCPeerConnection({iceServers:[{username: 'test', credential: 'test', urls:['turn:foo.com', 'turn:blabla.local']}]});
+    let promise = new Promise(resolve => pc._onicecandidateerror_ = resolve);
     let configuration = pc.getConfiguration();
 
     assert_equals(configuration.iceServers[0].urls.length, 1);
     assert_equals(configuration.iceServers[0].urls[0], 'turn:foo.com');
+
+    const event = await promise;
+    assert_equals(event.url, 'turn:blabla.local');
+    assert_equals(event.errorCode, 701);
 }, "RTCPeerConnection and local TURN server");
 </script>

Modified: trunk/Source/WebCore/CMakeLists.txt (270100 => 270101)


--- trunk/Source/WebCore/CMakeLists.txt	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/CMakeLists.txt	2020-11-20 11:05:32 UTC (rev 270101)
@@ -389,6 +389,7 @@
     Modules/mediastream/RTCOfferAnswerOptions.idl
     Modules/mediastream/RTCOfferOptions.idl
     Modules/mediastream/RTCPeerConnection.idl
+    Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl
     Modules/mediastream/RTCPeerConnectionIceEvent.idl
     Modules/mediastream/RTCPeerConnectionState.idl
     Modules/mediastream/RTCPriorityType.idl

Modified: trunk/Source/WebCore/ChangeLog (270100 => 270101)


--- trunk/Source/WebCore/ChangeLog	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/ChangeLog	2020-11-20 11:05:32 UTC (rev 270101)
@@ -1,3 +1,36 @@
+2020-11-20  Youenn Fablet  <[email protected]>
+
+        Add support for RTCPeerConnection.onicecandidateerror event
+        https://bugs.webkit.org/show_bug.cgi?id=169644
+
+        Reviewed by Alex Christensen.
+
+        Expose RTCPeerConnection.onicecandidateerror and use it for wrong STUN/TURN server URLs.
+        For that matter, add RTCPeerConnectionIceErrorEvent as per spec with a slight change to the init directory to keep the same terminology between event and init dictionary.
+
+        Covered by updated webrtc/stun-server-filtering.html test.
+
+        * CMakeLists.txt:
+        * DerivedSources-input.xcfilelist:
+        * DerivedSources-output.xcfilelist:
+        * DerivedSources.make:
+        * Modules/mediastream/RTCPeerConnection.cpp:
+        (WebCore::RTCPeerConnection::iceServersFromConfiguration):
+        (WebCore::iceServersFromConfiguration): Deleted.
+        * Modules/mediastream/RTCPeerConnection.h:
+        * Modules/mediastream/RTCPeerConnection.idl:
+        * Modules/mediastream/RTCPeerConnectionIceErrorEvent.cpp: Added.
+        (WebCore::RTCPeerConnectionIceErrorEvent::create):
+        (WebCore::RTCPeerConnectionIceErrorEvent::RTCPeerConnectionIceErrorEvent):
+        (WebCore::RTCPeerConnectionIceErrorEvent::eventInterface const):
+        * Modules/mediastream/RTCPeerConnectionIceErrorEvent.h: Added.
+        * Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl: Added.
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * bindings/js/WebCoreBuiltinNames.h:
+        * dom/EventNames.h:
+        * dom/EventNames.in:
+
 2020-11-16  Sergio Villar Senin  <[email protected]>
 
         [css-flex] Images as flex items should use the overridingLogicalHeight when defined to compute the logical width

Modified: trunk/Source/WebCore/DerivedSources-input.xcfilelist (270100 => 270101)


--- trunk/Source/WebCore/DerivedSources-input.xcfilelist	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/DerivedSources-input.xcfilelist	2020-11-20 11:05:32 UTC (rev 270101)
@@ -220,6 +220,7 @@
 $(PROJECT_DIR)/Modules/mediastream/RTCOfferOptions.idl
 $(PROJECT_DIR)/Modules/mediastream/RTCPeerConnection.idl
 $(PROJECT_DIR)/Modules/mediastream/RTCPeerConnection.js
+$(PROJECT_DIR)/Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl
 $(PROJECT_DIR)/Modules/mediastream/RTCPeerConnectionIceEvent.idl
 $(PROJECT_DIR)/Modules/mediastream/RTCPeerConnectionInternals.js
 $(PROJECT_DIR)/Modules/mediastream/RTCPeerConnectionState.idl

Modified: trunk/Source/WebCore/DerivedSources-output.xcfilelist (270100 => 270101)


--- trunk/Source/WebCore/DerivedSources-output.xcfilelist	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/DerivedSources-output.xcfilelist	2020-11-20 11:05:32 UTC (rev 270101)
@@ -1677,6 +1677,8 @@
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCOfferOptions.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCPeerConnection.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCPeerConnection.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCPeerConnectionIceErrorEvent.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCPeerConnectionIceErrorEvent.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCPeerConnectionIceEvent.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCPeerConnectionIceEvent.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCPeerConnectionState.cpp

Modified: trunk/Source/WebCore/DerivedSources.make (270100 => 270101)


--- trunk/Source/WebCore/DerivedSources.make	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/DerivedSources.make	2020-11-20 11:05:32 UTC (rev 270101)
@@ -246,6 +246,7 @@
     $(WebCore)/Modules/mediastream/RTCOfferOptions.idl \
     $(WebCore)/Modules/mediastream/RTCPeerConnection.idl \
     $(WebCore)/Modules/mediastream/RTCPeerConnectionIceEvent.idl \
+    $(WebCore)/Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl \
     $(WebCore)/Modules/mediastream/RTCPeerConnectionState.idl \
     $(WebCore)/Modules/mediastream/RTCPriorityType.idl \
     $(WebCore)/Modules/mediastream/RTCRtpCapabilities.idl \

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp (270100 => 270101)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp	2020-11-20 11:05:32 UTC (rev 270101)
@@ -54,6 +54,7 @@
 #include "RTCIceCandidate.h"
 #include "RTCIceCandidateInit.h"
 #include "RTCOfferOptions.h"
+#include "RTCPeerConnectionIceErrorEvent.h"
 #include "RTCPeerConnectionIceEvent.h"
 #include "RTCSessionDescription.h"
 #include "RTCSessionDescriptionInit.h"
@@ -329,7 +330,7 @@
 }
 
 // Implementation of https://w3c.github.io/webrtc-pc/#set-pc-configuration
-static inline ExceptionOr<Vector<MediaEndpointConfiguration::IceServerInfo>> iceServersFromConfiguration(RTCConfiguration& newConfiguration, const RTCConfiguration* existingConfiguration, bool isLocalDescriptionSet)
+ExceptionOr<Vector<MediaEndpointConfiguration::IceServerInfo>> RTCPeerConnection::iceServersFromConfiguration(RTCConfiguration& newConfiguration, const RTCConfiguration* existingConfiguration, bool isLocalDescriptionSet)
 {
     if (existingConfiguration && newConfiguration.bundlePolicy != existingConfiguration->bundlePolicy)
         return Exception { InvalidModificationError, "BundlePolicy does not match existing policy" };
@@ -351,8 +352,13 @@
                 urls = WTFMove(vector);
             });
 
-            urls.removeAllMatching([](auto& url) {
-                return URL { URL { }, url }.path().endsWithIgnoringASCIICase(".local");
+            urls.removeAllMatching([&](auto& urlString) {
+                URL url { URL { }, urlString };
+                if (url.path().endsWithIgnoringASCIICase(".local") || !portAllowed(url)) {
+                    queueTaskToDispatchEvent(*this, TaskSource::MediaElement, RTCPeerConnectionIceErrorEvent::create(Event::CanBubble::No, Event::IsCancelable::No, { }, { }, WTFMove(urlString), 701, "URL is not allowed"_s));
+                    return true;
+                }
+                return false;
             });
 
             auto serverURLs = WTF::map(urls, [](auto& url) -> URL {

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h (270100 => 270101)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h	2020-11-20 11:05:32 UTC (rev 270101)
@@ -222,6 +222,8 @@
     void chainOperation(Ref<DeferredPromise>&&, Function<void(Ref<DeferredPromise>&&)>&&);
     friend class RTCRtpSender;
 
+    ExceptionOr<Vector<MediaEndpointConfiguration::IceServerInfo>> iceServersFromConfiguration(RTCConfiguration& newConfiguration, const RTCConfiguration* existingConfiguration, bool isLocalDescriptionSet);
+
     bool m_isStopped { false };
     RTCSignalingState m_signalingState { RTCSignalingState::Stable };
     RTCIceGatheringState m_iceGatheringState { RTCIceGatheringState::New };

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl (270100 => 270101)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl	2020-11-20 11:05:32 UTC (rev 270101)
@@ -113,7 +113,7 @@
     attribute EventHandler oniceconnectionstatechange;
     attribute EventHandler onicegatheringstatechange;
     attribute EventHandler onconnectionstatechange;
-    // FIXME 169644: missing onfingerprintfailure and onicecandidateerror
+    attribute EventHandler onicecandidateerror;
 
     // 4.11 Certificate management
     [CallWith=GlobalObject] static Promise<RTCCertificate> generateCertificate(AlgorithmIdentifier keygenAlgorithm);

Added: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.cpp (0 => 270101)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.cpp	                        (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.cpp	2020-11-20 11:05:32 UTC (rev 270101)
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "RTCPeerConnectionIceErrorEvent.h"
+
+#if ENABLE(WEB_RTC)
+
+#include "EventNames.h"
+#include <wtf/IsoMallocInlines.h>
+
+namespace WebCore {
+
+WTF_MAKE_ISO_ALLOCATED_IMPL(RTCPeerConnectionIceErrorEvent);
+
+Ref<RTCPeerConnectionIceErrorEvent> RTCPeerConnectionIceErrorEvent::create(CanBubble canBubble, IsCancelable isCancelable, String&& address, Optional<uint16_t> port, String&& url, uint16_t errorCode, String&& errorText)
+{
+    return adoptRef(*new RTCPeerConnectionIceErrorEvent(eventNames().icecandidateerrorEvent, canBubble, isCancelable, WTFMove(address), port, WTFMove(url), errorCode, WTFMove(errorText)));
+}
+
+Ref<RTCPeerConnectionIceErrorEvent> RTCPeerConnectionIceErrorEvent::create(const AtomString& type, Init&& init)
+{
+    return adoptRef(*new RTCPeerConnectionIceErrorEvent(type, init.bubbles ? CanBubble::Yes : CanBubble::No,
+        init.cancelable ? IsCancelable::Yes : IsCancelable::No, WTFMove(init.address), init.port, WTFMove(init.url), WTFMove(init.errorCode), WTFMove(init.errorText)));
+}
+
+RTCPeerConnectionIceErrorEvent::RTCPeerConnectionIceErrorEvent(const AtomString& type, CanBubble canBubble, IsCancelable cancelable, String&& address, Optional<uint16_t> port, String&& url, uint16_t errorCode, String&& errorText)
+    : Event(type, canBubble, cancelable)
+    , m_address(WTFMove(address))
+    , m_port(port)
+    , m_url(WTFMove(url))
+    , m_errorCode(errorCode)
+    , m_errorText(WTFMove(errorText))
+{
+}
+
+RTCPeerConnectionIceErrorEvent::~RTCPeerConnectionIceErrorEvent() = default;
+
+EventInterface RTCPeerConnectionIceErrorEvent::eventInterface() const
+{
+    return RTCPeerConnectionIceErrorEventInterfaceType;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_RTC)

Added: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.h (0 => 270101)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.h	                        (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.h	2020-11-20 11:05:32 UTC (rev 270101)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(WEB_RTC)
+
+#include "Event.h"
+#include <wtf/Optional.h>
+#include <wtf/text/AtomString.h>
+
+namespace WebCore {
+class RTCIceCandidate;
+
+class RTCPeerConnectionIceErrorEvent final : public Event {
+    WTF_MAKE_ISO_ALLOCATED(RTCPeerConnectionIceErrorEvent);
+public:
+    virtual ~RTCPeerConnectionIceErrorEvent();
+
+    struct Init : EventInit {
+        String address;
+        Optional<uint16_t> port;
+        String url;
+        uint16_t errorCode { 0 };
+        String errorText;
+    };
+
+    static Ref<RTCPeerConnectionIceErrorEvent> create(const AtomString& type, Init&&);
+    static Ref<RTCPeerConnectionIceErrorEvent> create(CanBubble, IsCancelable, String&& address, Optional<uint16_t> port, String&& url, uint16_t errorCode, String&& errorText);
+
+    const String& address() const { return m_address; }
+    Optional<uint16_t> port() const { return m_port; }
+    const String& url() const { return m_url; }
+    uint16_t errorCode() const { return m_errorCode; }
+    const String& errorText() const { return m_errorText; }
+
+    virtual EventInterface eventInterface() const;
+
+private:
+    RTCPeerConnectionIceErrorEvent(const AtomString& type, CanBubble, IsCancelable, String&& address, Optional<uint16_t> port, String&& url, uint16_t errorCode, String&& errorText);
+
+    String m_address;
+    Optional<uint16_t> m_port;
+    String m_url;
+    uint16_t m_errorCode { 0 };
+    String m_errorText;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_RTC)

Added: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl (0 => 270101)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl	                        (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionIceErrorEvent.idl	2020-11-20 11:05:32 UTC (rev 270101)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+dictionary RTCPeerConnectionIceErrorEventInit : EventInit {
+    DOMString? address;
+    unsigned short? port;
+    DOMString url;
+    required unsigned short errorCode;
+    USVString errorText;
+};
+
+[
+    Conditional=WEB_RTC,
+    EnabledAtRuntime=PeerConnection,
+    Exposed=Window
+] interface RTCPeerConnectionIceErrorEvent : Event {
+    constructor(DOMString type, RTCPeerConnectionIceErrorEventInit eventInitDict);
+
+    readonly attribute DOMString? address;
+    readonly attribute unsigned short? port;
+    readonly attribute DOMString url;
+    readonly attribute unsigned short errorCode;
+    readonly attribute USVString errorText;
+};

Modified: trunk/Source/WebCore/Sources.txt (270100 => 270101)


--- trunk/Source/WebCore/Sources.txt	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/Sources.txt	2020-11-20 11:05:32 UTC (rev 270101)
@@ -162,6 +162,7 @@
 Modules/mediastream/RTCIceTransport.cpp
 Modules/mediastream/RTCPeerConnection.cpp
 Modules/mediastream/RTCPeerConnectionIceEvent.cpp
+Modules/mediastream/RTCPeerConnectionIceErrorEvent.cpp
 Modules/mediastream/RTCRtpReceiver.cpp
 Modules/mediastream/RTCRtpSFrameTransform.cpp
 Modules/mediastream/RTCRtpSFrameTransformer.cpp
@@ -3311,6 +3312,7 @@
 JSRTCOfferOptions.cpp
 JSRTCPeerConnection.cpp
 JSRTCPeerConnectionIceEvent.cpp
+JSRTCPeerConnectionIceErrorEvent.cpp
 JSRTCPeerConnectionState.cpp
 JSRTCPriorityType.cpp
 JSRTCRtpCapabilities.cpp

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (270100 => 270101)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-11-20 11:05:32 UTC (rev 270101)
@@ -1126,6 +1126,7 @@
 		419ACF921F97E7DA009F1A83 /* ServiceWorkerFetch.h in Headers */ = {isa = PBXBuildFile; fileRef = 419ACF8E1F97E7D5009F1A83 /* ServiceWorkerFetch.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		419BC2DF1685329900D64D6D /* VisitedLinkState.h in Headers */ = {isa = PBXBuildFile; fileRef = 419BC2DD1685329900D64D6D /* VisitedLinkState.h */; };
 		419BE7591BC7F42B00E1C85B /* WebCoreBuiltinNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 419BE7521BC7F3DB00E1C85B /* WebCoreBuiltinNames.h */; };
+		419E6EC92566D278002B5010 /* RTCPeerConnectionIceErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 419E6EC72566D214002B5010 /* RTCPeerConnectionIceErrorEvent.h */; };
 		41A0829C22935F3D008426E0 /* FeaturePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A0829922932EF4008426E0 /* FeaturePolicy.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		41A1B01C1E54239B007F3769 /* JSDOMGuardedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A1B01A1E542396007F3769 /* JSDOMGuardedObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		41A3D58F101C152D00316D07 /* DedicatedWorkerThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A3D58D101C152D00316D07 /* DedicatedWorkerThread.h */; };
@@ -7771,6 +7772,9 @@
 		419BE7521BC7F3DB00E1C85B /* WebCoreBuiltinNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCoreBuiltinNames.h; sourceTree = "<group>"; };
 		419D9305255E842700DA1984 /* CryptoUtilitiesCocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CryptoUtilitiesCocoa.h; sourceTree = "<group>"; };
 		419D9307255E842800DA1984 /* CryptoUtilitiesCocoa.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CryptoUtilitiesCocoa.cpp; sourceTree = "<group>"; };
+		419E6EC42566D211002B5010 /* RTCPeerConnectionIceErrorEvent.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = RTCPeerConnectionIceErrorEvent.idl; sourceTree = "<group>"; };
+		419E6EC62566D213002B5010 /* RTCPeerConnectionIceErrorEvent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RTCPeerConnectionIceErrorEvent.cpp; sourceTree = "<group>"; };
+		419E6EC72566D214002B5010 /* RTCPeerConnectionIceErrorEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCPeerConnectionIceErrorEvent.h; sourceTree = "<group>"; };
 		419FAFAD1ABABCD5005B3572 /* ReadableStreamBYOBReader.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadableStreamBYOBReader.idl; sourceTree = "<group>"; };
 		419FAFAD1ABABCD5005B828B /* ReadableStreamDefaultReader.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadableStreamDefaultReader.idl; sourceTree = "<group>"; };
 		41A023ED1A39DB7900F722CF /* ReadableStream.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadableStream.idl; sourceTree = "<group>"; };
@@ -17120,6 +17124,9 @@
 				07221B7717CEC32700848E51 /* RTCPeerConnection.cpp */,
 				07221B7817CEC32700848E51 /* RTCPeerConnection.h */,
 				07221B7917CEC32700848E51 /* RTCPeerConnection.idl */,
+				419E6EC62566D213002B5010 /* RTCPeerConnectionIceErrorEvent.cpp */,
+				419E6EC72566D214002B5010 /* RTCPeerConnectionIceErrorEvent.h */,
+				419E6EC42566D211002B5010 /* RTCPeerConnectionIceErrorEvent.idl */,
 				07221B7417CEC32700848E51 /* RTCPeerConnectionIceEvent.cpp */,
 				07221B7517CEC32700848E51 /* RTCPeerConnectionIceEvent.h */,
 				07221B7617CEC32700848E51 /* RTCPeerConnectionIceEvent.idl */,
@@ -34227,6 +34234,7 @@
 				073794DE19EE2C5200E5A045 /* RTCOfferAnswerOptions.h in Headers */,
 				078E092517D14D1C00420AA1 /* RTCPeerConnection.h in Headers */,
 				078E094217D16E1C00420AA1 /* RTCPeerConnectionHandlerClient.h in Headers */,
+				419E6EC92566D278002B5010 /* RTCPeerConnectionIceErrorEvent.h in Headers */,
 				078E092417D14D1C00420AA1 /* RTCPeerConnectionIceEvent.h in Headers */,
 				412DE4B8219285C00075F3A7 /* RTCRtpCapabilities.h in Headers */,
 				5E2C43631BCEE32B0001E2BC /* RTCRtpReceiver.h in Headers */,

Modified: trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h (270100 => 270101)


--- trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h	2020-11-20 11:05:32 UTC (rev 270101)
@@ -219,6 +219,7 @@
     macro(RTCIceTransport) \
     macro(RTCPeerConnection) \
     macro(RTCPeerConnectionIceEvent) \
+    macro(RTCPeerConnectionIceErrorEvent) \
     macro(RTCRtpReceiver) \
     macro(RTCRtpSFrameTransform) \
     macro(RTCRtpSender) \

Modified: trunk/Source/WebCore/dom/EventNames.h (270100 => 270101)


--- trunk/Source/WebCore/dom/EventNames.h	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/dom/EventNames.h	2020-11-20 11:05:32 UTC (rev 270101)
@@ -144,6 +144,7 @@
     macro(gotpointercapture) \
     macro(hashchange) \
     macro(icecandidate) \
+    macro(icecandidateerror) \
     macro(iceconnectionstatechange) \
     macro(icegatheringstatechange) \
     macro(inactive) \

Modified: trunk/Source/WebCore/dom/EventNames.in (270100 => 270101)


--- trunk/Source/WebCore/dom/EventNames.in	2020-11-20 10:47:27 UTC (rev 270100)
+++ trunk/Source/WebCore/dom/EventNames.in	2020-11-20 11:05:32 UTC (rev 270101)
@@ -57,10 +57,10 @@
 MerchantValidationEvent conditional=PAYMENT_REQUEST
 PaymentMethodChangeEvent conditional=PAYMENT_REQUEST
 PaymentRequestUpdateEvent conditional=PAYMENT_REQUEST
+RTCPeerConnectionIceErrorEvent conditional=WEB_RTC
 RTCPeerConnectionIceEvent conditional=WEB_RTC
 RTCDataChannelEvent conditional=WEB_RTC
 RTCDTMFToneChangeEvent conditional=WEB_RTC
-RTCPeerConnectionIceEvent conditional=WEB_RTC
 RTCTrackEvent conditional=WEB_RTC
 SpeechRecognitionErrorEvent
 SpeechRecognitionEvent
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to