From 7c3a703ed66c66654dc285e7a4b38f72604ae761 Mon Sep 17 00:00:00 2001 From: Sameer Vijaykar <194338+sam-vi@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:37:06 +0200 Subject: [PATCH 1/4] Use RTCIceCandidatePair interface in RTCIceTransport. Addresses: w3c/webrtc-pc#2930. As an interface, RTCIceCandidatePair can be used as an attribute of other interfaces. So simplify RTCIceCandidatePairEvent by having a single candidatePair attribute instead of individual local and remote candidates. --- index.html | 58 +++++++++++++++++------------------------------------- 1 file changed, 18 insertions(+), 40 deletions(-) diff --git a/index.html b/index.html index ee9db06..0ed36ba 100644 --- a/index.html +++ b/index.html @@ -586,10 +586,9 @@
- Let |candidatePair:RTCIceCandidatePair| be a new {{RTCIceCandidatePair}} dictionary - with its {{RTCIceCandidatePair/local}} and {{RTCIceCandidatePair/remote}} members - initialized to new {{RTCIceCandidate}}s representing the local and remote part of the - [= formed =] pair respectively. + Let |candidatePair:RTCIceCandidatePair| be the result of [= creating an RTCIceCandidatePair =] with + |local:RTCIceCandidate| and |remote:RTCIceCandidate|, representing the local and remote candidates of the [= formed =] + pair respectively.
[= Fire an event =] named {{RTCIceTransport/icecandidatepairadd}} at |transport|, using {{RTCIceCandidatePairEvent}}, - with the {{RTCIceCandidatePairEvent/local}} and {{RTCIceCandidatePairEvent/remote}} attributes - initialized to the local and remote candidates, respectively, of |candidatePair|. + with the {{RTCIceCandidatePairEvent/candidatePair}} attribute + initialized to |candidatePair|.
Let |accepted:boolean| be the result of [= fire an event | firing an event =] named
{{RTCIceTransport/icecandidatepairnominate}} at |transport|, using {{RTCIceCandidatePairEvent}}, with the
- {{Event/cancelable}} attribute initialized to true
, and the {{RTCIceCandidatePairEvent/local}} and
- {{RTCIceCandidatePairEvent/remote}} attributes initialized to the local and remote candidates, respectively, of
- |candidatePair|.
+ {{Event/cancelable}} attribute initialized to true
, and the {{RTCIceCandidatePairEvent/candidatePair}} attribute
+ initialized to |candidatePair|.
Let |accepted:boolean| be the result of [= fire an event | firing an event =] named {{RTCIceTransport/icecandidatepairremove}} at |transport|, using {{RTCIceCandidatePairEvent}}, with the - {{Event/cancelable}} attribute initialized to cancelable, and the {{RTCIceCandidatePairEvent/local}} - and {{RTCIceCandidatePairEvent/remote}} attributes initialized to the local and remote candidates, respectively, - of |candidatePair|. + {{Event/cancelable}} attribute initialized to cancelable, and the {{RTCIceCandidatePairEvent/candidatePair}} attribute + initialized to |candidatePair|.
- [= Fire an event =] named {{RTCIceTransport/icecandidatepairremove}} at |transport|, using {{RTCIceCandidatePairEvent}}, with the {{Event/cancelable}} attribute initialized to false
, and the {{RTCIceCandidatePairEvent/local}} and {{RTCIceCandidatePairEvent/remote}} attributes initialized to the {{RTCIceCandidatePair/local}} and {{RTCIceCandidatePair/remote}} candidates, respectively, of candidatePair.
+ [= Fire an event =] named {{RTCIceTransport/icecandidatepairremove}} at |transport|, using {{RTCIceCandidatePairEvent}}, with the {{Event/cancelable}} attribute initialized to false
, and the {{RTCIceCandidatePairEvent/candidatePair}} attribute initialized to |candidatePair|.
- The {{RTCIceTransport/icecandidatepairadd}} and {{RTCIceTransport/icecandidatepairremove}} events use the + The {{RTCIceTransport/icecandidatepairadd}}, {{RTCIceTransport/icecandidatepairnominate}} and + {{RTCIceTransport/icecandidatepairremove}} events use the {{RTCIceCandidatePairEvent}} interface.
[Exposed=Window] interface RTCIceCandidatePairEvent : Event { constructor(DOMString type, RTCIceCandidatePairEventInit eventInitDict); - readonly attribute RTCIceCandidate local; - readonly attribute RTCIceCandidate remote; + readonly attribute RTCIceCandidatePair candidatePair; };
- The {{local}} attribute represents the local {{RTCIceCandidate}} of the candidate pair associated with the - event. -
-- The {{remote}} attribute represents the remote {{RTCIceCandidate}} of the candidate pair associated with - the event. + The {{candidatePair}} attribute represents the candidate pair associated with the event.
dictionary RTCIceCandidatePairEventInit : EventInit { - required RTCIceCandidate local; - required RTCIceCandidate remote; + required RTCIceCandidatePair candidatePair; };
- The local {{RTCIceCandidate}} of the candidate pair announced by the event. -
-- The remote {{RTCIceCandidate}} of the candidate pair announced by the event. + The candidate pair announced by the event.
- [=Assert=]: |candidatePair| does not [= candidate pair match | match =] any - item in |transport|.{{RTCIceTransport/[[CandidatePairs]]}} + [=Assert=]: |transport|.{{RTCIceTransport/[[CandidatePairs]]}} does not [= list/contain =] |candidatePair|.
- If |candidatePair| does not [= candidate pair match | match =] any item in [=this=]. - {{RTCIceTransport/[[CandidatePairs]]}}, [= exception/throw =] a {{NotFoundError}}. + If [=this=].{{RTCIceTransport/[[CandidatePairs]]}} does not [= list/contain =] |candidatePair|, [= exception/throw =] a {{NotFoundError}}.
- If |candidatePair| does not [= candidate pair match | match =] any item in [=this=]. - {{RTCIceTransport/[[CandidatePairs]]}}, [= exception/throw =] a {{NotFoundError}}. + If [=this=].{{RTCIceTransport/[[CandidatePairs]]}} does not [= list/contain =] |candidatePair|, [= exception/throw =] a {{NotFoundError}}.
- [= list/Remove =] the item in - [=this=].{{RTCIceTransport/[[CandidatePairs]]}} that - [= candidate pair match | matches =] |candidatePair|. + [= list/Remove =] |candidatePair| from + [=this=].{{RTCIceTransport/[[CandidatePairs]]}}.
- The candidate match algorithm given two {{RTCIceCandidate}} |first:RTCIceCandidate| and + The candidate match algorithm given two {{RTCIceCandidate}} |first:RTCIceCandidate| and |second:RTCIceCandidate| is as follows:
- The candidate pair match algorithm given two {{RTCIceCandidatePair}} |first:RTCIceCandidatePair| and |second:RTCIceCandidatePair| is as follows: -
-
- If |first|.{{RTCIceCandidatePair/local}} does not [= candidate match | match =] |second|.{{RTCIceCandidatePair/local}}, return false
.
-
- If |first|.{{RTCIceCandidatePair/remote}} does not [= candidate match | match =] |second|.{{RTCIceCandidatePair/remote}}, return false
.
-
- Return true
.
-
- The candidate match algorithm given two {{RTCIceCandidate}} |first:RTCIceCandidate| and - |second:RTCIceCandidate| is as follows: -
-
- If |first|.{{RTCIceCandidate/candidate}} is not [= string/identical to =] |second|.{{RTCIceCandidate/candidate}}, return false
.
-
- If either (but not both) of |first|.{{RTCIceCandidate/sdpMid}} and |second|.{{RTCIceCandidate/sdpMid}} is
- null
, return false
.
-
- If neither of |first|.{{RTCIceCandidate/sdpMid}} and |second|.{{RTCIceCandidate/sdpMid}} is null
, and |first|.{{RTCIceCandidate/sdpMid}} is not [= string/identical to =]
- |second|.{{RTCIceCandidate/sdpMid}}, return false
.
-
- If either (but not both) of |first|.{{RTCIceCandidate/sdpMLineIndex}} and |second|.{{RTCIceCandidate/sdpMLineIndex}} is
- null
, return false
.
-
- If neither of |first|.{{RTCIceCandidate/sdpMLineIndex}} and |second|.{{RTCIceCandidate/sdpMLineIndex}} is null
and |first|.{{RTCIceCandidate/sdpMLineIndex}} is not equal to
- |second|.{{RTCIceCandidate/sdpMLineIndex}}, return false
.
-
- If either (but not both) of |first|.{{RTCIceCandidate/usernameFragment}} and |second|.{{RTCIceCandidate/usernameFragment}} is
- null
, return false
.
-
- If neither of |first|.{{RTCIceCandidate/usernameFragment}} and |second|.{{RTCIceCandidate/usernameFragment}} is null
and |first|.{{RTCIceCandidate/usernameFragment}} is not [= string/identical to =]
- |second|.{{RTCIceCandidate/usernameFragment}}, return false
.
-
- Return true
.
-
+ In the steps to [=RTCIceTransport/change the selected candidate pair and state=], if the selected candidate pair was changed, modify the first step to the following: +
+null
otherwise.
+ + The candidate match algorithm given two {{RTCIceCandidate}} |first:RTCIceCandidate| and + |second:RTCIceCandidate| is as follows: +
+
+ If |first|.{{RTCIceCandidate/candidate}} is not [= string/identical to =] |second|.{{RTCIceCandidate/candidate}}, return false
.
+
+ If either (but not both) of |first|.{{RTCIceCandidate/sdpMid}} and |second|.{{RTCIceCandidate/sdpMid}} is
+ null
, return false
.
+
+ If neither of |first|.{{RTCIceCandidate/sdpMid}} and |second|.{{RTCIceCandidate/sdpMid}} is null
, and |first|.{{RTCIceCandidate/sdpMid}} is not [= string/identical to =]
+ |second|.{{RTCIceCandidate/sdpMid}}, return false
.
+
+ If either (but not both) of |first|.{{RTCIceCandidate/sdpMLineIndex}} and |second|.{{RTCIceCandidate/sdpMLineIndex}} is
+ null
, return false
.
+
+ If neither of |first|.{{RTCIceCandidate/sdpMLineIndex}} and |second|.{{RTCIceCandidate/sdpMLineIndex}} is null
and |first|.{{RTCIceCandidate/sdpMLineIndex}} is not equal to
+ |second|.{{RTCIceCandidate/sdpMLineIndex}}, return false
.
+
+ If either (but not both) of |first|.{{RTCIceCandidate/usernameFragment}} and |second|.{{RTCIceCandidate/usernameFragment}} is
+ null
, return false
.
+
+ If neither of |first|.{{RTCIceCandidate/usernameFragment}} and |second|.{{RTCIceCandidate/usernameFragment}} is null
and |first|.{{RTCIceCandidate/usernameFragment}} is not [= string/identical to =]
+ |second|.{{RTCIceCandidate/usernameFragment}}, return false
.
+
+ Return true
.
+
The restrictions being orientation agnostic means that they will automatically be adjusted to the orientation of the frame being @@ -466,6 +465,7 @@