From: chen Date: Thu, 21 Nov 2024 18:29:56 +0000 (+0800) Subject: [tv][webrtc]fix DF241113-00425 timeout issue X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F87%2F320687%2F1;p=test%2Ftct%2Fweb%2Fapi.git [tv][webrtc]fix DF241113-00425 timeout issue Change-Id: Ifd86e799580a883097a536b4e6d4d1e043947514 Signed-off-by: chen --- diff --git a/common/tct-webrtc-w3c-tests/tests.full.xml b/common/tct-webrtc-w3c-tests/tests.full.xml index 5b4049b3d..b95538516 100755 --- a/common/tct-webrtc-w3c-tests/tests.full.xml +++ b/common/tct-webrtc-w3c-tests/tests.full.xml @@ -8,7 +8,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate-postMessage.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate-postMessage.html @@ -20,7 +20,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html @@ -32,7 +32,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html @@ -44,7 +44,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html @@ -56,7 +56,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html @@ -68,7 +68,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html @@ -80,7 +80,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html @@ -92,7 +92,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html @@ -104,7 +104,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange-long.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange-long.https.html @@ -116,7 +116,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html @@ -128,7 +128,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html @@ -140,7 +140,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html @@ -152,7 +152,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html @@ -164,7 +164,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html @@ -176,7 +176,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send-blob-order.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send-blob-order.html @@ -188,7 +188,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html @@ -200,7 +200,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html @@ -212,7 +212,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-getRemoteCertificates.html @@ -224,7 +224,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html @@ -236,7 +236,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html @@ -248,7 +248,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html @@ -260,7 +260,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceConnectionState-candidate-pair.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceConnectionState-candidate-pair.https.html @@ -272,7 +272,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceTransport.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceTransport.html @@ -284,7 +284,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-SLD-SRD-timing.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-SLD-SRD-timing.https.html @@ -296,7 +296,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-add-track-no-deadlock.https.html @@ -308,7 +308,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html @@ -320,7 +320,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html @@ -332,7 +332,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html @@ -344,7 +344,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html @@ -356,7 +356,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html @@ -368,7 +368,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html @@ -380,7 +380,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-candidate-in-sdp.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-candidate-in-sdp.https.html @@ -392,7 +392,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-capture-video.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-capture-video.https.html @@ -404,7 +404,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html @@ -416,7 +416,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html @@ -428,7 +428,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html @@ -440,7 +440,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html @@ -452,7 +452,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html @@ -464,7 +464,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html @@ -476,7 +476,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html @@ -488,7 +488,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html @@ -500,7 +500,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html @@ -512,7 +512,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getTransceivers.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getTransceivers.html @@ -524,7 +524,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-helper-test.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-helper-test.html @@ -536,7 +536,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState-disconnected.https.html @@ -548,7 +548,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html @@ -560,7 +560,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html @@ -572,7 +572,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html @@ -584,7 +584,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html @@ -596,7 +596,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onicecandidateerror.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onicecandidateerror.https.html @@ -608,7 +608,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html @@ -620,7 +620,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html @@ -632,7 +632,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html @@ -644,7 +644,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html @@ -656,7 +656,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-perfect-negotiation-stress-glare-linear.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-perfect-negotiation-stress-glare-linear.https.html @@ -668,7 +668,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-perfect-negotiation-stress-glare.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-perfect-negotiation-stress-glare.https.html @@ -680,7 +680,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-perfect-negotiation.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-perfect-negotiation.https.html @@ -692,7 +692,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-plan-b-is-not-supported.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-plan-b-is-not-supported.html @@ -704,7 +704,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-relay-canvas.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-relay-canvas.https.html @@ -716,7 +716,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-remote-track-mute.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-remote-track-mute.https.html @@ -728,7 +728,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html @@ -740,7 +740,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce-onnegotiationneeded.https.html @@ -752,7 +752,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html @@ -764,7 +764,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html @@ -776,7 +776,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html @@ -788,7 +788,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html @@ -800,7 +800,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html @@ -812,7 +812,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html @@ -824,7 +824,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html @@ -836,7 +836,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html @@ -848,7 +848,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html @@ -860,7 +860,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-nomsid.html @@ -872,7 +872,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html @@ -884,7 +884,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html @@ -896,7 +896,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html @@ -908,7 +908,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html @@ -920,7 +920,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-simulcast.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-simulcast.https.html @@ -932,7 +932,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html @@ -944,7 +944,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html @@ -956,7 +956,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html @@ -980,7 +980,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-videoDetectorTest.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-videoDetectorTest.html @@ -992,7 +992,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceErrorEvent.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceErrorEvent.html @@ -1004,7 +1004,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html @@ -1016,7 +1016,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html @@ -1028,7 +1028,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html @@ -1040,7 +1040,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-headerExtensions.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-headerExtensions.html @@ -1052,7 +1052,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html @@ -1064,7 +1064,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html @@ -1076,7 +1076,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html @@ -1088,7 +1088,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html @@ -1100,7 +1100,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html @@ -1112,7 +1112,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getStats.https.html @@ -1124,7 +1124,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getSynchronizationSources.https.html @@ -1136,7 +1136,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-encode-same-track-twice.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-encode-same-track-twice.https.html @@ -1148,7 +1148,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html @@ -1160,7 +1160,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getStats.https.html @@ -1172,7 +1172,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html @@ -1184,7 +1184,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setParameters.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setParameters.html @@ -1196,7 +1196,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html @@ -1208,7 +1208,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html @@ -1220,7 +1220,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender.https.html @@ -1232,7 +1232,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html @@ -1244,7 +1244,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html @@ -1256,7 +1256,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html @@ -1268,7 +1268,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html @@ -1280,7 +1280,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html @@ -1292,7 +1292,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html @@ -1304,7 +1304,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html @@ -1316,7 +1316,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html @@ -1328,7 +1328,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html @@ -1340,7 +1340,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html @@ -1352,7 +1352,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/getstats.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/getstats.html @@ -1364,7 +1364,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/historical.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html @@ -1376,7 +1376,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/no-media-call.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/no-media-call.html @@ -1388,7 +1388,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/promises-call.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/promises-call.html @@ -1400,7 +1400,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html @@ -1412,7 +1412,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simplecall-no-ssrcs.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simplecall-no-ssrcs.https.html @@ -1424,7 +1424,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simplecall.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simplecall.https.html @@ -1436,7 +1436,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html @@ -1460,7 +1460,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html @@ -1472,7 +1472,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/legacy/onaddstream.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/onaddstream.https.html @@ -1484,7 +1484,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/basic.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/basic.https.html @@ -1496,7 +1496,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/getStats.https.html @@ -1508,7 +1508,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/h264.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/h264.https.html @@ -1520,7 +1520,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/setParameters-active.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/setParameters-active.https.html @@ -1532,7 +1532,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/vp8.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/vp8.https.html @@ -1544,7 +1544,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/RTCPeerConnection-payloadTypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/RTCPeerConnection-payloadTypes.html @@ -1556,7 +1556,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html @@ -1568,7 +1568,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html @@ -1580,7 +1580,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html @@ -1592,7 +1592,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/dtls-fingerprint-validation.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-fingerprint-validation.html @@ -1604,7 +1604,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover-datachannel.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover-datachannel.html @@ -1616,7 +1616,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html @@ -1628,7 +1628,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html @@ -1640,7 +1640,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html @@ -1652,7 +1652,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/jsep-initial-offer.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/jsep-initial-offer.https.html @@ -1664,7 +1664,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html @@ -1676,7 +1676,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html @@ -1688,7 +1688,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-clockrate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-clockrate.html @@ -1700,7 +1700,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-demuxing.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-demuxing.html @@ -1712,7 +1712,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-extension-support.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-extension-support.html @@ -1724,7 +1724,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html @@ -1736,7 +1736,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/sctp-format.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sctp-format.html @@ -1748,7 +1748,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-answer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-answer.html @@ -1760,7 +1760,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-offer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-offer.html @@ -1772,7 +1772,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/split.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/split.https.html @@ -1784,7 +1784,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/unknown-mediatypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/unknown-mediatypes.html @@ -1796,7 +1796,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html @@ -1808,7 +1808,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/vp8-fmtp.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/vp8-fmtp.html @@ -1826,7 +1826,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate-postMessage.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate-postMessage.html @@ -1838,7 +1838,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html @@ -1850,7 +1850,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html @@ -1862,7 +1862,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html @@ -1874,7 +1874,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html @@ -1886,7 +1886,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html @@ -1898,7 +1898,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html @@ -1910,7 +1910,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html @@ -1922,7 +1922,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange-long.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange-long.https.html @@ -1934,7 +1934,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html @@ -1946,7 +1946,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html @@ -1958,7 +1958,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html @@ -1970,7 +1970,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html @@ -1982,7 +1982,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html @@ -1994,7 +1994,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send-blob-order.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send-blob-order.html @@ -2006,7 +2006,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html @@ -2018,7 +2018,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html @@ -2030,7 +2030,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-getRemoteCertificates.html @@ -2042,7 +2042,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html @@ -2054,7 +2054,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html @@ -2066,7 +2066,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html @@ -2078,7 +2078,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceConnectionState-candidate-pair.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceConnectionState-candidate-pair.https.html @@ -2090,7 +2090,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceTransport.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceTransport.html @@ -2102,7 +2102,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-SLD-SRD-timing.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-SLD-SRD-timing.https.html @@ -2114,7 +2114,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-add-track-no-deadlock.https.html @@ -2126,7 +2126,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html @@ -2138,7 +2138,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html @@ -2150,7 +2150,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html @@ -2162,7 +2162,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html @@ -2174,7 +2174,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html @@ -2186,7 +2186,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html @@ -2198,7 +2198,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-candidate-in-sdp.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-candidate-in-sdp.https.html @@ -2210,7 +2210,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-capture-video.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-capture-video.https.html @@ -2222,7 +2222,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html @@ -2234,7 +2234,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html @@ -2246,7 +2246,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html @@ -2258,7 +2258,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html @@ -2270,7 +2270,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html @@ -2282,7 +2282,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html @@ -2294,7 +2294,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html @@ -2306,7 +2306,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html @@ -2318,7 +2318,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html @@ -2330,7 +2330,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getTransceivers.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getTransceivers.html @@ -2342,7 +2342,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-helper-test.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-helper-test.html @@ -2354,7 +2354,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState-disconnected.https.html @@ -2366,7 +2366,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html @@ -2378,7 +2378,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html @@ -2390,7 +2390,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html @@ -2402,7 +2402,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html @@ -2414,7 +2414,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onicecandidateerror.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onicecandidateerror.https.html @@ -2426,7 +2426,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html @@ -2438,7 +2438,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html @@ -2450,7 +2450,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html @@ -2462,7 +2462,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html @@ -2474,7 +2474,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-perfect-negotiation-stress-glare-linear.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-perfect-negotiation-stress-glare-linear.https.html @@ -2486,7 +2486,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-perfect-negotiation-stress-glare.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-perfect-negotiation-stress-glare.https.html @@ -2498,7 +2498,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-perfect-negotiation.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-perfect-negotiation.https.html @@ -2510,7 +2510,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-plan-b-is-not-supported.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-plan-b-is-not-supported.html @@ -2522,7 +2522,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-relay-canvas.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-relay-canvas.https.html @@ -2534,7 +2534,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-remote-track-mute.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-remote-track-mute.https.html @@ -2546,7 +2546,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html @@ -2558,7 +2558,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce-onnegotiationneeded.https.html @@ -2570,7 +2570,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html @@ -2582,7 +2582,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html @@ -2594,7 +2594,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html @@ -2606,7 +2606,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html @@ -2618,7 +2618,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html @@ -2630,7 +2630,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html @@ -2642,7 +2642,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html @@ -2654,7 +2654,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html @@ -2666,7 +2666,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html @@ -2678,7 +2678,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-nomsid.html @@ -2690,7 +2690,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html @@ -2702,7 +2702,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html @@ -2714,7 +2714,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html @@ -2726,7 +2726,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html @@ -2738,7 +2738,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-simulcast.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-simulcast.https.html @@ -2750,7 +2750,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html @@ -2762,7 +2762,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html @@ -2774,7 +2774,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html @@ -2786,7 +2786,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html @@ -2796,9 +2796,9 @@ - + - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-videoDetectorTest.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-videoDetectorTest.html @@ -2810,7 +2810,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceErrorEvent.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceErrorEvent.html @@ -2822,7 +2822,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html @@ -2834,7 +2834,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html @@ -2846,7 +2846,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html @@ -2858,7 +2858,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-headerExtensions.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-headerExtensions.html @@ -2870,7 +2870,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html @@ -2882,7 +2882,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html @@ -2894,7 +2894,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html @@ -2906,7 +2906,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html @@ -2918,7 +2918,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html @@ -2930,7 +2930,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getStats.https.html @@ -2942,7 +2942,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getSynchronizationSources.https.html @@ -2954,7 +2954,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-encode-same-track-twice.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-encode-same-track-twice.https.html @@ -2966,7 +2966,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html @@ -2978,7 +2978,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getStats.https.html @@ -2990,7 +2990,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html @@ -3002,7 +3002,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setParameters.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setParameters.html @@ -3014,7 +3014,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html @@ -3026,7 +3026,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html @@ -3038,7 +3038,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender.https.html @@ -3050,7 +3050,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html @@ -3062,7 +3062,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html @@ -3074,7 +3074,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html @@ -3086,7 +3086,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html @@ -3098,7 +3098,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html @@ -3110,7 +3110,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html @@ -3122,7 +3122,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html @@ -3134,7 +3134,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html @@ -3146,7 +3146,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html @@ -3158,7 +3158,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html @@ -3170,7 +3170,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/getstats.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/getstats.html @@ -3182,7 +3182,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/historical.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html @@ -3194,7 +3194,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/no-media-call.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/no-media-call.html @@ -3206,7 +3206,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/promises-call.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/promises-call.html @@ -3218,7 +3218,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html @@ -3230,7 +3230,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simplecall-no-ssrcs.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simplecall-no-ssrcs.https.html @@ -3242,7 +3242,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simplecall.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simplecall.https.html @@ -3254,7 +3254,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-addStream.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-addStream.https.html @@ -3266,7 +3266,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html @@ -3278,7 +3278,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html @@ -3288,9 +3288,9 @@ - + - /opt/tct-webrtc-w3c-tests/webrtc/legacy/onaddstream.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/onaddstream.https.html @@ -3300,9 +3300,9 @@ - + - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/basic.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/basic.https.html @@ -3314,7 +3314,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/getStats.https.html @@ -3324,9 +3324,9 @@ - + - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/h264.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/h264.https.html @@ -3336,9 +3336,9 @@ - + - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/setParameters-active.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/setParameters-active.https.html @@ -3348,9 +3348,9 @@ - + - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/vp8.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/vp8.https.html @@ -3362,7 +3362,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/RTCPeerConnection-payloadTypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/RTCPeerConnection-payloadTypes.html @@ -3374,7 +3374,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html @@ -3386,7 +3386,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html @@ -3398,7 +3398,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html @@ -3410,7 +3410,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/dtls-fingerprint-validation.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-fingerprint-validation.html @@ -3422,7 +3422,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover-datachannel.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover-datachannel.html @@ -3434,7 +3434,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html @@ -3446,7 +3446,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html @@ -3458,7 +3458,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html @@ -3470,7 +3470,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/jsep-initial-offer.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/jsep-initial-offer.https.html @@ -3482,7 +3482,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html @@ -3494,7 +3494,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html @@ -3504,9 +3504,9 @@ - + - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-clockrate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-clockrate.html @@ -3518,7 +3518,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-demuxing.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-demuxing.html @@ -3530,7 +3530,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-extension-support.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-extension-support.html @@ -3542,7 +3542,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html @@ -3554,7 +3554,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/sctp-format.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sctp-format.html @@ -3566,7 +3566,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-answer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-answer.html @@ -3578,7 +3578,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-offer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-offer.html @@ -3590,7 +3590,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/split.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/split.https.html @@ -3602,7 +3602,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/unknown-mediatypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/unknown-mediatypes.html @@ -3614,7 +3614,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html @@ -3626,7 +3626,7 @@ - /opt/tct-webrtc-w3c-tests/webrtc/protocol/vp8-fmtp.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/vp8-fmtp.html diff --git a/common/tct-webrtc-w3c-tests/tests.xml b/common/tct-webrtc-w3c-tests/tests.xml index 21cc23baa..309a9e0f9 100755 --- a/common/tct-webrtc-w3c-tests/tests.xml +++ b/common/tct-webrtc-w3c-tests/tests.xml @@ -9,5037 +9,5037 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate-postMessage.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate-postMessage.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange-long.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange-long.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-getRemoteCertificates.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceConnectionState-candidate-pair.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceConnectionState-candidate-pair.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceTransport.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceTransport.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-SLD-SRD-timing.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-SLD-SRD-timing.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-add-track-no-deadlock.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-candidate-in-sdp.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-candidate-in-sdp.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=42 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=42 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=43 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=43 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=44 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=44 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=45 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=45 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=46 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=46 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=47 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=47 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getTransceivers.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getTransceivers.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-helper-test.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-helper-test.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState-disconnected.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=42 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=42 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=43 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=43 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=44 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=44 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=45 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=45 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=46 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=46 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=47 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=47 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=48 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=48 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=49 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=49 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=50 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=50 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=51 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=51 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=52 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=52 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=53 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=53 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=54 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=54 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=55 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=55 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=56 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=56 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=57 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=57 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=58 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=58 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=59 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=59 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=60 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=60 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=61 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=61 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=62 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=62 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=63 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=63 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=64 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=64 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=65 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=65 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=66 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=66 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=67 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=67 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=68 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=68 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=69 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=69 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=70 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=70 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=71 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=71 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onicecandidateerror.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onicecandidateerror.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce-onnegotiationneeded.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-nomsid.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=42 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=42 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=43 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=43 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=44 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=44 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-videoDetectorTest.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-videoDetectorTest.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceErrorEvent.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceErrorEvent.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=42 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=42 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-headerExtensions.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-headerExtensions.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-encode-same-track-twice.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-encode-same-track-twice.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=10&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=10&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setParameters.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setParameters.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/getstats.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/getstats.html - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/no-media-call.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/no-media-call.html - /opt/tct-webrtc-w3c-tests/webrtc/promises-call.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/promises-call.html - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/recvonly-transceiver-can-become-sendrecv.https.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/recvonly-transceiver-can-become-sendrecv.https.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/recvonly-transceiver-can-become-sendrecv.https.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/recvonly-transceiver-can-become-sendrecv.https.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/simplecall-no-ssrcs.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simplecall-no-ssrcs.https.html - /opt/tct-webrtc-w3c-tests/webrtc/simplecall.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simplecall.https.html - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/onaddstream.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/onaddstream.https.html - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/basic.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/basic.https.html - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/h264.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/h264.https.html - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/setParameters-active.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/setParameters-active.https.html - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/vp8.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/vp8.https.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/RTCPeerConnection-payloadTypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/RTCPeerConnection-payloadTypes.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/dtls-fingerprint-validation.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-fingerprint-validation.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/dtls-setup.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-setup.https.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover-datachannel.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover-datachannel.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/jsep-initial-offer.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/jsep-initial-offer.https.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-clockrate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-clockrate.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-demuxing.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-demuxing.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/sctp-format.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sctp-format.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/sdes-dont-dont-dont.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sdes-dont-dont-dont.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-answer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-answer.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-offer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-offer.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/split.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/split.https.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/unknown-mediatypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/unknown-mediatypes.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=3 @@ -5051,5053 +5051,5053 @@ - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate-postMessage.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate-postMessage.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html?total_num=15&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html?total_num=9&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html?total_num=41&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html?total_num=13&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html?total_num=13&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange-long.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange-long.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html?total_num=13&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html?total_num=20&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html?total_num=10&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html?total_num=10&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html?total_num=15&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html?total_num=15&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-getRemoteCertificates.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCError.html?total_num=23&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html?total_num=23&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html?total_num=18&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceConnectionState-candidate-pair.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceConnectionState-candidate-pair.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCIceTransport.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceTransport.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-SLD-SRD-timing.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-SLD-SRD-timing.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-add-track-no-deadlock.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html?total_num=22&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html?total_num=12&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html?total_num=12&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-candidate-in-sdp.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-candidate-in-sdp.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html?total_num=22&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=42 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=42 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=43 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=43 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=44 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=44 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=45 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=45 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=46 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=46 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=47 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html?total_num=47&locator_key=id&value=47 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html?total_num=14&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getTransceivers.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getTransceivers.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-helper-test.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-helper-test.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState-disconnected.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html?total_num=12&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=42 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=42 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=43 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=43 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=44 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=44 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=45 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=45 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=46 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=46 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=47 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=47 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=48 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=48 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=49 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=49 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=50 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=50 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=51 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=51 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=52 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=52 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=53 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=53 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=54 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=54 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=55 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=55 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=56 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=56 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=57 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=57 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=58 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=58 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=59 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=59 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=60 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=60 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=61 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=61 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=62 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=62 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=63 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=63 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=64 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=64 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=65 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=65 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=66 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=66 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=67 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=67 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=68 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=68 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=69 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=69 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=70 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=70 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=71 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html?total_num=71&locator_key=id&value=71 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onicecandidateerror.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onicecandidateerror.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html?total_num=16&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html?total_num=14&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce-onnegotiationneeded.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html?total_num=25&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html?total_num=10&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-nomsid.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html?total_num=9&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html?total_num=21&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html?total_num=12&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html?total_num=13&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=42 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=42 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=43 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=43 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=44 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html?total_num=44&locator_key=id&value=44 - + - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-videoDetectorTest.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-videoDetectorTest.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceErrorEvent.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceErrorEvent.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html?total_num=6&locator_key=id&value=6 - --> + - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=32 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=32 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=33 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=33 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=34 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=34 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=35 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=35 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=36 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=36 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=37 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=37 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=38 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=38 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=39 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=39 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=40 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=40 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=41 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=41 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=42 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html?total_num=42&locator_key=id&value=42 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-headerExtensions.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-headerExtensions.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-encode-same-track-twice.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-encode-same-track-twice.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=10&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=10&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=7 - + - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setParameters.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setParameters.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpSender.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender.https.html - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html?total_num=17&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html?total_num=10&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=19 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=19 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=20 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=20 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=21 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=21 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=22 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=22 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=23 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=23 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=24 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=24 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=25 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=25 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=26 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=26 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=27 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=27 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=28 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=28 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=29 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=29 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=30 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=30 - /opt/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=31 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html?total_num=31&locator_key=id&value=31 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html?total_num=5&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/getstats.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/getstats.html - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/historical.html?total_num=8&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/historical.html?total_num=8&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/no-media-call.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/no-media-call.html - + - /opt/tct-webrtc-w3c-tests/webrtc/promises-call.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/promises-call.html - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html?total_num=4&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/recvonly-transceiver-can-become-sendrecv.https.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/recvonly-transceiver-can-become-sendrecv.https.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/recvonly-transceiver-can-become-sendrecv.https.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/recvonly-transceiver-can-become-sendrecv.https.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/simplecall-no-ssrcs.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simplecall-no-ssrcs.https.html - /opt/tct-webrtc-w3c-tests/webrtc/simplecall.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simplecall.https.html - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=8 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=8 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=9 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=9 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=10 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=10 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=11 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=11 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=12 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=12 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=13 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=13 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=14 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=14 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=15 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=15 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=16 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=16 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=17 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=17 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=18 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html?total_num=18&locator_key=id&value=18 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html?total_num=4&locator_key=id&value=4 - + - /opt/tct-webrtc-w3c-tests/webrtc/legacy/onaddstream.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/legacy/onaddstream.https.html - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/basic.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/basic.https.html - + - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/h264.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/h264.https.html - + - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/setParameters-active.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/setParameters-active.https.html - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/vp8.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/vp8.https.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/RTCPeerConnection-payloadTypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/RTCPeerConnection-payloadTypes.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=7 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html?total_num=7&locator_key=id&value=7 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=4 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=5 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=5 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=6 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html?total_num=6&locator_key=id&value=6 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/dtls-fingerprint-validation.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-fingerprint-validation.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/dtls-setup.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-setup.https.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover-datachannel.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover-datachannel.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/handover.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/jsep-initial-offer.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/jsep-initial-offer.https.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html?total_num=4&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html?total_num=4&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html?total_num=4&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html?total_num=4&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html?total_num=4&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html?total_num=4&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html?total_num=4&locator_key=id&value=4 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html?total_num=4&locator_key=id&value=4 - + - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-clockrate.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-clockrate.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-demuxing.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-demuxing.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html?total_num=2&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html?total_num=2&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html?total_num=2&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html?total_num=2&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/sctp-format.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sctp-format.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/sdes-dont-dont-dont.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sdes-dont-dont-dont.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-answer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-answer.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-offer.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-offer.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/split.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/split.https.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/unknown-mediatypes.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/unknown-mediatypes.html - /opt/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=1 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=1 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=2 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=2 - /opt/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=3 + /opt/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html?total_num=3&locator_key=id&value=3 - /opt/tct-webrtc-w3c-tests/webrtc/simulcast/getStats.https.html + /opt/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/getStats.https.html diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCCertificate-postMessage.html b/common/tct-webrtc-w3c-tests/webrtc/RTCCertificate-postMessage.html deleted file mode 100755 index 1f6fe8a98..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCCertificate-postMessage.html +++ /dev/null @@ -1,62 +0,0 @@ - - -RTCCertificate persistent Tests - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html b/common/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html deleted file mode 100755 index df1ff7dc1..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCCertificate.html +++ /dev/null @@ -1,264 +0,0 @@ - - -RTCCertificate Tests - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html b/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html deleted file mode 100755 index 352d66d16..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-bundlePolicy.html +++ /dev/null @@ -1,128 +0,0 @@ - - -RTCConfiguration bundlePolicy - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html b/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html deleted file mode 100755 index 6a7c9eb01..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html b/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html deleted file mode 100755 index cad3f9a71..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceServers.html +++ /dev/null @@ -1,215 +0,0 @@ - - -RTCConfiguration iceServers - - - - \ No newline at end of file diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html b/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html deleted file mode 100755 index fc336d35d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-iceTransportPolicy.html +++ /dev/null @@ -1,105 +0,0 @@ - - -RTCConfiguration iceTransportPolicy - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html b/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html deleted file mode 100755 index 129bff780..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html +++ /dev/null @@ -1,196 +0,0 @@ - -RTCConfiguration rtcpMuxPolicy - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html deleted file mode 100755 index f63a1c1c9..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-insertDTMF.https.html +++ /dev/null @@ -1,176 +0,0 @@ - - -RTCDTMFSender.prototype.insertDTMF - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange-long.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange-long.https.html deleted file mode 100755 index 46cfe8dde..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange-long.https.html +++ /dev/null @@ -1,50 +0,0 @@ - - - -RTCDTMFSender.prototype.ontonechange (Long Timeout) - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html deleted file mode 100755 index f1fc74d90..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDTMFSender-ontonechange.https.html +++ /dev/null @@ -1,285 +0,0 @@ - - -RTCDTMFSender.prototype.ontonechange - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html deleted file mode 100755 index 65840a607..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-bufferedAmount.html +++ /dev/null @@ -1,207 +0,0 @@ - - - -RTCDataChannel.prototype.bufferedAmount - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html deleted file mode 100755 index 7da8a52a9..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-close.html +++ /dev/null @@ -1,180 +0,0 @@ - - - -RTCDataChannel.prototype.close - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html deleted file mode 100755 index 1475bc4d6..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-iceRestart.html +++ /dev/null @@ -1,76 +0,0 @@ - - - -RTCDataChannel interactions with ICE restart - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html deleted file mode 100755 index 39e33eb0c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-id.html +++ /dev/null @@ -1,345 +0,0 @@ - - -RTCDataChannel id attribute - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html deleted file mode 100755 index 03e14ea0b..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannel-send.html +++ /dev/null @@ -1,206 +0,0 @@ - - - -RTCDataChannel.prototype.send - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html deleted file mode 100755 index 96b5d20f2..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDataChannelEvent-constructor.html +++ /dev/null @@ -1,41 +0,0 @@ - - -RTCDataChannelEvent constructor - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html deleted file mode 100755 index a2530dd9c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html +++ /dev/null @@ -1,97 +0,0 @@ - - -RTCDtlsTransport.prototype.getRemoteCertificates - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html b/common/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html deleted file mode 100755 index ce4b77a2e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCDtlsTransport-state.html +++ /dev/null @@ -1,89 +0,0 @@ - - -RTCDtlsTransport - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCError.html b/common/tct-webrtc-w3c-tests/webrtc/RTCError.html deleted file mode 100755 index e9cda419d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCError.html +++ /dev/null @@ -1,89 +0,0 @@ - - -RTCError and RTCErrorInit - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html deleted file mode 100755 index 2249347bd..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCIceCandidate-constructor.html +++ /dev/null @@ -1,234 +0,0 @@ - -RTCIceCandidate constructor - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCIceConnectionState-candidate-pair.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCIceConnectionState-candidate-pair.https.html deleted file mode 100755 index 95907949a..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCIceConnectionState-candidate-pair.https.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -RTCIceConnectionState and RTCIceCandidatePair - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCIceTransport.html b/common/tct-webrtc-w3c-tests/webrtc/RTCIceTransport.html deleted file mode 100755 index c281e914b..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCIceTransport.html +++ /dev/null @@ -1,146 +0,0 @@ - - -RTCIceTransport - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-SLD-SRD-timing.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-SLD-SRD-timing.https.html deleted file mode 100755 index 6ed061304..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-SLD-SRD-timing.https.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html deleted file mode 100755 index 9e7e8190c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html +++ /dev/null @@ -1,31 +0,0 @@ - - -RTCPeerConnection addTrack does not deadlock - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html deleted file mode 100755 index 904df3a52..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html +++ /dev/null @@ -1,92 +0,0 @@ - - -Test RTCPeerConnection.prototype.addIceCandidate - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html deleted file mode 100755 index cd74e47d8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html deleted file mode 100755 index 0535cccb8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addIceCandidate.html +++ /dev/null @@ -1,473 +0,0 @@ - -Test RTCPeerConnection.prototype.addIceCandidate - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html deleted file mode 100755 index e65874b42..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTrack.https.html +++ /dev/null @@ -1,394 +0,0 @@ - - -RTCPeerConnection.prototype.addTrack - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html deleted file mode 100755 index 50ab5532d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-addTransceiver.https.html +++ /dev/null @@ -1,441 +0,0 @@ - - -RTCPeerConnection.prototype.addTransceiver - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html deleted file mode 100755 index df7789aa0..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - RTCPeerConnection canTrickleIceCandidates tests - - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-candidate-in-sdp.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-candidate-in-sdp.https.html deleted file mode 100755 index 8f12e6af9..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-candidate-in-sdp.https.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html deleted file mode 100755 index 148b61c30..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-connectionState.https.html +++ /dev/null @@ -1,291 +0,0 @@ - - -RTCPeerConnection.prototype.connectionState - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html deleted file mode 100755 index 3c0ab2375..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-constructor.html +++ /dev/null @@ -1,76 +0,0 @@ - - -RTCPeerConnection constructor - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html deleted file mode 100755 index c16e95f0f..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createAnswer.html +++ /dev/null @@ -1,28 +0,0 @@ - - -RTCPeerConnection.prototype.createAnswer - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html deleted file mode 100755 index b5f03acf8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createDataChannel.html +++ /dev/null @@ -1,700 +0,0 @@ - - - -RTCPeerConnection.prototype.createDataChannel - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html deleted file mode 100755 index 3c78e340f..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-createOffer.html +++ /dev/null @@ -1,100 +0,0 @@ - - -RTCPeerConnection.prototype.createOffer - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html deleted file mode 100755 index 3e2e6e78c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-description-attributes-timing.https.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html deleted file mode 100755 index a1ceed85c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html +++ /dev/null @@ -1,53 +0,0 @@ - - -RTCPeerConnection.prototype.iceGatheringState - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html deleted file mode 100755 index 752df84f3..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-generateCertificate.html +++ /dev/null @@ -1,120 +0,0 @@ - - -Test RTCPeerConnection.generateCertificate - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html deleted file mode 100755 index c989960d7..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getStats.https.html +++ /dev/null @@ -1,264 +0,0 @@ - - - -RTCPeerConnection.prototype.getStats - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getTransceivers.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getTransceivers.html deleted file mode 100755 index d114a5913..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-getTransceivers.html +++ /dev/null @@ -1,39 +0,0 @@ - - -RTCPeerConnection.prototype.getTransceivers - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-helper-test.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-helper-test.html deleted file mode 100755 index ad213e287..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-helper-test.html +++ /dev/null @@ -1,21 +0,0 @@ - - -RTCPeerConnection-helper tests - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html deleted file mode 100755 index ce865560c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -RTCPeerConnection.prototype.iceConnectionState - disconnection - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html deleted file mode 100755 index e6980bbe4..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html +++ /dev/null @@ -1,396 +0,0 @@ - - - -RTCPeerConnection.prototype.iceConnectionState - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html deleted file mode 100755 index 19eea153d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-iceGatheringState.html +++ /dev/null @@ -1,244 +0,0 @@ - - -RTCPeerConnection.prototype.iceGatheringState - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html deleted file mode 100755 index 514782d4e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-mandatory-getStats.https.html +++ /dev/null @@ -1,260 +0,0 @@ - - - -Mandatory-to-implement stats compliance (a subset of webrtc-stats) - - - - - - \ No newline at end of file diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html deleted file mode 100755 index f491d6c3f..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ondatachannel.html +++ /dev/null @@ -1,374 +0,0 @@ - - - -RTCPeerConnection.prototype.ondatachannel - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onicecandidateerror.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onicecandidateerror.https.html deleted file mode 100755 index 03d54c8b9..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onicecandidateerror.https.html +++ /dev/null @@ -1,38 +0,0 @@ - - - -RTCPeerConnection.prototype.onicecandidateerror - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html deleted file mode 100755 index 6b8313aa3..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html +++ /dev/null @@ -1,461 +0,0 @@ - - -Test RTCPeerConnection.prototype.onnegotiationneeded - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html deleted file mode 100755 index 7808aac35..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html +++ /dev/null @@ -1,71 +0,0 @@ - - -RTCPeerConnection onsignalingstatechanged - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html deleted file mode 100755 index ebf24173a..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-ontrack.https.html +++ /dev/null @@ -1,258 +0,0 @@ - - -RTCPeerConnection.prototype.ontrack - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html deleted file mode 100755 index cc2a92152..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-operations.https.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html deleted file mode 100755 index fbb545118..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-removeTrack.https.html +++ /dev/null @@ -1,338 +0,0 @@ - - -RTCPeerConnection.prototype.removeTrack - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html deleted file mode 100755 index 88fbda8b0..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html deleted file mode 100755 index 4ec2c639d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-restartIce.https.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html deleted file mode 100755 index fac9d476e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html +++ /dev/null @@ -1,295 +0,0 @@ - - -RTCPeerConnection Set Session Description - Transceiver Tests - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html deleted file mode 100755 index 5928f6a74..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html +++ /dev/null @@ -1,205 +0,0 @@ - - -RTCPeerConnection.prototype.setLocalDescription - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html deleted file mode 100755 index 10f194e79..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html +++ /dev/null @@ -1,212 +0,0 @@ - - -RTCPeerConnection.prototype.setLocalDescription - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html deleted file mode 100755 index e4a4a634f..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html deleted file mode 100755 index 9fd510156..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html +++ /dev/null @@ -1,156 +0,0 @@ - - -RTCPeerConnection.prototype.setLocalDescription pranswer - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html deleted file mode 100755 index 4a6a427ca..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html +++ /dev/null @@ -1,159 +0,0 @@ - - -RTCPeerConnection.prototype.setLocalDescription rollback - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html deleted file mode 100755 index 8ad07eb88..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setLocalDescription.html +++ /dev/null @@ -1,152 +0,0 @@ - - -RTCPeerConnection.prototype.setLocalDescription - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html deleted file mode 100755 index 0265d4480..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html +++ /dev/null @@ -1,123 +0,0 @@ - - -RTCPeerConnection.prototype.setRemoteDescription - answer - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html deleted file mode 100755 index 8fed355d3..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html +++ /dev/null @@ -1,40 +0,0 @@ - - -RTCPeerConnection.prototype.setRemoteDescription - legacy streams without a=msid lines - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html deleted file mode 100755 index f4e7ccde8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html +++ /dev/null @@ -1,239 +0,0 @@ - - -RTCPeerConnection.prototype.setRemoteDescription - offer - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html deleted file mode 100755 index 98f6eae15..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html +++ /dev/null @@ -1,166 +0,0 @@ - - -RTCPeerConnection.prototype.setRemoteDescription pranswer - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html deleted file mode 100755 index 2894cbbbd..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html +++ /dev/null @@ -1,115 +0,0 @@ - - -RTCPeerConnection.prototype.setRemoteDescription - replaceTrack - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html deleted file mode 100755 index 60f21b59e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html +++ /dev/null @@ -1,595 +0,0 @@ - - -RTCPeerConnection.prototype.setRemoteDescription rollback - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html deleted file mode 100755 index 3876523ae..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html +++ /dev/null @@ -1,316 +0,0 @@ - - - -RTCPeerConnection.prototype.setRemoteDescription - add/remove remote tracks - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html deleted file mode 100755 index 37164b856..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-setRemoteDescription.html +++ /dev/null @@ -1,158 +0,0 @@ - - -RTCPeerConnection.prototype.setRemoteDescription - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html deleted file mode 100755 index 43759224e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-track-stats.https.html +++ /dev/null @@ -1,490 +0,0 @@ - - - -RTCPeerConnection.prototype.getStats - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html deleted file mode 100755 index 22f878051..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-transceivers.https.html +++ /dev/null @@ -1,508 +0,0 @@ - - - -RTCPeerConnection-transceivers.https.html - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-videoDetectorTest.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-videoDetectorTest.html deleted file mode 100755 index b35866be8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnection-videoDetectorTest.html +++ /dev/null @@ -1,84 +0,0 @@ - - - -RTCPeerConnection Video detector test - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceErrorEvent.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceErrorEvent.html deleted file mode 100755 index 3dfa61d1c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceErrorEvent.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html deleted file mode 100755 index b97e36f4e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html deleted file mode 100755 index 5edc4d89d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-codecs.html +++ /dev/null @@ -1,206 +0,0 @@ - - -RTCRtpParameters codecs - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html deleted file mode 100755 index fe38af873..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-encodings.html +++ /dev/null @@ -1,517 +0,0 @@ - - -RTCRtpParameters encodings - - - - - \ No newline at end of file diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-headerExtensions.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-headerExtensions.html deleted file mode 100755 index 655a3bd26..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-headerExtensions.html +++ /dev/null @@ -1,74 +0,0 @@ - - -RTCRtpParameters headerExtensions - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html deleted file mode 100755 index 4c42d7e7a..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-rtcp.html +++ /dev/null @@ -1,104 +0,0 @@ - - -RTCRtpParameters rtcp - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html deleted file mode 100755 index fc515f58d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpParameters-transactionId.html +++ /dev/null @@ -1,151 +0,0 @@ - - -RTCRtpParameters transactionId - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html deleted file mode 100755 index cdc38017d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getCapabilities.html +++ /dev/null @@ -1,39 +0,0 @@ - - -RTCRtpReceiver.getCapabilities - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html deleted file mode 100755 index ec386c1da..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html +++ /dev/null @@ -1,35 +0,0 @@ - - -RTCRtpReceiver.prototype.getContributingSources - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html deleted file mode 100755 index 9e5f9a6a8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpReceiver-getParameters.html +++ /dev/null @@ -1,58 +0,0 @@ - - -RTCRtpReceiver.prototype.getParameters - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-encode-same-track-twice.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-encode-same-track-twice.https.html deleted file mode 100755 index 2366fb94f..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-encode-same-track-twice.https.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html deleted file mode 100755 index 320da7cea..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-getCapabilities.html +++ /dev/null @@ -1,45 +0,0 @@ - - -RTCRtpSender.getCapabilities - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html deleted file mode 100755 index c7e737cba..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-replaceTrack.https.html +++ /dev/null @@ -1,267 +0,0 @@ - - - -RTCRtpSender.prototype.replaceTrack - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setParameters.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setParameters.html deleted file mode 100755 index 61519ce86..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setParameters.html +++ /dev/null @@ -1,30 +0,0 @@ - - -RTCRtpSender.prototype.setParameters - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html deleted file mode 100755 index 0f6ddee84..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-setStreams.https.html +++ /dev/null @@ -1,128 +0,0 @@ - - -RTCRtpSender.prototype.setStreams - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html deleted file mode 100755 index 81bf694c5..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender-transport.https.html +++ /dev/null @@ -1,152 +0,0 @@ - - - -RTCRtpSender.transport - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender.https.html deleted file mode 100755 index d0e05267c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpSender.https.html +++ /dev/null @@ -1,20 +0,0 @@ - - -RTCRtpSender - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html deleted file mode 100755 index 6eedd23cb..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-direction.html +++ /dev/null @@ -1,94 +0,0 @@ - - -RTCRtpTransceiver.prototype.direction - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html deleted file mode 100755 index 945cf53ca..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html +++ /dev/null @@ -1,275 +0,0 @@ - - -RTCRtpTransceiver.prototype.setCodecPreferences - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html deleted file mode 100755 index 62b95104e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stop.html +++ /dev/null @@ -1,138 +0,0 @@ - - -RTCRtpTransceiver.prototype.stop - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html deleted file mode 100755 index 3a66118b0..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver-stopping.https.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html b/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html deleted file mode 100755 index 076c80547..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCRtpTransceiver.https.html +++ /dev/null @@ -1,2316 +0,0 @@ - - - -RTCRtpTransceiver - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html deleted file mode 100755 index 818d0e0ce..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-constructor.html +++ /dev/null @@ -1,125 +0,0 @@ - - -RTCSctpTransport constructor - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html b/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html deleted file mode 100755 index 93bb78b29..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-events.html +++ /dev/null @@ -1,55 +0,0 @@ - - -RTCIceTransport - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html b/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html deleted file mode 100755 index 79751cec6..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxChannels.html +++ /dev/null @@ -1,49 +0,0 @@ - - -RTCSctpTransport.prototype.maxChannels - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html b/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html deleted file mode 100755 index 6d87ca058..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCSctpTransport-maxMessageSize.html +++ /dev/null @@ -1,206 +0,0 @@ - - -RTCSctpTransport.prototype.maxMessageSize - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html deleted file mode 100755 index 5a3371890..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-constructor.html +++ /dev/null @@ -1,159 +0,0 @@ - - -RTCTrackEvent constructor - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html b/common/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html deleted file mode 100755 index 4c0ef6384..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RTCTrackEvent-fire.html +++ /dev/null @@ -1,152 +0,0 @@ - - -Change of msid in remote description should trigger related track events - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/RollbackEvents.https.html b/common/tct-webrtc-w3c-tests/webrtc/RollbackEvents.https.html deleted file mode 100755 index 98e5f4052..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/RollbackEvents.https.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/coverage/RTCDTMFSender.txt b/common/tct-webrtc-w3c-tests/webrtc/coverage/RTCDTMFSender.txt deleted file mode 100755 index aa3002132..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/coverage/RTCDTMFSender.txt +++ /dev/null @@ -1,122 +0,0 @@ -Coverage is based on the following editor draft: -https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html - -7. insertDTMF - - [Trivial] - - The tones parameter is treated as a series of characters. - - [RTCDTMFSender-insertDTMF] - - The characters 0 through 9, A through D, #, and * generate the associated - DTMF tones. - - [RTCDTMFSender-insertDTMF] - - The characters a to d MUST be normalized to uppercase on entry and are equivalent - to A to D. - - [RTCDTMFSender-insertDTMF] - - As noted in [RTCWEB-AUDIO] Section 3, support for the characters 0 through 9, - A through D, #, and * are required. - - [RTCDTMFSender-insertDTMF] - - The character ',' MUST be supported, and indicates a delay of 2 seconds before - processing the next character in the tones parameter. - - [RTCDTMFSender-insertDTMF] - - All other characters (and only those other characters) MUST - be considered unrecognized. - - [Trivial] - - The duration parameter indicates the duration in ms to use for each character passed - in the tones parameters. - - [RTCDTMFSender-ontonechange] - - The duration cannot be more than 6000 ms or less than 40 ms. - - [RTCDTMFSender-ontonechange] - - The default duration is 100 ms for each tone. - - [RTCDTMFSender-ontonechange] - - The interToneGap parameter indicates the gap between tones in ms. The user agent - clamps it to at least 30 ms. The default value is 70 ms. - - [Untestable] - - The browser MAY increase the duration and interToneGap times to cause the times - that DTMF start and stop to align with the boundaries of RTP packets but it MUST - not increase either of them by more than the duration of a single RTP audio packet. - - [Trivial] - When the insertDTMF() method is invoked, the user agent MUST run the following steps: - - [Trivial] - 1. let sender be the RTCRtpSender used to send DTMF. - - [Trivial] - 2. Let transceiver be the RTCRtpTransceiver object associated with sender. - - [RTCDTMFSender-insertDTMF] - 3. If transceiver.stopped is true, throw an InvalidStateError. - - [RTCDTMFSender-insertDTMF] - 4. If transceiver.currentDirection is recvonly or inactive, throw an - InvalidStateError. - - [Trivial] - 5. Let tones be the method's first argument. - - [RTCDTMFSender-insertDTMF] - 6. If tones contains any unrecognized characters, throw an InvalidCharacterError. - - [RTCDTMFSender-insertDTMF] - 7. Set the object's toneBuffer attribute to tones. - - [RTCDTMFSender-ontonechange] - 8. If the value of the duration parameter is less than 40, set it to 40. - - [RTCDTMFSender-ontonechange-long] - If, on the other hand, the value is greater than 6000, set it to 6000. - - [RTCDTMFSender-ontonechange] - 9. If the value of the interToneGap parameter is less than 30, set it to 30. - - [RTCDTMFSender-ontonechange] - 10. If toneBuffer is an empty string, abort these steps. - - [RTCDTMFSender-ontonechange] - 11. If a Playout task is scheduled to be run; abort these steps; - - [RTCDTMFSender-ontonechange] - otherwise queue a task that runs the following steps (Playout task): - - [RTCDTMFSender-ontonechange] - 1. If transceiver.stopped is true, abort these steps. - - [RTCDTMFSender-ontonechange] - 2. If transceiver.currentDirection is recvonly or inactive, abort these steps. - - [RTCDTMFSender-ontonechange] - 3. If toneBuffer is an empty string, fire an event named tonechange with an - empty string at the RTCDTMFSender object and abort these steps. - - [RTCDTMFSender-ontonechange] - 4. Remove the first character from toneBuffer and let that character be tone. - - [Untestable] - 5. Start playout of tone for duration ms on the associated RTP media stream, - using the appropriate codec. - - [RTCDTMFSender-ontonechange] - 6. Queue a task to be executed in duration + interToneGap ms from now that - runs the steps labelled Playout task. - - [RTCDTMFSender-ontonechange] - 7. Fire an event named tonechange with a string consisting of tone at the - RTCDTMFSender object. - -Coverage Report - - Tested 31 - Not Tested 0 - Untestable 1 - - Total 32 diff --git a/common/tct-webrtc-w3c-tests/webrtc/coverage/identity.txt b/common/tct-webrtc-w3c-tests/webrtc/coverage/identity.txt deleted file mode 100755 index 0d1bcca7e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/coverage/identity.txt +++ /dev/null @@ -1,220 +0,0 @@ -Coverage is based on the following editor draft: -https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html - -9.3 Requesting Identity Assertions - - [Trivial] - The identity assertion request process is triggered by a call to createOffer, - createAnswer, or getIdentityAssertion. When these calls are invoked and an - identity provider has been set, the following steps are executed: - - [RTCPeerConnection-getIdentityAssertion] - 1. The RTCPeerConnection instantiates an IdP as described in Identity Provider - Selection and Registering an IdP Proxy. If the IdP cannot be loaded, instantiated, - or the IdP proxy is not registered, this process fails. - - [RTCPeerConnection-getIdentityAssertion] - 2. The RTCPeerConnection invokes the generateAssertion method on the - RTCIdentityProvider methods registered by the IdP. - - [RTCPeerConnection-getIdentityAssertion] - The RTCPeerConnection generates the contents parameter to this method as - described in [RTCWEB-SECURITY-ARCH]. The value of contents includes the - fingerprint of the certificate that was selected or generated during the - construction of the RTCPeerConnection. The origin parameter contains the - origin of the script that calls the RTCPeerConnection method that triggers - this behavior. The usernameHint value is the same value that is provided - to setIdentityProvider, if any such value was provided. - - [RTCPeerConnection-getIdentityAssertion] - 3. The IdP proxy returns a Promise to the RTCPeerConnection. The IdP proxy is - expected to generate the identity assertion asynchronously. - - [RTCPeerConnection-getIdentityAssertion] - If the user has been authenticated by the IdP, and the IdP is able to generate - an identity assertion, the IdP resolves the promise with an identity assertion - in the form of an RTCIdentityAssertionResult . - - [RTCPeerConnection-getIdentityAssertion] - This step depends entirely on the IdP. The methods by which an IdP authenticates - users or generates assertions is not specified, though they could involve - interacting with the IdP server or other servers. - - [RTCPeerConnection-getIdentityAssertion] - 4. If the IdP proxy produces an error or returns a promise that does not resolve - to a valid RTCIdentityValidationResult (see 9.5 IdP Error Handling), then - identity validation fails. - - [Untestable] - 5. The RTCPeerConnection MAY store the identity assertion for use with future - offers or answers. If a fresh identity assertion is needed for any reason, - applications can create a new RTCPeerConnection. - - [RTCPeerConnection-getIdentityAssertion] - 6. If the identity request was triggered by a createOffer() or createAnswer(), - then the assertion is converted to a JSON string, base64-encoded and inserted - into an a=identity attribute in the session description. - - [RTCPeerConnection-getIdentityAssertion] - If assertion generation fails, then the promise for the corresponding function call - is rejected with a newly created OperationError. - -9.3.1 User Login Procedure - [RTCPeerConnection-getIdentityAssertion] - An IdP MAY reject an attempt to generate an identity assertion if it is unable to - verify that a user is authenticated. This might be due to the IdP not having the - necessary authentication information available to it (such as cookies). - - [RTCPeerConnection-getIdentityAssertion] - Rejecting the promise returned by generateAssertion will cause the error to propagate - to the application. Login errors are indicated by rejecting the promise with an RTCError - with errorDetail set to "idp-need-login". - - [RTCPeerConnection-getIdentityAssertion] - The URL to login at will be passed to the application in the idpLoginUrl attribute of - the RTCPeerConnection. - - [Out of Scope] - An application can load the login URL in an IFRAME or popup window; the resulting page - then SHOULD provide the user with an opportunity to enter any information necessary to - complete the authorization process. - - [Out of Scope] - Once the authorization process is complete, the page loaded in the IFRAME or popup sends - a message using postMessage [webmessaging] to the page that loaded it (through the - window.opener attribute for popups, or through window.parent for pages loaded in an IFRAME). - The message MUST consist of the DOMString "LOGINDONE". This message informs the application - that another attempt at generating an identity assertion is likely to be successful. - -9.4. Verifying Identity Assertions - The identity assertion request process involves the following asynchronous steps: - - [TODO] - 1. The RTCPeerConnection awaits any prior identity validation. Only one identity - validation can run at a time for an RTCPeerConnection. This can happen because - the resolution of setRemoteDescription is not blocked by identity validation - unless there is a target peer identity. - - [RTCPeerConnection-peerIdentity] - 2. The RTCPeerConnection loads the identity assertion from the session description - and decodes the base64 value, then parses the resulting JSON. The idp parameter - of the resulting dictionary contains a domain and an optional protocol value - that identifies the IdP, as described in [RTCWEB-SECURITY-ARCH]. - - [RTCPeerConnection-peerIdentity] - 3. The RTCPeerConnection instantiates the identified IdP as described in 9.1.1 - Identity Provider Selection and 9.2 Registering an IdP Proxy. If the IdP - cannot be loaded, instantiated or the IdP proxy is not registered, this - process fails. - - [RTCPeerConnection-peerIdentity] - 4. The RTCPeerConnection invokes the validateAssertion method registered by the IdP. - - [RTCPeerConnection-peerIdentity] - The assertion parameter is taken from the decoded identity assertion. The origin - parameter contains the origin of the script that calls the RTCPeerConnection - method that triggers this behavior. - - [RTCPeerConnection-peerIdentity] - 5. The IdP proxy returns a promise and performs the validation process asynchronously. - - [Out of Scope] - The IdP proxy verifies the identity assertion using whatever means necessary. - Depending on the authentication protocol this could involve interacting with the - IdP server. - - [RTCPeerConnection-peerIdentity] - 6. If the IdP proxy produces an error or returns a promise that does not resolve - to a valid RTCIdentityValidationResult (see 9.5 IdP Error Handling), then - identity validation fails. - - [RTCPeerConnection-peerIdentity] - 7. Once the assertion is successfully verified, the IdP proxy resolves the promise - with an RTCIdentityValidationResult containing the validated identity and the - original contents that are the payload of the assertion. - - [RTCPeerConnection-peerIdentity] - 8. The RTCPeerConnection decodes the contents and validates that it contains a - fingerprint value for every a=fingerprint attribute in the session description. - This ensures that the certificate used by the remote peer for communications - is covered by the identity assertion. - - [RTCPeerConnection-peerIdentity] - 9. The RTCPeerConnection validates that the domain portion of the identity matches - the domain of the IdP as described in [RTCWEB-SECURITY-ARCH]. If this check fails - then the identity validation fails. - - [RTCPeerConnection-peerIdentity] - 10. The RTCPeerConnection resolves the peerIdentity attribute with a new instance - of RTCIdentityAssertion that includes the IdP domain and peer identity. - - [Out of Scope] - 11. The user agent MAY display identity information to a user in its UI. Any user - identity information that is displayed in this fashion MUST use a mechanism that - cannot be spoofed by content. - - [RTCPeerConnection-peerIdentity] - If identity validation fails, the peerIdentity promise is rejected with a newly - created OperationError. - - [RTCPeerConnection-peerIdentity] - If identity validation fails and there is a target peer identity for the - RTCPeerConnection, the promise returned by setRemoteDescription MUST be rejected - with the same DOMException. - -9.5. IdP Error Handling - [RTCPeerConnection-getIdentityAssertion] - - A RTCPeerConnection might be configured with an identity provider, but loading of - the IdP URI fails. Any procedure that attempts to invoke such an identity provider - and cannot load the URI fails with an RTCError with errorDetail set to - "idp-load-failure" and the httpRequestStatusCode attribute of the error set to the - HTTP status code of the response. - - [Untestable] - - If the IdP loads fails due to the TLS certificate used for the HTTPS connection not - being trusted, it fails with an RTCError with errorDetail set to "idp-tls-failure". - This typically happens when the IdP uses certificate pinning and an intermediary - such as an enterprise firewall has intercepted the TLS connection. - - [RTCPeerConnection-getIdentityAssertion] - - If the script loaded from the identity provider is not valid JavaScript or does not - implement the correct interfaces, it causes an IdP failure with an RTCError with - errorDetail set to "idp-bad-script-failure". - - [TODO] - - An apparently valid identity provider might fail in several ways. - - If the IdP token has expired, then the IdP MUST fail with an RTCError with - errorDetail set to "idp-token-expired". - - If the IdP token is not valid, then the IdP MUST fail with an RTCError with - errorDetail set to "idp-token-invalid". - - [Untestable] - - The user agent SHOULD limit the time that it allows for an IdP to 15 seconds. - This includes both the loading of the IdP proxy and the identity assertion - generation or validation. Failure to do so potentially causes the corresponding - operation to take an indefinite amount of time. This timer can be cancelled when - the IdP proxy produces a response. Expiration of this timer cases an IdP failure - with an RTCError with errorDetail set to "idp-timeout". - - [RTCPeerConnection-getIdentityAssertion] - - If the identity provider requires the user to login, the operation will fail - RTCError with errorDetail set to "idp-need-login" and the idpLoginUrl attribute - of the error set to the URL that can be used to login. - - [RTCPeerConnection-peerIdentity] - - Even when the IdP proxy produces a positive result, the procedure that uses this - information might still fail. Additional validation of a RTCIdentityValidationResult - value is still necessary. The procedure for validation of identity assertions - describes additional steps that are required to successfully validate the output - of the IdP proxy. - - -Coverage Report - - Tested 29 - Not Tested 2 - Untestable 4 - - Total 35 diff --git a/common/tct-webrtc-w3c-tests/webrtc/coverage/set-session-description.txt b/common/tct-webrtc-w3c-tests/webrtc/coverage/set-session-description.txt deleted file mode 100755 index f2bb42270..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/coverage/set-session-description.txt +++ /dev/null @@ -1,240 +0,0 @@ -Coverage Report is based on the following editor draft: -https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html - -4.3.1.6 Set the RTCSessionSessionDescription - - [Trivial] - 1. Let p be a new promise. - - [Trivial] - 2. In parallel, start the process to apply description as described in [JSEP] - (section 5.5. and section 5.6.). - - [Trivial] - 1. If the process to apply description fails for any reason, then user agent - MUST queue a task that runs the following steps: - - [Untestable] - 1. If connection's [[IsClosed]] slot is true, then abort these steps. - - [Untestable] - 2. If elements of the SDP were modified, then reject p with a newly created - InvalidModificationError and abort these steps. - - [RTCPeerConnection-setLocalDescription-answer] - [RTCPeerConnection-setRemoteDescription-offer] - [RTCPeerConnection-setRemoteDescription-answer] - 3. If the description's type is invalid for the current signaling state of - connection as described in [JSEP] (section 5.5. and section 5.6.), then - reject p with a newly created InvalidStateError and abort these steps. - - [RTCPeerConnection-setRemoteDescription-offer] - 4. If the content of description is not valid SDP syntax, then reject p - with an RTCError (with errorDetail set to "sdp-syntax-error" and the - sdpLineNumber attribute set to the line number in the SDP where the - syntax error was detected) and abort these steps. - - [Untestable] - 5. If the content of description is invalid, then reject p with a newly - created InvalidAccessError and abort these steps. - - [Untestable] - 6. For all other errors, for example if description cannot be applied at - the media layer, reject p with a newly created OperationError. - - [Trivial] - 2. If description is applied successfully, the user agent MUST queue a task - that runs the following steps: - - [Untestable] - 1. If connection's [[isClosed]] slot is true, then abort these steps. - - [RTCPeerConnection-setLocalDescription] - 2. If description is set as a local description, then run one of the - following steps: - - [RTCPeerConnection-setLocalDescription-offer] - - If description is of type "offer", set connection.pendingLocalDescription - to description and signaling state to have-local-offer. - - [RTCPeerConnection-setLocalDescription-answer] - - If description is of type "answer", then this completes an offer answer - negotiation. - - Set connection's currentLocalDescription to description and - currentRemoteDescription to the value of pendingRemoteDescription. - - Set both pendingRemoteDescription and pendingLocalDescription to null. - Finally set connection's signaling state to stable - - [RTCPeerConnection-setLocalDescription-rollback] - - If description is of type "rollback", then this is a rollback. Set - connection.pendingLocalDescription to null and signaling state to stable. - - [RTCPeerConnection-setLocalDescription-pranswer] - - If description is of type "pranswer", then set - connection.pendingLocalDescription to description and signaling state to - have-local-pranswer. - - [RTCPeerConnection-setRemoteDescription] - 3. Otherwise, if description is set as a remote description, then run one of the - following steps: - - [RTCPeerConnection-setRemoteDescription-offer] - - If description is of type "offer", set connection.pendingRemoteDescription - attribute to description and signaling state to have-remote-offer. - - [RTCPeerConnection-setRemoteDescription-answer] - - If description is of type "answer", then this completes an offer answer - negotiation. - - Set connection's currentRemoteDescription to description and - currentLocalDescription to the value of pendingLocalDescription. - - Set both pendingRemoteDescription and pendingLocalDescription to null. - - Finally setconnection's signaling state to stable - - [RTCPeerConnection-setRemoteDescription-rollback] - - If description is of type "rollback", then this is a rollback. - Set connection.pendingRemoteDescription to null and signaling state to stable. - - [RTCPeerConnection-setRemoteDescription-rollback] - - If description is of type "pranswer", then set - connection.pendingRemoteDescription to description and signaling state - to have-remote-pranswer. - - [RTCPeerConnection-setLocalDescription] - [RTCPeerConnection-setRemoteDescription] - 4. If connection's signaling state changed above, fire a simple event named - signalingstatechange at connection. - - [TODO] - 5. If description is of type "answer", and it initiates the closure of an existing - SCTP association, as defined in [SCTP-SDP], Sections 10.3 and 10.4, set the value - of connection's [[sctpTransport]] internal slot to null. - - [RTCSctpTransport] - 6. If description is of type "answer" or "pranswer", then run the following steps: - - [RTCSctpTransport] - 1. If description initiates the establishment of a new SCTP association, - as defined in [SCTP-SDP], Sections 10.3 and 10.4, set the value of connection's - [[sctpTransport]] internal slot to a newly created RTCSctpTransport. - - [TODO] - 2. If description negotiates the DTLS role of the SCTP transport, and there is an - RTCDataChannel with a null id, then generate an ID according to - [RTCWEB-DATA-PROTOCOL]. - - [Untestable] - If no available ID could be generated, then run the following steps: - - [Untestable] - 1. Let channel be the RTCDataChannel object for which an ID could not be - generated. - - [Untestable] - 2. Set channel's readyState attribute to closed. - - [Untestable] - 3. Fire an event named error with a ResourceInUse exception at channel. - - [Untestable] - 4. Fire a simple event named close at channel. - - [TODO RTCPeerConnection-setDescription-transceiver] - 7. If description is set as a local description, then run the following steps for - each media description in description that is not yet associated with an - RTCRtpTransceiver object: - - [TODO RTCPeerConnection-setDescription-transceiver] - 1. Let transceiver be the RTCRtpTransceiver used to create the media - description. - - [TODO RTCPeerConnection-setDescription-transceiver] - 2. Set transceiver's mid value to the mid of the corresponding media - description. - - [RTCPeerConnection-ontrack] - 8. If description is set as a remote description, then run the following steps - for each media description in description: - - [TODO RTCPeerConnection-setDescription-transceiver] - 1. As described by [JSEP] (section 5.9.), attempt to find an existing - RTCRtpTransceiver object, transceiver, to represent the media description. - - [RTCPeerConnection-ontrack] - 2. If no suitable transceiver is found (transceiver is unset), run the following - steps: - - [RTCPeerConnection-ontrack] - 1. Create an RTCRtpSender, sender, from the media description. - - [RTCPeerConnection-ontrack] - 2. Create an RTCRtpReceiver, receiver, from the media description. - - [RTCPeerConnection-ontrack] - 3. Create an RTCRtpTransceiver with sender, receiver and direction, and let - transceiver be the result. - - [RTCPeerConnection-ontrack] - 3. Set transceiver's mid value to the mid of the corresponding media description. - If the media description has no MID, and transceiver's mid is unset, generate - a random value as described in [JSEP] (section 5.9.). - - [RTCPeerConnection-ontrack] - 4. If the direction of the media description is sendrecv or sendonly, and - transceiver.receiver.track has not yet been fired in a track event, process - the remote track for the media description, given transceiver. - - [TODO RTCPeerConnection-setDescription-transceiver] - 5. If the media description is rejected, and transceiver is not already stopped, - stop the RTCRtpTransceiver transceiver. - - - [TODO RTCPeerConnection-setDescription-transceiver] - 9. If description is of type "rollback", then run the following steps: - - [TODO RTCPeerConnection-setDescription-transceiver] - 1. If the mid value of an RTCRtpTransceiver was set to a non-null value by - the RTCSessionDescription that is being rolled back, set the mid value - of that transceiver to null, as described by [JSEP] (section 4.1.8.2.). - - [TODO RTCPeerConnection-setDescription-transceiver] - 2. If an RTCRtpTransceiver was created by applying the RTCSessionDescription - that is being rolled back, and a track has not been attached to it via - addTrack, remove that transceiver from connection's set of transceivers, - as described by [JSEP] (section 4.1.8.2.). - - [TODO RTCPeerConnection-setDescription-transceiver] - 3. Restore the value of connection's [[SctpTransport]] internal slot to its - value at the last stable signaling state. - - [RTCPeerConnection-onnegotiationneeded] - 10. If connection's signaling state is now stable, update the negotiation-needed - flag. If connection's [[NegotiationNeeded]] slot was true both before and after - this update, queue a task that runs the following steps: - - [Untestable] - 1. If connection's [[IsClosed]] slot is true, abort these steps. - - [RTCPeerConnection-onnegotiationneeded] - 2. If connection's [[NegotiationNeeded]] slot is false, abort these steps. - - [RTCPeerConnection-onnegotiationneeded] - 3. Fire a simple event named negotiationneeded at connection. - - [Trivial] - 11. Resolve p with undefined. - - [Trivial] - 3. Return p. - - -Coverage Report - - Tested 35 - Not Tested 15 - Untestable 8 - Total 58 diff --git a/common/tct-webrtc-w3c-tests/webrtc/getstats.html b/common/tct-webrtc-w3c-tests/webrtc/getstats.html deleted file mode 100755 index 2a9c53c68..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/getstats.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - RTCPeerConnection GetStats - - -
-

Retrieved stats info

-
-  
-  
-
-
- - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/historical.html b/common/tct-webrtc-w3c-tests/webrtc/historical.html deleted file mode 100755 index 9fa4948a1..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/historical.html +++ /dev/null @@ -1,51 +0,0 @@ - -Historical WebRTC features - - -
- diff --git a/common/tct-webrtc-w3c-tests/webrtc/legacy/README.txt b/common/tct-webrtc-w3c-tests/webrtc/legacy/README.txt deleted file mode 100755 index 8adbf6aa1..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/legacy/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains files that test for behavior relevant to webrtc, -particularly defined in https://w3c.github.io/webrtc-pc/#legacy-interface-extensions diff --git a/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-addStream.https.html b/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-addStream.https.html deleted file mode 100755 index cc2935adc..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-addStream.https.html +++ /dev/null @@ -1,74 +0,0 @@ - - - -RTCPeerConnection legacy addStream - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html b/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html deleted file mode 100755 index a767d68c8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html +++ /dev/null @@ -1,274 +0,0 @@ - - -Test legacy offerToReceiveAudio/Video options - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html b/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html deleted file mode 100755 index 96c708341..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html +++ /dev/null @@ -1,172 +0,0 @@ - - -RTCRtpTransceiver with OfferToReceive legacy options - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/legacy/onaddstream.https.html b/common/tct-webrtc-w3c-tests/webrtc/legacy/onaddstream.https.html deleted file mode 100755 index ea70884f4..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/legacy/onaddstream.https.html +++ /dev/null @@ -1,157 +0,0 @@ - - -onaddstream tests - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/media/test-v-128k-320x240-24fps-8kfr.webm b/common/tct-webrtc-w3c-tests/webrtc/media/test-v-128k-320x240-24fps-8kfr.webm deleted file mode 100755 index 189c472f9..000000000 Binary files a/common/tct-webrtc-w3c-tests/webrtc/media/test-v-128k-320x240-24fps-8kfr.webm and /dev/null differ diff --git a/common/tct-webrtc-w3c-tests/webrtc/no-media-call.html b/common/tct-webrtc-w3c-tests/webrtc/no-media-call.html deleted file mode 100755 index ea8938eba..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/no-media-call.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - RTCPeerConnection No-Media Connection Test - - -
-

iceConnectionState info

-
-
- - - - - - - - - \ No newline at end of file diff --git a/common/tct-webrtc-w3c-tests/webrtc/promises-call.html b/common/tct-webrtc-w3c-tests/webrtc/promises-call.html deleted file mode 100755 index 9ba91c755..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/promises-call.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - RTCPeerConnection Data-Only Connection Test with Promises - - -
-

iceConnectionState info

-
-
- - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/RTCPeerConnection-payloadTypes.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/RTCPeerConnection-payloadTypes.html deleted file mode 100755 index d37041554..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/RTCPeerConnection-payloadTypes.html +++ /dev/null @@ -1,49 +0,0 @@ - - - -RTCPeerConnection RTP payload types - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html deleted file mode 100755 index d41b03cac..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/bundle.https.html +++ /dev/null @@ -1,95 +0,0 @@ - - -RTCPeerConnection BUNDLE - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html deleted file mode 100755 index a351ed14e..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/candidate-exchange.https.html +++ /dev/null @@ -1,218 +0,0 @@ - - - -Candidate exchange - - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html deleted file mode 100755 index 5dc9a2a1a..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/crypto-suite.https.html +++ /dev/null @@ -1,85 +0,0 @@ - - -RTCPeerConnection.prototype.createOffer - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/dtls-fingerprint-validation.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/dtls-fingerprint-validation.html deleted file mode 100755 index 05ab23714..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/dtls-fingerprint-validation.html +++ /dev/null @@ -1,37 +0,0 @@ - - - -DTLS fingerprint validation - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/dtls-setup.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/dtls-setup.https.html deleted file mode 100755 index cadea1005..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/dtls-setup.https.html +++ /dev/null @@ -1,86 +0,0 @@ - - -RTCPeerConnection a=setup SDP parameter test - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/handover-datachannel.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/handover-datachannel.html deleted file mode 100755 index 2e3e18a8b..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/handover-datachannel.html +++ /dev/null @@ -1,62 +0,0 @@ - - - -RTCPeerConnection Handovers - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/handover.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/handover.html deleted file mode 100755 index 0f36779e8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/handover.html +++ /dev/null @@ -1,72 +0,0 @@ - - -RTCPeerConnection Handovers - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html deleted file mode 100755 index a0c8c2b36..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/ice-state.https.html +++ /dev/null @@ -1,130 +0,0 @@ - - - -RTCPeerConnection Failed State - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html deleted file mode 100755 index dc48f82f9..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/ice-ufragpwd.html +++ /dev/null @@ -1,55 +0,0 @@ - - - -RTCPeerConnection Failed State - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/jsep-initial-offer.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/jsep-initial-offer.https.html deleted file mode 100755 index 675ed357d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/jsep-initial-offer.https.html +++ /dev/null @@ -1,41 +0,0 @@ - - -RTCPeerConnection.prototype.createOffer - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html deleted file mode 100755 index d632bb84c..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/missing-fields.html +++ /dev/null @@ -1,47 +0,0 @@ - - -RTCPeerconnection SDP parse tests - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html deleted file mode 100755 index c4b28fb5f..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/msid-parse.html +++ /dev/null @@ -1,71 +0,0 @@ - - -RTCPeerconnection MSID parsing - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-clockrate.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-clockrate.html deleted file mode 100755 index 03ab37ce2..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-clockrate.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - -RTP clockrate - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-demuxing.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-demuxing.html deleted file mode 100755 index 879e8ddea..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-demuxing.html +++ /dev/null @@ -1,58 +0,0 @@ - - - -RTCPeerConnection payload type demuxing - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html deleted file mode 100755 index 96e1f69d1..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/rtp-payloadtypes.html +++ /dev/null @@ -1,50 +0,0 @@ - - -payload type handling (assuming rtcp-mux) - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html deleted file mode 100755 index 0bb296336..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/rtx-codecs.https.html +++ /dev/null @@ -1,115 +0,0 @@ - - -RTX codec integrity checks - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/sctp-format.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/sctp-format.html deleted file mode 100755 index 6b6067ff4..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/sctp-format.html +++ /dev/null @@ -1,25 +0,0 @@ - - -RTCPeerconnection SDP SCTP format test - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/sdes-dont-dont-dont.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/sdes-dont-dont-dont.html deleted file mode 100755 index c89f2099d..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/sdes-dont-dont-dont.html +++ /dev/null @@ -1,57 +0,0 @@ - - - -RTCPeerConnection MUST NOT support SDES - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-answer.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-answer.html deleted file mode 100755 index 946c26fcd..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-answer.html +++ /dev/null @@ -1,62 +0,0 @@ - - -RTCPeerConnection Simulcast Answer - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-offer.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-offer.html deleted file mode 100755 index 0465da252..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/simulcast-offer.html +++ /dev/null @@ -1,33 +0,0 @@ - - -RTCPeerConnection Simulcast Offer - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/split.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/split.https.html deleted file mode 100755 index f979f443b..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/split.https.html +++ /dev/null @@ -1,98 +0,0 @@ - - -RTCPeerConnection BUNDLE - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/unknown-mediatypes.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/unknown-mediatypes.html deleted file mode 100755 index cf8d6ff86..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/unknown-mediatypes.html +++ /dev/null @@ -1,34 +0,0 @@ - - -RTCPeerconnection SDP handling of unknown media types - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html b/common/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html deleted file mode 100755 index 8014a5377..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/protocol/video-codecs.https.html +++ /dev/null @@ -1,95 +0,0 @@ - - -RTCPeerConnection.prototype.createOffer - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html b/common/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html deleted file mode 100755 index b0b01a46b..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/receiver-track-live.https.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - Remote tracks should not get ended except for stop/close - - - - - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/recvonly-transceiver-can-become-sendrecv.https.html b/common/tct-webrtc-w3c-tests/webrtc/recvonly-transceiver-can-become-sendrecv.https.html deleted file mode 100755 index 92272230b..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/recvonly-transceiver-can-become-sendrecv.https.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/resources/RTCCertificate-postMessage-iframe.html b/common/tct-webrtc-w3c-tests/webrtc/resources/RTCCertificate-postMessage-iframe.html deleted file mode 100755 index 9e52ba0c8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/resources/RTCCertificate-postMessage-iframe.html +++ /dev/null @@ -1,9 +0,0 @@ - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/simplecall-no-ssrcs.https.html b/common/tct-webrtc-w3c-tests/webrtc/simplecall-no-ssrcs.https.html deleted file mode 100755 index 0e4535444..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/simplecall-no-ssrcs.https.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - RTCPeerConnection Connection Test - - - -
-
- - -
- - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/simplecall.https.html b/common/tct-webrtc-w3c-tests/webrtc/simplecall.https.html deleted file mode 100755 index 4b246ec84..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/simplecall.https.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - RTCPeerConnection Connection Test - - - -
-
- - -
- - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/simulcast/basic.https.html b/common/tct-webrtc-w3c-tests/webrtc/simulcast/basic.https.html deleted file mode 100755 index 4b1d9ecd0..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/simulcast/basic.https.html +++ /dev/null @@ -1,23 +0,0 @@ - - -RTCPeerConnection Simulcast Tests - - - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/simulcast/getStats.https.html b/common/tct-webrtc-w3c-tests/webrtc/simulcast/getStats.https.html deleted file mode 100755 index f3abe485f..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/simulcast/getStats.https.html +++ /dev/null @@ -1,34 +0,0 @@ - - -RTCPeerConnection Simulcast Tests - getStats - - - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/simulcast/h264.https.html b/common/tct-webrtc-w3c-tests/webrtc/simulcast/h264.https.html deleted file mode 100755 index c8e6980cd..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/simulcast/h264.https.html +++ /dev/null @@ -1,31 +0,0 @@ - - -RTCPeerConnection Simulcast Tests - - - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/simulcast/setParameters-active.https.html b/common/tct-webrtc-w3c-tests/webrtc/simulcast/setParameters-active.https.html deleted file mode 100755 index cf5bc0708..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/simulcast/setParameters-active.https.html +++ /dev/null @@ -1,54 +0,0 @@ - - -RTCPeerConnection Simulcast Tests - setParameters/active - - - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/simulcast/simulcast.js b/common/tct-webrtc-w3c-tests/webrtc/simulcast/simulcast.js deleted file mode 100755 index 3811d3a72..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/simulcast/simulcast.js +++ /dev/null @@ -1,131 +0,0 @@ -'use strict'; -/* Helper functions to munge SDP and split the sending track into - * separate tracks on the receiving end. This can be done in a number - * of ways, the one used here uses the fact that the MID and RID header - * extensions which are used for packet routing share the same wire - * format. The receiver interprets the rids from the sender as mids - * which allows receiving the different spatial resolutions on separate - * m-lines and tracks. - */ -const extensionsToFilter = [ - 'urn:ietf:params:rtp-hdrext:sdes:mid', - 'urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id', - 'urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id', -]; - -function swapRidAndMidExtensionsInSimulcastOffer(offer, rids) { - const sections = SDPUtils.splitSections(offer.sdp); - const dtls = SDPUtils.getDtlsParameters(sections[1], sections[0]); - const ice = SDPUtils.getIceParameters(sections[1], sections[0]); - const rtpParameters = SDPUtils.parseRtpParameters(sections[1]); - - // The gist of this hack is that rid and mid have the same wire format. - const rid = rtpParameters.headerExtensions.find(ext => ext.uri === 'urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id'); - rtpParameters.headerExtensions = rtpParameters.headerExtensions.filter(ext => { - return !extensionsToFilter.includes(ext.uri); - }); - // This tells the other side that the RID packets are actually mids. - rtpParameters.headerExtensions.push({id: rid.id, uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', direction: 'sendrecv'}); - - // Filter rtx as we have no way to (re)interpret rrid. - // Not doing this makes probing use RTX, it's not understood and ramp-up is slower. - rtpParameters.codecs = rtpParameters.codecs.filter(c => c.name.toUpperCase() !== 'RTX'); - - let sdp = SDPUtils.writeSessionBoilerplate() + - SDPUtils.writeDtlsParameters(dtls, 'actpass') + - SDPUtils.writeIceParameters(ice) + - 'a=group:BUNDLE ' + rids.join(' ') + '\r\n'; - const baseRtpDescription = SDPUtils.writeRtpDescription('video', rtpParameters); - rids.forEach(rid => { - sdp += baseRtpDescription + - 'a=mid:' + rid + '\r\n' + - 'a=msid:rid-' + rid + ' rid-' + rid + '\r\n'; - }); - return sdp; -} - -function swapRidAndMidExtensionsInSimulcastAnswer(answer, localDescription, rids) { - const sections = SDPUtils.splitSections(answer.sdp); - const dtls = SDPUtils.getDtlsParameters(sections[1], sections[0]); - const ice = SDPUtils.getIceParameters(sections[1], sections[0]); - const rtpParameters = SDPUtils.parseRtpParameters(sections[1]); - - rtpParameters.headerExtensions = rtpParameters.headerExtensions.filter(ext => { - return !extensionsToFilter.includes(ext.uri); - }); - const localMid = SDPUtils.getMid(SDPUtils.splitSections(localDescription.sdp)[1]); - let sdp = SDPUtils.writeSessionBoilerplate() + - SDPUtils.writeDtlsParameters(dtls, 'active') + - SDPUtils.writeIceParameters(ice) + - 'a=group:BUNDLE ' + localMid + '\r\n'; - sdp += SDPUtils.writeRtpDescription('video', rtpParameters); - sdp += 'a=mid:' + localMid + '\r\n'; - - rids.forEach(rid => { - sdp += 'a=rid:' + rid + ' recv\r\n'; - }); - sdp += 'a=simulcast:recv ' + rids.join(';') + '\r\n'; - - // Re-add headerextensions we filtered. - const headerExtensions = SDPUtils.parseRtpParameters(SDPUtils.splitSections(localDescription.sdp)[1]).headerExtensions; - headerExtensions.forEach(ext => { - if (extensionsToFilter.includes(ext.uri)) { - sdp += 'a=extmap:' + ext.id + ' ' + ext.uri + '\r\n'; - } - }); - return sdp; -} - -async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, codec) { - exchangeIceCandidates(pc1, pc2); - - const metadataToBeLoaded = []; - pc2.ontrack = (e) => { - const stream = e.streams[0]; - const v = document.createElement('video'); - v.autoplay = true; - v.srcObject = stream; - v.id = stream.id - metadataToBeLoaded.push(new Promise((resolve) => { - v.addEventListener('loadedmetadata', () => { - resolve(); - }); - })); - }; - - const sendEncodings = rids.map(rid => ({rid})); - // Use a 2X downscale factor between each layer. To improve ramp-up time, the - // top layer is scaled down by a factor 2. Smaller layer comes first. For - // example if MediaStreamTrack is 720p and we want to send three layers we'll - // get {90p, 180p, 360p}. - let scaleResolutionDownBy = 2; - for (let i = sendEncodings.length - 1; i >= 0; --i) { - sendEncodings[i].scaleResolutionDownBy = scaleResolutionDownBy; - scaleResolutionDownBy *= 2; - } - // Use getUserMedia as getNoiseStream does not have enough entropy to ramp-up. - await setMediaPermission(); - const stream = await navigator.mediaDevices.getUserMedia({video: {width: 1280, height: 720}}); - t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); - const transceiver = pc1.addTransceiver(stream.getVideoTracks()[0], { - streams: [stream], - sendEncodings: sendEncodings, - }); - if (codec) { - preferCodec(transceiver, codec.mimeType, codec.sdpFmtpLine); - } - const offer = await pc1.createOffer(); - await pc1.setLocalDescription(offer), - await pc2.setRemoteDescription({ - type: 'offer', - sdp: swapRidAndMidExtensionsInSimulcastOffer(offer, rids), - }); - const answer = await pc2.createAnswer(); - await pc2.setLocalDescription(answer); - await pc1.setRemoteDescription({ - type: 'answer', - sdp: swapRidAndMidExtensionsInSimulcastAnswer(answer, pc1.localDescription, rids), - }); - assert_equals(metadataToBeLoaded.length, rids.length); - return Promise.all(metadataToBeLoaded); -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/simulcast/vp8.https.html b/common/tct-webrtc-w3c-tests/webrtc/simulcast/vp8.https.html deleted file mode 100755 index 8f4db09c1..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/simulcast/vp8.https.html +++ /dev/null @@ -1,26 +0,0 @@ - - -RTCPeerConnection Simulcast Tests - - - - - - - - - - diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/RTCConfiguration-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/RTCConfiguration-helper.js deleted file mode 100755 index fb8eb5099..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/RTCConfiguration-helper.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -// Run a test function as two test cases. -// The first test case test the configuration by passing a given config -// to the constructor. -// The second test case create an RTCPeerConnection object with default -// configuration, then call setConfiguration with the provided config. -// The test function is given a constructor function to create -// a new instance of RTCPeerConnection with given config, -// either directly as constructor parameter or through setConfiguration. -function config_test(test_func, desc) { - test(() => { - test_func(config => new RTCPeerConnection(config)); - }, `new RTCPeerConnection(config) - ${desc}`); - - test(() => { - test_func(config => { - const pc = new RTCPeerConnection(); - assert_idl_attribute(pc, 'setConfiguration'); - pc.setConfiguration(config); - return pc; - }) - }, `setConfiguration(config) - ${desc}`); -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/RTCDTMFSender-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/RTCDTMFSender-helper.js deleted file mode 100755 index 4316c3804..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/RTCDTMFSender-helper.js +++ /dev/null @@ -1,149 +0,0 @@ -'use strict'; - -// Test is based on the following editor draft: -// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html - -// Code using this helper should also include RTCPeerConnection-helper.js -// in the main HTML file - -// The following helper functions are called from RTCPeerConnection-helper.js: -// getTrackFromUserMedia -// exchangeOfferAnswer - -// Create a RTCDTMFSender using getUserMedia() -// Connect the PeerConnection to another PC and wait until it is -// properly connected, so that DTMF can be sent. -function createDtmfSender(pc = new RTCPeerConnection()) { - let dtmfSender; - return getTrackFromUserMedia('audio') - .then(([track, mediaStream]) => { - const sender = pc.addTrack(track, mediaStream); - dtmfSender = sender.dtmf; - assert_true(dtmfSender instanceof RTCDTMFSender, - 'Expect audio sender.dtmf to be set to a RTCDTMFSender'); - // Note: spec bug open - https://github.com/w3c/webrtc-pc/issues/1774 - // on whether sending should be possible before negotiation. - const pc2 = new RTCPeerConnection(); - Object.defineProperty(pc, 'otherPc', { value: pc2 }); - exchangeIceCandidates(pc, pc2); - return exchangeOfferAnswer(pc, pc2); - }).then(() => { - if (!('canInsertDTMF' in dtmfSender)) { - return Promise.resolve(); - } - // Wait until dtmfSender.canInsertDTMF becomes true. - // Up to 150 ms has been observed in test. Wait 1 second - // in steps of 10 ms. - // Note: Using a short timeout and rejected promise in order to - // make test return a clear error message on failure. - return new Promise((resolve, reject) => { - let counter = 0; - step_timeout(function checkCanInsertDTMF() { - if (dtmfSender.canInsertDTMF) { - resolve(); - } else { - if (counter >= 100) { - reject('Waited too long for canInsertDTMF'); - return; - } - ++counter; - step_timeout(checkCanInsertDTMF, 10); - } - }, 0); - }); - }).then(() => { - return dtmfSender; - }); -} - -/* - Create an RTCDTMFSender and test tonechange events on it. - testFunc - Test function that is going to manipulate the DTMFSender. - It will be called with: - t - the test object - sender - the created RTCDTMFSender - pc - the associated RTCPeerConnection as second argument. - toneChanges - Array of expected tonechange events fired. The elements - are array of 3 items: - expectedTone - The expected character in event.tone - expectedToneBuffer - The expected new value of dtmfSender.toneBuffer - expectedDuration - The rough time since beginning or last tonechange event - was fired. - desc - Test description. - */ -function test_tone_change_events(testFunc, toneChanges, desc) { - // Convert to cumulative time - let cumulativeTime = 0; - const cumulativeToneChanges = toneChanges.map(c => { - cumulativeTime += c[2]; - return [c[0], c[1], cumulativeTime]; - }); - - // Wait for same duration as last expected duration + 100ms - // before passing test in case there are new tone events fired, - // in which case the test should fail. - const lastWait = toneChanges.pop()[2] + 100; - - promise_test(async t => { - const pc = new RTCPeerConnection(); - const dtmfSender = await createDtmfSender(pc); - const start = Date.now(); - - const allEventsReceived = new Promise(resolve => { - const onToneChange = t.step_func(ev => { - assert_true(ev instanceof RTCDTMFToneChangeEvent, - 'Expect tone change event object to be an RTCDTMFToneChangeEvent'); - - const { tone } = ev; - assert_equals(typeof tone, 'string', - 'Expect event.tone to be the tone string'); - - assert_greater_than(cumulativeToneChanges.length, 0, - 'More tonechange event is fired than expected'); - - const [ - expectedTone, expectedToneBuffer, expectedTime - ] = cumulativeToneChanges.shift(); - - assert_equals(tone, expectedTone, - `Expect current event.tone to be ${expectedTone}`); - - assert_equals(dtmfSender.toneBuffer, expectedToneBuffer, - `Expect dtmfSender.toneBuffer to be updated to ${expectedToneBuffer}`); - - // We check that the cumulative delay is at least the expected one, but - // system load may cause random delays, so we do not put any - // realistic upper bound on the timing of the events. - assert_between_inclusive(Date.now() - start, expectedTime, - expectedTime + 4000, - `Expect tonechange event for "${tone}" to be fired approximately after ${expectedTime} milliseconds`); - if (cumulativeToneChanges.length === 0) { - resolve(); - } - }); - - dtmfSender.addEventListener('tonechange', onToneChange); - }); - - testFunc(t, dtmfSender, pc); - await allEventsReceived; - const wait = ms => new Promise(resolve => t.step_timeout(resolve, ms)); - await wait(lastWait); - }, desc); -} - -// Get the one and only tranceiver from pc.getTransceivers(). -// Assumes that there is only one tranceiver in pc. -function getTransceiver(pc) { - const transceivers = pc.getTransceivers(); - assert_equals(transceivers.length, 1, - 'Expect there to be only one tranceiver in pc'); - - return transceivers[0]; -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/RTCDataChannel-binaryType.window.js b/common/tct-webrtc-w3c-tests/webrtc/support/RTCDataChannel-binaryType.window.js deleted file mode 100755 index c63281bd5..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/RTCDataChannel-binaryType.window.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -const validBinaryTypes = ['blob', 'arraybuffer']; -const invalidBinaryTypes = ['jellyfish', 'arraybuffer ', '', null, undefined]; - -for (const binaryType of validBinaryTypes) { - test((t) => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - const dc = pc.createDataChannel('test-binary-type'); - - dc.binaryType = binaryType; - assert_equals(dc.binaryType, binaryType, `dc.binaryType should be '${binaryType}'`); - }, `Setting binaryType to '${binaryType}' should succeed`); -} - -for (const binaryType of invalidBinaryTypes) { - test((t) => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - const dc = pc.createDataChannel('test-binary-type'); - - assert_throws_dom('SyntaxError', () => { - dc.binaryType = binaryType; - }); - }, `Setting invalid binaryType '${binaryType}' should throw SyntaxError`); -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/RTCPeerConnection-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/RTCPeerConnection-helper.js deleted file mode 100755 index ac435279b..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/RTCPeerConnection-helper.js +++ /dev/null @@ -1,715 +0,0 @@ -'use strict' - -/* - * Helper Methods for testing the following methods in RTCPeerConnection: - * createOffer - * createAnswer - * setLocalDescription - * setRemoteDescription - * - * This file offers the following features: - * SDP similarity comparison - * Generating offer/answer using anonymous peer connection - * Test signalingstatechange event - * Test promise that never resolve - */ - -const audioLineRegex = /\r\nm=audio.+\r\n/g; -const videoLineRegex = /\r\nm=video.+\r\n/g; -const applicationLineRegex = /\r\nm=application.+\r\n/g; - -function countLine(sdp, regex) { - const matches = sdp.match(regex); - if(matches === null) { - return 0; - } else { - return matches.length; - } -} - -function countAudioLine(sdp) { - return countLine(sdp, audioLineRegex); -} - -function countVideoLine(sdp) { - return countLine(sdp, videoLineRegex); -} - -function countApplicationLine(sdp) { - return countLine(sdp, applicationLineRegex); -} - -function similarMediaDescriptions(sdp1, sdp2) { - if(sdp1 === sdp2) { - return true; - } else if( - countAudioLine(sdp1) !== countAudioLine(sdp2) || - countVideoLine(sdp1) !== countVideoLine(sdp2) || - countApplicationLine(sdp1) !== countApplicationLine(sdp2)) - { - return false; - } else { - return true; - } -} - -// Assert that given object is either an -// RTCSessionDescription or RTCSessionDescriptionInit -function assert_is_session_description(sessionDesc) { - if(sessionDesc instanceof RTCSessionDescription) { - return; - } - - assert_not_equals(sessionDesc, undefined, - 'Expect session description to be defined'); - - assert_true(typeof(sessionDesc) === 'object', - 'Expect sessionDescription to be either a RTCSessionDescription or an object'); - - assert_true(typeof(sessionDesc.type) === 'string', - 'Expect sessionDescription.type to be a string'); - - assert_true(typeof(sessionDesc.sdp) === 'string', - 'Expect sessionDescription.sdp to be a string'); -} - - -// We can't do string comparison to the SDP content, -// because RTCPeerConnection may return SDP that is -// slightly modified or reordered from what is given -// to it due to ICE candidate events or serialization. -// Instead, we create SDP with different number of media -// lines, and if the SDP strings are not the same, we -// simply count the media description lines and if they -// are the same, we assume it is the same. -function isSimilarSessionDescription(sessionDesc1, sessionDesc2) { - assert_is_session_description(sessionDesc1); - assert_is_session_description(sessionDesc2); - - if(sessionDesc1.type !== sessionDesc2.type) { - return false; - } else { - return similarMediaDescriptions(sessionDesc1.sdp, sessionDesc2.sdp); - } -} - -function assert_session_desc_similar(sessionDesc1, sessionDesc2) { - assert_true(isSimilarSessionDescription(sessionDesc1, sessionDesc2), - 'Expect both session descriptions to have the same count of media lines'); -} - -function assert_session_desc_not_similar(sessionDesc1, sessionDesc2) { - assert_false(isSimilarSessionDescription(sessionDesc1, sessionDesc2), - 'Expect both session descriptions to have different count of media lines'); -} - -async function generateDataChannelOffer(pc) { - pc.createDataChannel('test'); - const offer = await pc.createOffer(); - assert_equals(countApplicationLine(offer.sdp), 1, 'Expect m=application line to be present in generated SDP'); - return offer; -} - -async function generateAudioReceiveOnlyOffer(pc) -{ - try { - pc.addTransceiver('audio', { direction: 'recvonly' }); - return pc.createOffer(); - } catch(e) { - return pc.createOffer({ offerToReceiveAudio: true }); - } -} - -async function generateVideoReceiveOnlyOffer(pc) -{ - try { - pc.addTransceiver('video', { direction: 'recvonly' }); - return pc.createOffer(); - } catch(e) { - return pc.createOffer({ offerToReceiveVideo: true }); - } -} - -// Helper function to generate answer based on given offer using a freshly -// created RTCPeerConnection object -async function generateAnswer(offer) { - const pc = new RTCPeerConnection(); - await pc.setRemoteDescription(offer); - const answer = await pc.createAnswer(); - pc.close(); - return answer; -} - -// Helper function to generate offer using a freshly -// created RTCPeerConnection object -async function generateOffer() { - const pc = new RTCPeerConnection(); - const offer = await pc.createOffer(); - pc.close(); - return offer; -} - -// Run a test function that return a promise that should -// never be resolved. For lack of better options, -// we wait for a time out and pass the test if the -// promise doesn't resolve within that time. -function test_never_resolve(testFunc, testName) { - async_test(t => { - testFunc(t) - .then( - t.step_func(result => { - assert_unreached(`Pending promise should never be resolved. Instead it is fulfilled with: ${result}`); - }), - t.step_func(err => { - assert_unreached(`Pending promise should never be resolved. Instead it is rejected with: ${err}`); - })); - - t.step_timeout(t.step_func_done(), 100) - }, testName); -} - -// Helper function to exchange ice candidates between -// two local peer connections -function exchangeIceCandidates(pc1, pc2) { - // private function - function doExchange(localPc, remotePc) { - localPc.addEventListener('icecandidate', event => { - const { candidate } = event; - - // Guard against already closed peerconnection to - // avoid unrelated exceptions. - if (remotePc.signalingState !== 'closed') { - remotePc.addIceCandidate(candidate); - } - }); - } - - doExchange(pc1, pc2); - doExchange(pc2, pc1); -} - -// Returns a promise that resolves when a |name| event is fired. -function waitUntilEvent(obj, name) { - return new Promise(r => obj.addEventListener(name, r, {once: true})); -} - -// Returns a promise that resolves when the |transport.state| is |state| -// This should work for RTCSctpTransport, RTCDtlsTransport and RTCIceTransport. -async function waitForState(transport, state) { - while (transport.state != state) { - await waitUntilEvent(transport, 'statechange'); - } -} - -// Returns a promise that resolves when |pc.iceConnectionState| is 'connected' -// or 'completed'. -async function listenToIceConnected(pc) { - await waitForIceStateChange(pc, ['connected', 'completed']); -} - -// Returns a promise that resolves when |pc.iceConnectionState| is in one of the -// wanted states. -async function waitForIceStateChange(pc, wantedStates) { - while (!wantedStates.includes(pc.iceConnectionState)) { - await waitUntilEvent(pc, 'iceconnectionstatechange'); - } -} - -// Returns a promise that resolves when |pc.connectionState| is 'connected'. -async function listenToConnected(pc) { - while (pc.connectionState != 'connected') { - await waitUntilEvent(pc, 'connectionstatechange'); - } -} - -// Returns a promise that resolves when |pc.connectionState| is in one of the -// wanted states. -async function waitForConnectionStateChange(pc, wantedStates) { - while (!wantedStates.includes(pc.connectionState)) { - await waitUntilEvent(pc, 'connectionstatechange'); - } -} - -async function waitForIceGatheringState(pc, wantedStates) { - while (!wantedStates.includes(pc.iceGatheringState)) { - await waitUntilEvent(pc, 'icegatheringstatechange'); - } -} - -// Resolves when RTP packets have been received. -async function listenForSSRCs(t, receiver) { - while (true) { - const ssrcs = receiver.getSynchronizationSources(); - if (Array.isArray(ssrcs) && ssrcs.length > 0) { - return ssrcs; - } - await new Promise(r => t.step_timeout(r, 0)); - } -} - -// Helper function to create a pair of connected data channels. -// On success the promise resolves to an array with two data channels. -// It does the heavy lifting of performing signaling handshake, -// ICE candidate exchange, and waiting for data channel at two -// end points to open. Can do both negotiated and non-negotiated setup. -async function createDataChannelPair(t, options, - pc1 = createPeerConnectionWithCleanup(t), - pc2 = createPeerConnectionWithCleanup(t)) { - let pair = [], bothOpen; - try { - if (options.negotiated) { - pair = [pc1, pc2].map(pc => pc.createDataChannel('', options)); - bothOpen = Promise.all(pair.map(dc => new Promise((r, e) => { - dc.onopen = r; - dc.onerror = ({error}) => e(error); - }))); - } else { - pair = [pc1.createDataChannel('', options)]; - bothOpen = Promise.all([ - new Promise((r, e) => { - pair[0].onopen = r; - pair[0].onerror = ({error}) => e(error); - }), - new Promise((r, e) => pc2.ondatachannel = ({channel}) => { - pair[1] = channel; - channel.onopen = r; - channel.onerror = ({error}) => e(error); - }) - ]); - } - exchangeIceCandidates(pc1, pc2); - await exchangeOfferAnswer(pc1, pc2); - await bothOpen; - return pair; - } finally { - for (const dc of pair) { - dc.onopen = dc.onerror = null; - } - } -} - -// Wait for RTP and RTCP stats to arrive -async function waitForRtpAndRtcpStats(pc) { - // If remote stats are never reported, return after 5 seconds. - const startTime = performance.now(); - while (true) { - const report = await pc.getStats(); - const stats = [...report.values()].filter(({type}) => type.endsWith("bound-rtp")); - // Each RTP and RTCP stat has a reference - // to the matching stat in the other direction - if (stats.length && stats.every(({localId, remoteId}) => localId || remoteId)) { - break; - } - if (performance.now() > startTime + 5000) { - break; - } - } -} - -// Wait for a single message event and return -// a promise that resolve when the event fires -function awaitMessage(channel) { - const once = true; - return new Promise((resolve, reject) => { - channel.addEventListener('message', ({data}) => resolve(data), {once}); - channel.addEventListener('error', reject, {once}); - }); -} - -// Helper to convert a blob to array buffer so that -// we can read the content -async function blobToArrayBuffer(blob) { - const reader = new FileReader(); - reader.readAsArrayBuffer(blob); - return new Promise((resolve, reject) => { - reader.addEventListener('load', () => resolve(reader.result), {once: true}); - reader.addEventListener('error', () => reject(reader.error), {once: true}); - }); -} - -// Assert that two TypedArray or ArrayBuffer objects have the same byte values -function assert_equals_typed_array(array1, array2) { - const [view1, view2] = [array1, array2].map((array) => { - if (array instanceof ArrayBuffer) { - return new DataView(array); - } else { - assert_true(array.buffer instanceof ArrayBuffer, - 'Expect buffer to be instance of ArrayBuffer'); - return new DataView(array.buffer, array.byteOffset, array.byteLength); - } - }); - - assert_equals(view1.byteLength, view2.byteLength, - 'Expect both arrays to be of the same byte length'); - - const byteLength = view1.byteLength; - - for (let i = 0; i < byteLength; ++i) { - assert_equals(view1.getUint8(i), view2.getUint8(i), - `Expect byte at buffer position ${i} to be equal`); - } -} - -// These media tracks will be continually updated with deterministic "noise" in -// order to ensure UAs do not cease transmission in response to apparent -// silence. -// -// > Many codecs and systems are capable of detecting "silence" and changing -// > their behavior in this case by doing things such as not transmitting any -// > media. -// -// Source: https://w3c.github.io/webrtc-pc/#offer-answer-options -const trackFactories = { - // Share a single context between tests to avoid exceeding resource limits - // without requiring explicit destruction. - audioContext: null, - - /** - * Given a set of requested media types, determine if the user agent is - * capable of procedurally generating a suitable media stream. - * - * @param {object} requested - * @param {boolean} [requested.audio] - flag indicating whether the desired - * stream should include an audio track - * @param {boolean} [requested.video] - flag indicating whether the desired - * stream should include a video track - * - * @returns {boolean} - */ - canCreate(requested) { - const supported = { - audio: !!window.AudioContext && !!window.MediaStreamAudioDestinationNode, - video: !!HTMLCanvasElement.prototype.captureStream - }; - - return (!requested.audio || supported.audio) && - (!requested.video || supported.video); - }, - - audio() { - const ctx = trackFactories.audioContext = trackFactories.audioContext || - new AudioContext(); - const oscillator = ctx.createOscillator(); - const dst = oscillator.connect(ctx.createMediaStreamDestination()); - oscillator.start(); - return dst.stream.getAudioTracks()[0]; - }, - - video({width = 640, height = 480, signal} = {}) { - const canvas = Object.assign( - document.createElement("canvas"), {width, height} - ); - const ctx = canvas.getContext('2d'); - const stream = canvas.captureStream(); - - let count = 0; - const interval = setInterval(() => { - ctx.fillStyle = `rgb(${count%255}, ${count*count%255}, ${count%255})`; - count += 1; - ctx.fillRect(0, 0, width, height); - // Add some bouncing boxes in contrast color to add a little more noise. - const contrast = count + 128; - ctx.fillStyle = `rgb(${contrast%255}, ${contrast*contrast%255}, ${contrast%255})`; - const xpos = count % (width - 20); - const ypos = count % (height - 20); - ctx.fillRect(xpos, ypos, xpos + 20, ypos + 20); - const xpos2 = (count + width / 2) % (width - 20); - const ypos2 = (count + height / 2) % (height - 20); - ctx.fillRect(xpos2, ypos2, xpos2 + 20, ypos2 + 20); - // If signal is set (0-255), add a constant-color box of that luminance to - // the video frame at coordinates 20 to 60 in both X and Y direction. - // (big enough to avoid color bleed from surrounding video in some codecs, - // for more stable tests). - if (signal != undefined) { - ctx.fillStyle = `rgb(${signal}, ${signal}, ${signal})`; - ctx.fillRect(20, 20, 40, 40); - } - }, 100); - - if (document.body) { - document.body.appendChild(canvas); - } else { - document.addEventListener('DOMContentLoaded', () => { - document.body.appendChild(canvas); - }, {once: true}); - } - - // Implement track.stop() for performance in some tests on some platforms - const track = stream.getVideoTracks()[0]; - const nativeStop = track.stop; - track.stop = function stop() { - clearInterval(interval); - nativeStop.apply(this); - if (document.body && canvas.parentElement == document.body) { - document.body.removeChild(canvas); - } - }; - return track; - } -}; - -// Get the signal from a video element inserted by createNoiseStream -function getVideoSignal(v) { - if (v.videoWidth < 60 || v.videoHeight < 60) { - throw new Error('getVideoSignal: video too small for test'); - } - const canvas = document.createElement("canvas"); - canvas.width = canvas.height = 60; - const context = canvas.getContext('2d'); - context.drawImage(v, 0, 0); - // Extract pixel value at position 40, 40 - const pixel = context.getImageData(40, 40, 1, 1); - // Use luma reconstruction to get back original value according to - // ITU-R rec BT.709 - return (pixel.data[0] * 0.21 + pixel.data[1] * 0.72 + pixel.data[2] * 0.07); -} - -async function detectSignal(t, v, value) { - while (true) { - const signal = getVideoSignal(v).toFixed(); - // allow off-by-two pixel error (observed in some implementations) - if (value - 2 <= signal && signal <= value + 2) { - return; - } - // We would like to wait for each new frame instead here, - // but there seems to be no such callback. - await new Promise(r => t.step_timeout(r, 100)); - } -} - -// Generate a MediaStream bearing the specified tracks. -// -// @param {object} [caps] -// @param {boolean} [caps.audio] - flag indicating whether the generated stream -// should include an audio track -// @param {boolean} [caps.video] - flag indicating whether the generated stream -// should include a video track, or parameters for video -async function getNoiseStream(caps = {}) { - if (!trackFactories.canCreate(caps)) { - return navigator.mediaDevices.getUserMedia(caps); - } - const tracks = []; - - if (caps.audio) { - tracks.push(trackFactories.audio()); - } - - if (caps.video) { - tracks.push(trackFactories.video(caps.video)); - } - - return new MediaStream(tracks); -} - -// Obtain a MediaStreamTrack of kind using procedurally-generated streams (and -// falling back to `getUserMedia` when the user agent cannot generate the -// requested streams). -// Return Promise of pair of track and associated mediaStream. -// Assumes that there is at least one available device -// to generate the track. -function getTrackFromUserMedia(kind) { - return getNoiseStream({ [kind]: true }) - .then(mediaStream => { - const [track] = mediaStream.getTracks(); - return [track, mediaStream]; - }); -} - -// Obtain |count| MediaStreamTracks of type |kind| and MediaStreams. The tracks -// do not belong to any stream and the streams are empty. Returns a Promise -// resolved with a pair of arrays [tracks, streams]. -// Assumes there is at least one available device to generate the tracks and -// streams and that the getUserMedia() calls resolve. -function getUserMediaTracksAndStreams(count, type = 'audio') { - let otherTracksPromise; - if (count > 1) - otherTracksPromise = getUserMediaTracksAndStreams(count - 1, type); - else - otherTracksPromise = Promise.resolve([[], []]); - return otherTracksPromise.then(([tracks, streams]) => { - return getTrackFromUserMedia(type) - .then(([track, stream]) => { - // Remove the default stream-track relationship. - stream.removeTrack(track); - tracks.push(track); - streams.push(stream); - return [tracks, streams]; - }); - }); -} - -// Performs an offer exchange caller -> callee. -async function exchangeOffer(caller, callee) { - await caller.setLocalDescription(await caller.createOffer()); - await callee.setRemoteDescription(caller.localDescription); -} -// Performs an answer exchange caller -> callee. -async function exchangeAnswer(caller, callee) { - // Note that caller's remote description must be set first; if not, - // there's a chance that candidates from callee arrive at caller before - // it has a remote description to apply them to. - const answer = await callee.createAnswer(); - await caller.setRemoteDescription(answer); - await callee.setLocalDescription(answer); -} -async function exchangeOfferAnswer(caller, callee) { - await exchangeOffer(caller, callee); - await exchangeAnswer(caller, callee); -} - -// The returned promise is resolved with caller's ontrack event. -async function exchangeAnswerAndListenToOntrack(t, caller, callee) { - const ontrackPromise = addEventListenerPromise(t, caller, 'track'); - await exchangeAnswer(caller, callee); - return ontrackPromise; -} -// The returned promise is resolved with callee's ontrack event. -async function exchangeOfferAndListenToOntrack(t, caller, callee) { - const ontrackPromise = addEventListenerPromise(t, callee, 'track'); - await exchangeOffer(caller, callee); - return ontrackPromise; -} - -// The resolver extends a |promise| that can be resolved or rejected using |resolve| -// or |reject|. -class Resolver extends Promise { - constructor(executor) { - let resolve, reject; - super((resolve_, reject_) => { - resolve = resolve_; - reject = reject_; - if (executor) { - return executor(resolve_, reject_); - } - }); - - this._done = false; - this._resolve = resolve; - this._reject = reject; - } - - /** - * Return whether the promise is done (resolved or rejected). - */ - get done() { - return this._done; - } - - /** - * Resolve the promise. - */ - resolve(...args) { - this._done = true; - return this._resolve(...args); - } - - /** - * Reject the promise. - */ - reject(...args) { - this._done = true; - return this._reject(...args); - } -} - -function addEventListenerPromise(t, obj, type, listener) { - if (!listener) { - return waitUntilEvent(obj, type); - } - return new Promise(r => obj.addEventListener(type, - t.step_func(e => r(listener(e))), - {once: true})); -} - -function createPeerConnectionWithCleanup(t) { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - return pc; -} - -async function createTrackAndStreamWithCleanup(t, kind = 'audio') { - let constraints = {}; - constraints[kind] = true; - const stream = await getNoiseStream(constraints); - const [track] = stream.getTracks(); - t.add_cleanup(() => track.stop()); - return [track, stream]; -} - -function findTransceiverForSender(pc, sender) { - const transceivers = pc.getTransceivers(); - for (let i = 0; i < transceivers.length; ++i) { - if (transceivers[i].sender == sender) - return transceivers[i]; - } - return null; -} - -function preferCodec(transceiver, mimeType, sdpFmtpLine) { - const {codecs} = RTCRtpSender.getCapabilities(transceiver.receiver.track.kind); - // sdpFmtpLine is optional, pick the first partial match if not given. - const selectedCodecIndex = codecs.findIndex(c => { - return c.mimeType === mimeType && (c.sdpFmtpLine === sdpFmtpLine || !sdpFmtpLine); - }); - const selectedCodec = codecs[selectedCodecIndex]; - codecs.slice(selectedCodecIndex, 1); - codecs.unshift(selectedCodec); - return transceiver.setCodecPreferences(codecs); -} - -// Contains a set of values and will yell at you if you try to add a value twice. -class UniqueSet extends Set { - constructor(items) { - super(); - if (items !== undefined) { - for (const item of items) { - this.add(item); - } - } - } - - add(value, message) { - if (message === undefined) { - message = `Value '${value}' needs to be unique but it is already in the set`; - } - assert_true(!this.has(value), message); - super.add(value); - } -} - -const iceGatheringStateTransitions = async (pc, ...states) => { - for (const state of states) { - await new Promise((resolve, reject) => { - pc.addEventListener('icegatheringstatechange', () => { - if (pc.iceGatheringState == state) { - resolve(); - } else { - reject(`Unexpected gathering state: ${pc.iceGatheringState}, was expecting ${state}`); - } - }, {once: true}); - }); - } -}; - -const initialOfferAnswerWithIceGatheringStateTransitions = - async (pc1, pc2, offerOptions) => { - await pc1.setLocalDescription( - await pc1.createOffer(offerOptions)); - const pc1Transitions = - iceGatheringStateTransitions(pc1, 'gathering', 'complete'); - await pc2.setRemoteDescription(pc1.localDescription); - await pc2.setLocalDescription(await pc2.createAnswer()); - const pc2Transitions = - iceGatheringStateTransitions(pc2, 'gathering', 'complete'); - await pc1.setRemoteDescription(pc2.localDescription); - await pc1Transitions; - await pc2Transitions; - }; - -const expectNoMoreGatheringStateChanges = async (t, pc) => { - pc.onicegatheringstatechange = - t.step_func(() => { - assert_unreached( - 'Should not get an icegatheringstatechange right now!'); - }); -}; diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/RTCPeerConnection-perfect-negotiation-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/RTCPeerConnection-perfect-negotiation-helper.js deleted file mode 100755 index ed647bbe7..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/RTCPeerConnection-perfect-negotiation-helper.js +++ /dev/null @@ -1,153 +0,0 @@ -'use strict' - -function peer(other, polite, fail = null) { - const send = (tgt, msg) => tgt.postMessage(JSON.parse(JSON.stringify(msg)), - "*"); - if (!fail) fail = e => send(window.parent, {error: `${e.name}: ${e.message}`}); - const pc = new RTCPeerConnection(); - - if (!window.assert_equals) { - window.assert_equals = (a, b, msg) => a === b || - fail(new Error(`${msg} expected ${b} but got ${a}`)); - } - - const commands = { - async addTransceiver() { - const transceiver = pc.addTransceiver("video"); - await new Promise(r => pc.addEventListener("negotiated", r, {once: true})); - if (!transceiver.currentDirection) { - // Might have just missed the negotiation train. Catch next one. - await new Promise(r => pc.addEventListener("negotiated", r, {once: true})); - } - assert_equals(transceiver.currentDirection, "sendonly", "have direction"); - return pc.getTransceivers().length; - }, - async simpleConnect() { - const p = commands.addTransceiver(); - await new Promise(r => pc.oniceconnectionstatechange = - () => pc.iceConnectionState == "connected" && r()); - return await p; - }, - async getNumTransceivers() { - return pc.getTransceivers().length; - }, - }; - - try { - pc.addEventListener("icecandidate", ({candidate}) => send(other, - {candidate})); - let makingOffer = false, ignoreIceCandidateFailures = false; - let srdAnswerPending = false; - pc.addEventListener("negotiationneeded", async () => { - try { - assert_equals(pc.signalingState, "stable", "negotiationneeded always fires in stable state"); - assert_equals(makingOffer, false, "negotiationneeded not already in progress"); - makingOffer = true; - await pc.setLocalDescription(); - assert_equals(pc.signalingState, "have-local-offer", "negotiationneeded not racing with onmessage"); - assert_equals(pc.localDescription.type, "offer", "negotiationneeded SLD worked"); - send(other, {description: pc.localDescription}); - } catch (e) { - fail(e); - } finally { - makingOffer = false; - } - }); - window.onmessage = async ({data: {description, candidate, run}}) => { - try { - if (description) { - // If we have a setRemoteDescription() answer operation pending, then - // we will be "stable" by the time the next setRemoteDescription() is - // executed, so we count this being stable when deciding whether to - // ignore the offer. - let isStable = - pc.signalingState == "stable" || - (pc.signalingState == "have-local-offer" && srdAnswerPending); - const ignoreOffer = description.type == "offer" && !polite && - (makingOffer || !isStable); - if (ignoreOffer) { - ignoreIceCandidateFailures = true; - return; - } - if (description.type == "answer") - srdAnswerPending = true; - await pc.setRemoteDescription(description); - ignoreIceCandidateFailures = false; - srdAnswerPending = false; - if (description.type == "offer") { - assert_equals(pc.signalingState, "have-remote-offer", "Remote offer"); - assert_equals(pc.remoteDescription.type, "offer", "SRD worked"); - await pc.setLocalDescription(); - assert_equals(pc.signalingState, "stable", "onmessage not racing with negotiationneeded"); - assert_equals(pc.localDescription.type, "answer", "onmessage SLD worked"); - send(other, {description: pc.localDescription}); - } else { - assert_equals(pc.remoteDescription.type, "answer", "Answer was set"); - assert_equals(pc.signalingState, "stable", "answered"); - pc.dispatchEvent(new Event("negotiated")); - } - } else if (candidate) { - try { - await pc.addIceCandidate(candidate); - } catch (e) { - if (!ignoreIceCandidateFailures) throw e; - } - } else if (run) { - send(window.parent, {[run.id]: await commands[run.cmd]() || 0}); - } - } catch (e) { - fail(e); - } - }; - } catch (e) { - fail(e); - } - return pc; -} - -async function setupPeerIframe(t, polite) { - const iframe = document.createElement("iframe"); - t.add_cleanup(() => iframe.remove()); - iframe.srcdoc = - `(${peer.toString()})(window.parent, ${polite});`; - document.documentElement.appendChild(iframe); - - const failCatcher = t.step_func(({data}) => - ("error" in data) && assert_unreached(`Error in iframe: ${data.error}`)); - window.addEventListener("message", failCatcher); - t.add_cleanup(() => window.removeEventListener("message", failCatcher)); - await new Promise(r => iframe.onload = r); - return iframe; -} - -function setupPeerTopLevel(t, other, polite) { - const pc = peer(other, polite, t.step_func(e => { throw e; })); - t.add_cleanup(() => { pc.close(); window.onmessage = null; }); -} - -let counter = 0; -async function run(target, cmd) { - const id = `result${counter++}`; - target.postMessage({run: {cmd, id}}, "*"); - return new Promise(r => window.addEventListener("message", - function listen({data}) { - if (!(id in data)) return; - window.removeEventListener("message", listen); - r(data[id]); - })); -} - -let iframe; -async function setupAB(t, politeA, politeB) { - iframe = await setupPeerIframe(t, politeB); - return setupPeerTopLevel(t, iframe.contentWindow, politeA); -} -const runA = cmd => run(window, cmd); -const runB = cmd => run(iframe.contentWindow, cmd); -const runBoth = (cmdA, cmdB = cmdA) => Promise.all([runA(cmdA), runB(cmdB)]); - -async function promise_test_both_roles(f, name) { - promise_test(async t => f(t, await setupAB(t, true, false)), name); - promise_test(async t => f(t, await setupAB(t, false, true)), - `${name} with roles reversed`); -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/RTCRtpCapabilities-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/RTCRtpCapabilities-helper.js deleted file mode 100755 index fb297c35f..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/RTCRtpCapabilities-helper.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict' - -// Test is based on the following editor draft: -// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html - -// This file depends on dictionary-helper.js which should -// be loaded from the main HTML file. - -/* - 5.2. RTCRtpSender Interface - dictionary RTCRtpCapabilities { - sequence codecs; - sequence headerExtensions; - }; - - dictionary RTCRtpCodecCapability { - DOMString mimeType; - unsigned long clockRate; - unsigned short channels; - DOMString sdpFmtpLine; - }; - - dictionary RTCRtpHeaderExtensionCapability { - DOMString uri; - }; - */ - -function validateRtpCapabilities(capabilities) { - assert_array_field(capabilities, 'codecs'); - for(const codec of capabilities.codecs) { - validateCodecCapability(codec); - } - - assert_greater_than(capabilities.codecs.length, 0, - 'Expect at least one codec capability available'); - - assert_array_field(capabilities, 'headerExtensions'); - for(const headerExt of capabilities.headerExtensions) { - validateHeaderExtensionCapability(headerExt); - } -} - -function validateCodecCapability(codec) { - assert_optional_string_field(codec, 'mimeType'); - assert_optional_unsigned_int_field(codec, 'clockRate'); - assert_optional_unsigned_int_field(codec, 'channels'); - assert_optional_string_field(codec, 'sdpFmtpLine'); -} - -function validateHeaderExtensionCapability(headerExt) { - assert_optional_string_field(headerExt, 'uri'); -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/RTCRtpParameters-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/RTCRtpParameters-helper.js deleted file mode 100755 index d7653c3a8..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/RTCRtpParameters-helper.js +++ /dev/null @@ -1,269 +0,0 @@ -'use strict'; - -// Test is based on the following editor draft: -// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html - -// Helper function for testing RTCRtpParameters dictionary fields - -// This file depends on dictionary-helper.js which should -// be loaded from the main HTML file. - -// An offer/answer exchange is necessary for getParameters() to have any -// negotiated parameters to return. -async function doOfferAnswerExchange(t, caller) { - const callee = new RTCPeerConnection(); - t.add_cleanup(() => callee.close()); - const offer = await caller.createOffer(); - await caller.setLocalDescription(offer); - await callee.setRemoteDescription(offer); - const answer = await callee.createAnswer(); - await callee.setLocalDescription(answer); - await caller.setRemoteDescription(answer); - - return callee; -} - -/* - Validates the RTCRtpParameters returned from RTCRtpSender.prototype.getParameters - - 5.2. RTCRtpSender Interface - getParameters - - transactionId is set to a new unique identifier, used to match this getParameters - call to a setParameters call that may occur later. - - - encodings is set to the value of the [[SendEncodings]] internal slot. - - - The headerExtensions sequence is populated based on the header extensions that - have been negotiated for sending. - - - The codecs sequence is populated based on the codecs that have been negotiated - for sending, and which the user agent is currently capable of sending. If - setParameters has removed or reordered codecs, getParameters MUST return the - shortened/reordered list. However, every time codecs are renegotiated by a - new offer/answer exchange, the list of codecs MUST be restored to the full - negotiated set, in the priority order indicated by the remote description, - in effect discarding the effects of setParameters. - - - rtcp.cname is set to the CNAME of the associated RTCPeerConnection. rtcp.reducedSize - is set to true if reduced-size RTCP has been negotiated for sending, and false otherwise. - */ -function validateSenderRtpParameters(param) { - validateRtpParameters(param); - - assert_array_field(param, 'encodings'); - for(const encoding of param.encodings) { - validateEncodingParameters(encoding); - } - - assert_not_equals(param.transactionId, undefined, - 'Expect sender param.transactionId to be set'); - - assert_not_equals(param.rtcp.cname, undefined, - 'Expect sender param.rtcp.cname to be set'); - - assert_not_equals(param.rtcp.reducedSize, undefined, - 'Expect sender param.rtcp.reducedSize to be set to either true or false'); -} - -/* - Validates the RTCRtpParameters returned from RTCRtpReceiver.prototype.getParameters - - 5.3. RTCRtpReceiver Interface - getParameters - When getParameters is called, the RTCRtpParameters dictionary is constructed - as follows: - - - The headerExtensions sequence is populated based on the header extensions that - the receiver is currently prepared to receive. - - - The codecs sequence is populated based on the codecs that the receiver is currently - prepared to receive. - - - rtcp.reducedSize is set to true if the receiver is currently prepared to receive - reduced-size RTCP packets, and false otherwise. rtcp.cname is left undefined. - - - transactionId is left undefined. - */ -function validateReceiverRtpParameters(param) { - validateRtpParameters(param); - - assert_equals(param.transactionId, undefined, - 'Expect receiver param.transactionId to be unset'); - - assert_not_equals(param.rtcp.reducedSize, undefined, - 'Expect receiver param.rtcp.reducedSize to be set'); - - assert_equals(param.rtcp.cname, undefined, - 'Expect receiver param.rtcp.cname to be unset'); -} - -/* - dictionary RTCRtpParameters { - DOMString transactionId; - sequence encodings; - sequence headerExtensions; - RTCRtcpParameters rtcp; - sequence codecs; - }; - - */ -function validateRtpParameters(param) { - assert_optional_string_field(param, 'transactionId'); - - assert_array_field(param, 'headerExtensions'); - for(const headerExt of param.headerExtensions) { - validateHeaderExtensionParameters(headerExt); - } - - assert_dict_field(param, 'rtcp'); - validateRtcpParameters(param.rtcp); - - assert_array_field(param, 'codecs'); - for(const codec of param.codecs) { - validateCodecParameters(codec); - } -} - -/* - dictionary RTCRtpEncodingParameters { - boolean active; - unsigned long maxBitrate; - - [readonly] - DOMString rid; - - double scaleResolutionDownBy; - }; - - */ -function validateEncodingParameters(encoding) { - assert_optional_boolean_field(encoding, 'active'); - assert_optional_unsigned_int_field(encoding, 'maxBitrate'); - - assert_optional_string_field(encoding, 'rid'); - assert_optional_number_field(encoding, 'scaleResolutionDownBy'); -} - -/* - dictionary RTCRtcpParameters { - [readonly] - DOMString cname; - - [readonly] - boolean reducedSize; - }; - */ -function validateRtcpParameters(rtcp) { - assert_optional_string_field(rtcp, 'cname'); - assert_optional_boolean_field(rtcp, 'reducedSize'); -} - -/* - dictionary RTCRtpHeaderExtensionParameters { - [readonly] - DOMString uri; - - [readonly] - unsigned short id; - - [readonly] - boolean encrypted; - }; - */ -function validateHeaderExtensionParameters(headerExt) { - assert_optional_string_field(headerExt, 'uri'); - assert_optional_unsigned_int_field(headerExt, 'id'); - assert_optional_boolean_field(headerExt, 'encrypted'); -} - -/* - dictionary RTCRtpCodecParameters { - [readonly] - unsigned short payloadType; - - [readonly] - DOMString mimeType; - - [readonly] - unsigned long clockRate; - - [readonly] - unsigned short channels; - - [readonly] - DOMString sdpFmtpLine; - }; - */ -function validateCodecParameters(codec) { - assert_optional_unsigned_int_field(codec, 'payloadType'); - assert_optional_string_field(codec, 'mimeType'); - assert_optional_unsigned_int_field(codec, 'clockRate'); - assert_optional_unsigned_int_field(codec, 'channels'); - assert_optional_string_field(codec, 'sdpFmtpLine'); -} - -// Get the first encoding in param.encodings. -// Asserts that param.encodings has at least one element. -function getFirstEncoding(param) { - const { - encodings - } = param; - assert_equals(encodings.length, 1); - return encodings[0]; -} - -// Helper function to test that modifying an encoding field should succeed -function test_modified_encoding(kind, field, value1, value2, desc) { - promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - const { - sender - } = pc.addTransceiver(kind, { - sendEncodings: [{ - [field]: value1 - }] - }); - await doOfferAnswerExchange(t, pc); - - const param1 = sender.getParameters(); - validateSenderRtpParameters(param1); - const encoding1 = getFirstEncoding(param1); - - assert_equals(encoding1[field], value1); - encoding1[field] = value2; - - await sender.setParameters(param1); - const param2 = sender.getParameters(); - validateSenderRtpParameters(param2); - const encoding2 = getFirstEncoding(param2); - assert_equals(encoding2[field], value2); - }, desc + ' with RTCRtpTransceiverInit'); - - promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - const { - sender - } = pc.addTransceiver(kind); - await doOfferAnswerExchange(t, pc); - - const initParam = sender.getParameters(); - validateSenderRtpParameters(initParam); - initParam.encodings[0][field] = value1; - await sender.setParameters(initParam); - - const param1 = sender.getParameters(); - validateSenderRtpParameters(param1); - const encoding1 = getFirstEncoding(param1); - - assert_equals(encoding1[field], value1); - encoding1[field] = value2; - - await sender.setParameters(param1); - const param2 = sender.getParameters(); - validateSenderRtpParameters(param2); - const encoding2 = getFirstEncoding(param2); - assert_equals(encoding2[field], value2); - }, desc + ' without RTCRtpTransceiverInit'); -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/RTCStats-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/RTCStats-helper.js deleted file mode 100755 index 33cbf4a93..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/RTCStats-helper.js +++ /dev/null @@ -1,1073 +0,0 @@ -'use strict'; - -// Test is based on the following editor draft: -// webrtc-pc 20171130 -// webrtc-stats 20171122 - -// This file depends on dictionary-helper.js which should -// be loaded from the main HTML file. - -/* - [webrtc-stats] - 6.1. RTCStatsType enum - enum RTCStatsType { - "codec", - "inbound-rtp", - "outbound-rtp", - "remote-inbound-rtp", - "remote-outbound-rtp", - "csrc", - "peer-connection", - "data-channel", - "stream", - "track", - "transport", - "candidate-pair", - "local-candidate", - "remote-candidate", - "certificate", - "ice-server" - }; - */ -const statsValidatorTable = { - 'codec': validateCodecStats, - 'inbound-rtp': validateInboundRtpStreamStats, - 'outbound-rtp': validateOutboundRtpStreamStats, - 'remote-inbound-rtp': validateRemoteInboundRtpStreamStats, - 'remote-outbound-rtp': validateRemoteOutboundRtpStreamStats, - 'media-source': validateMediaSourceStats, - 'csrc': validateContributingSourceStats, - 'peer-connection': validatePeerConnectionStats, - 'data-channel': validateDataChannelStats, - 'transceiver': validateTransceiverStats, - 'sender': validateSenderStats, - 'receiver': validateReceiverStats, - 'transport': validateTransportStats, - 'candidate-pair': validateIceCandidatePairStats, - 'local-candidate': validateIceCandidateStats, - 'remote-candidate': validateIceCandidateStats, - 'certificate': validateCertificateStats, - 'ice-server': validateIceServerStats -}; - -// Validate that the stats objects in a stats report -// follows the respective definitions. -// Stats objects with unknown type are ignored and -// only basic validation is done. -function validateStatsReport(statsReport) { - for(const [id, stats] of statsReport.entries()) { - assert_equals(stats.id, id, - 'expect stats.id to be the same as the key in statsReport'); - - const validator = statsValidatorTable[stats.type]; - if(validator) { - validator(statsReport, stats); - } else { - validateRtcStats(statsReport, stats); - } - } -} - -// Assert that the stats report have stats objects of -// given types -function assert_stats_report_has_stats(statsReport, statsTypes) { - const hasTypes = new Set([...statsReport.values()] - .map(stats => stats.type)); - - for(const type of statsTypes) { - assert_true(hasTypes.has(type), - `Expect statsReport to contain stats object of type ${type}`); - } -} - -function findStatsFromReport(statsReport, predicate, message) { - for (const stats of statsReport.values()) { - if (predicate(stats)) { - return stats; - } - } - - assert_unreached(message || 'none of stats in statsReport satisfy given condition') -} - -// Get stats object of type that is expected to be -// found in the statsReport -function getRequiredStats(statsReport, type) { - for(const stats of statsReport.values()) { - if(stats.type === type) { - return stats; - } - } - - assert_unreached(`required stats of type ${type} is not found in stats report`); -} - -// Get stats object by the stats ID. -// This is used to retreive other stats objects -// linked to a stats object -function getStatsById(statsReport, statsId) { - assert_true(statsReport.has(statsId), - `Expect stats report to have stats object with id ${statsId}`); - - return statsReport.get(statsId); -} - -// Validate an ID field in a stats object by making sure -// that the linked stats object is found in the stats report -// and have the type field value same as expected type -// It doesn't validate the other fields of the linked stats -// as validateStatsReport already does all validations -function validateIdField(statsReport, stats, field, type) { - assert_string_field(stats, field); - const linkedStats = getStatsById(statsReport, stats[field]); - assert_equals(linkedStats.type, type, - `Expect linked stats object to have type ${type}`); -} - -function validateOptionalIdField(statsReport, stats, field, type) { - if(stats[field] !== undefined) { - validateIdField(statsReport, stats, field, type); - } -} - -/* - [webrtc-pc] - 8.4. RTCStats Dictionary - dictionary RTCStats { - required DOMHighResTimeStamp timestamp; - required RTCStatsType type; - required DOMString id; - }; - */ -function validateRtcStats(statsReport, stats) { - assert_number_field(stats, 'timestamp'); - assert_string_field(stats, 'type'); - assert_string_field(stats, 'id'); -} - -/* - [webrtc-stats] - 7.1. RTCRtpStreamStats dictionary - dictionary RTCRtpStreamStats : RTCStats { - unsigned long ssrc; - DOMString kind; - DOMString transportId; - DOMString codecId; - }; - - kind of type DOMString - Either "audio" or "video". - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCRtpStreamStats, with attributes ssrc, kind, transportId, codecId - */ -function validateRtpStreamStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - assert_unsigned_int_field(stats, 'ssrc'); - assert_string_field(stats, 'kind'); - assert_enum_field(stats, 'kind', ['audio', 'video']) - - validateIdField(statsReport, stats, 'transportId', 'transport'); - validateIdField(statsReport, stats, 'codecId', 'codec'); - -} - -/* - [webrtc-stats] - 7.2. RTCCodecStats dictionary - dictionary RTCCodecStats : RTCStats { - required unsigned long payloadType; - RTCCodecType codecType; - required DOMString transportId; - required DOMString mimeType; - unsigned long clockRate; - unsigned long channels; - DOMString sdpFmtpLine; - }; - - enum RTCCodecType { - "encode", - "decode", - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCCodecStats, with attributes payloadType, codecType, mimeType, clockRate, channels, sdpFmtpLine - */ - -function validateCodecStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - assert_unsigned_int_field(stats, 'payloadType'); - assert_optional_enum_field(stats, 'codecType', ['encode', 'decode']); - - validateOptionalIdField(statsReport, stats, 'transportId', 'transport'); - - assert_string_field(stats, 'mimeType'); - assert_unsigned_int_field(stats, 'clockRate'); - if (stats.kind === 'audio') { - assert_unsigned_int_field(stats, 'channels'); - } - assert_string_field(stats, 'sdpFmtpLine'); -} - -/* - [webrtc-stats] - 7.3. RTCReceivedRtpStreamStats dictionary - dictionary RTCReceivedRtpStreamStats : RTCRtpStreamStats { - unsigned long long packetsReceived; - long long packetsLost; - double jitter; - unsigned long long packetsDiscarded; - unsigned long long packetsRepaired; - unsigned long long burstPacketsLost; - unsigned long long burstPacketsDiscarded; - unsigned long burstLossCount; - unsigned long burstDiscardCount; - double burstLossRate; - double burstDiscardRate; - double gapLossRate; - double gapDiscardRate; - unsigned long framesDropped; - unsigned long partialFramesLost; - unsigned long fullFramesLost; - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCReceivedRtpStreamStats, with all required attributes from its - inherited dictionaries, and also attributes packetsReceived, - packetsLost, jitter, packetsDiscarded, framesDropped - */ -function validateReceivedRtpStreamStats(statsReport, stats) { - validateRtpStreamStats(statsReport, stats); - - assert_unsigned_int_field(stats, 'packetsReceived'); - assert_unsigned_int_field(stats, 'packetsLost'); - - assert_number_field(stats, 'jitter'); - - assert_unsigned_int_field(stats, 'packetsDiscarded'); - assert_unsigned_int_field(stats, 'framesDropped'); - - assert_optional_unsigned_int_field(stats, 'packetsRepaired'); - assert_optional_unsigned_int_field(stats, 'burstPacketsLost'); - assert_optional_unsigned_int_field(stats, 'burstPacketsDiscarded'); - assert_optional_unsigned_int_field(stats, 'burstLossCount'); - assert_optional_unsigned_int_field(stats, 'burstDiscardCount'); - - assert_optional_number_field(stats, 'burstLossRate'); - assert_optional_number_field(stats, 'burstDiscardRate'); - assert_optional_number_field(stats, 'gapLossRate'); - assert_optional_number_field(stats, 'gapDiscardRate'); - - assert_optional_unsigned_int_field(stats, 'partialFramesLost'); - assert_optional_unsigned_int_field(stats, 'fullFramesLost'); -} - -/* - [webrtc-stats] - 7.4. RTCInboundRtpStreamStats dictionary - dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats { - DOMString trackId; - DOMString receiverId; - DOMString remoteId; - unsigned long framesDecoded; - unsigned long keyFramesDecoded; - unsigned long frameWidth; - unsigned long frameHeight; - unsigned long frameBitDepth; - double framesPerSecond; - unsigned long long qpSum; - double totalDecodeTime; - double totalInterFrameDelay; - double totalSquaredInterFrameDelay; - boolean voiceActivityFlag; - DOMHighResTimeStamp lastPacketReceivedTimestamp; - double averageRtcpInterval; - unsigned long long headerBytesReceived; - unsigned long long fecPacketsReceived; - unsigned long long fecPacketsDiscarded; - unsigned long long bytesReceived; - unsigned long long packetsFailedDecryption; - unsigned long long packetsDuplicated; - record perDscpPacketsReceived; - unsigned long nackCount; - unsigned long firCount; - unsigned long pliCount; - unsigned long sliCount; - DOMHighResTimeStamp estimatedPlayoutTimestamp; - double jitterBufferDelay; - unsigned long long jitterBufferEmittedCount; - unsigned long long totalSamplesReceived; - unsigned long long samplesDecodedWithSilk; - unsigned long long samplesDecodedWithCelt; - unsigned long long concealedSamples; - unsigned long long silentConcealedSamples; - unsigned long long concealmentEvents; - unsigned long long insertedSamplesForDeceleration; - unsigned long long removedSamplesForAcceleration; - double audioLevel; - double totalAudioEnergy; - double totalSamplesDuration; - unsigned long framesReceived; - DOMString decoderImplementation; - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCInboundRtpStreamStats, with all required attributes from its inherited - dictionaries, and also attributes receiverId, remoteId, framesDecoded, nackCount, framesReceived, bytesReceived, totalAudioEnergy, totalSampleDuration - */ -function validateInboundRtpStreamStats(statsReport, stats) { - validateReceivedRtpStreamStats(statsReport, stats); - validateOptionalIdField(statsReport, stats, 'trackId', 'track'); - validateIdField(statsReport, stats, 'receiverId', 'receiver'); - validateIdField(statsReport, stats, 'remoteId', 'remote-outbound-rtp'); - assert_unsigned_int_field(stats, 'framesDecoded'); - assert_optional_unsigned_int_field(stats, 'keyFramesDecoded'); - assert_optional_unsigned_int_field(stats, 'frameWidth'); - assert_optional_unsigned_int_field(stats, 'frameHeight'); - assert_optional_unsigned_int_field(stats, 'frameBitDepth'); - assert_optional_number_field(stats, 'framesPerSecond'); - assert_optional_unsigned_int_field(stats, 'qpSum'); - assert_optional_number_field(stats, 'totalDecodeTime'); - assert_optional_number_field(stats, 'totalInterFrameDelay'); - assert_optional_number_field(stats, 'totalSquaredInterFrameDelay'); - - assert_optional_boolean_field(stats, 'voiceActivityFlag'); - - assert_optional_number_field(stats, 'lastPacketReceivedTimeStamp'); - assert_optional_number_field(stats, 'averageRtcpInterval'); - - assert_optional_unsigned_int_field(stats, 'fecPacketsReceived'); - assert_optional_unsigned_int_field(stats, 'fecPacketsDiscarded'); - assert_unsigned_int_field(stats, 'bytesReceived'); - assert_optional_unsigned_int_field(stats, 'packetsFailedDecryption'); - assert_optional_unsigned_int_field(stats, 'packetsDuplicated'); - - assert_optional_dict_field(stats, 'perDscpPacketsReceived'); - if (stats['perDscpPacketsReceived']) { - Object.keys(stats['perDscpPacketsReceived']) - .forEach(k => - assert_equals(typeof k, 'string', 'Expect keys of perDscpPacketsReceived to be strings') - ); - Object.values(stats['perDscpPacketsReceived']) - .forEach(v => - assert_true(Number.isInteger(v) && (v >= 0), 'Expect values of perDscpPacketsReceived to be strings') - ); - } - - assert_unsigned_int_field(stats, 'nackCount'); - - assert_optional_unsigned_int_field(stats, 'firCount'); - assert_optional_unsigned_int_field(stats, 'pliCount'); - assert_optional_unsigned_int_field(stats, 'sliCount'); - - assert_optional_number_field(stats, 'estimatedPlayoutTimestamp'); - assert_optional_number_field(stats, 'jitterBufferDelay'); - assert_optional_unsigned_int_field(stats, 'jitterBufferEmittedCount'); - assert_optional_unsigned_int_field(stats, 'totalSamplesReceived'); - assert_optional_unsigned_int_field(stats, 'samplesDecodedWithSilk'); - assert_optional_unsigned_int_field(stats, 'samplesDecodedWithCelt'); - assert_optional_unsigned_int_field(stats, 'concealedSamples'); - assert_optional_unsigned_int_field(stats, 'silentConcealedSamples'); - assert_optional_unsigned_int_field(stats, 'concealmentEvents'); - assert_optional_unsigned_int_field(stats, 'insertedSamplesForDeceleration'); - assert_optional_unsigned_int_field(stats, 'removedSamplesForAcceleration'); - assert_optional_number_field(stats, 'audioLevel'); - assert_optional_number_field(stats, 'totalAudioEnergy'); - assert_optional_number_field(stats, 'totalSamplesDuration'); - assert_unsigned_int_field(stats, 'framesReceived'); - assert_optional_string_field(stats, 'decoderImplementation'); -} - -/* - [webrtc-stats] - 7.5. RTCRemoteInboundRtpStreamStats dictionary - dictionary RTCRemoteInboundRtpStreamStats : RTCReceivedRtpStreamStats { - DOMString localId; - double roundTripTime; - double totalRoundTripTime; - double fractionLost; - unsigned long long reportsReceived; - unsigned long long roundTripTimeMeasurements; - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCRemoteInboundRtpStreamStats, with all required attributes from its - inherited dictionaries, and also attributes localId, roundTripTime - */ -function validateRemoteInboundRtpStreamStats(statsReport, stats) { - validateReceivedRtpStreamStats(statsReport, stats); - - validateIdField(statsReport, stats, 'localId', 'outbound-rtp'); - assert_number_field(stats, 'roundTripTime'); - assert_optional_number_field(stats, 'totalRoundTripTime'); - assert_optional_number_field(stats, 'fractionLost'); - assert_optional_unsigned_int_field(stats, 'reportsReceived'); - assert_optional_unsigned_int_field(stats, 'roundTripTimeMeasurements'); -} - -/* - [webrtc-stats] - 7.6. RTCSentRtpStreamStats dictionary - dictionary RTCSentRtpStreamStats : RTCRtpStreamStats { - unsigned long packetsSent; - unsigned long long bytesSent; - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCSentRtpStreamStats, with all required attributes from its inherited - dictionaries, and also attributes packetsSent, bytesSent - */ -function validateSentRtpStreamStats(statsReport, stats) { - validateRtpStreamStats(statsReport, stats); - - assert_unsigned_int_field(stats, 'packetsSent'); - assert_unsigned_int_field(stats, 'bytesSent'); -} - -/* - [webrtc-stats] - 7.7. RTCOutboundRtpStreamStats dictionary - dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats { - DOMString mediaSourceId; - DOMString senderId; - DOMString remoteId; - DOMString rid; - DOMHighResTimeStamp lastPacketSentTimestamp; - unsigned long long headerBytesSent; - unsigned long packetsDiscardedOnSend; - unsigned long long bytesDiscardedOnSend; - unsigned long fecPacketsSent; - unsigned long long retransmittedPacketsSent; - unsigned long long retransmittedBytesSent; - double targetBitrate; - unsigned long long totalEncodedBytesTarget; - unsigned long frameWidth; - unsigned long frameHeight; - unsigned long frameBitDepth; - double framesPerSecond; - unsigned long framesSent; - unsigned long hugeFramesSent; - unsigned long framesEncoded; - unsigned long keyFramesEncoded; - unsigned long framesDiscardedOnSend; - unsigned long long qpSum; - unsigned long long totalSamplesSent; - unsigned long long samplesEncodedWithSilk; - unsigned long long samplesEncodedWithCelt; - boolean voiceActivityFlag; - double totalEncodeTime; - double totalPacketSendDelay; - double averageRtcpInterval; - RTCQualityLimitationReason qualityLimitationReason; - record qualityLimitationDurations; - unsigned long qualityLimitationResolutionChanges; - record perDscpPacketsSent; - unsigned long nackCount; - unsigned long firCount; - unsigned long pliCount; - unsigned long sliCount; - DOMString encoderImplementation; - }; - Obsolete members: - partial dictionary RTCOutboundStreamStats { - DOMString trackId; - }; - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCOutboundRtpStreamStats, with all required attributes from its - inherited dictionaries, and also attributes senderId, remoteId, framesEncoded, nackCount, framesSent - */ -function validateOutboundRtpStreamStats(statsReport, stats) { - validateSentRtpStreamStats(statsReport, stats) - - validateOptionalIdField(statsReport, stats, 'mediaSourceId', 'media-source'); - validateIdField(statsReport, stats, 'senderId', 'sender'); - validateIdField(statsReport, stats, 'remoteId', 'remote-inbound-rtp'); - - assert_optional_string_field(stats, 'rid'); - - assert_optional_number_field(stats, 'lastPacketSentTimestamp'); - assert_optional_unsigned_int_field(stats, 'headerBytesSent'); - assert_optional_unsigned_int_field(stats, 'packetsDiscardedOnSend'); - assert_optional_unsigned_int_field(stats, 'bytesDiscardedOnSend'); - assert_optional_unsigned_int_field(stats, 'fecPacketsSent'); - assert_optional_unsigned_int_field(stats, 'retransmittedPacketsSent'); - assert_optional_unsigned_int_field(stats, 'retransmittedBytesSent'); - assert_optional_number_field(stats, 'targetBitrate'); - assert_optional_unsigned_int_field(stats, 'totalEncodedBytesTarget'); - if (stats['kind'] === 'video') { - assert_optional_unsigned_int_field(stats, 'frameWidth'); - assert_optional_unsigned_int_field(stats, 'frameHeight'); - assert_optional_unsigned_int_field(stats, 'frameBitDepth'); - assert_optional_number_field(stats, 'framesPerSecond'); - assert_unsigned_int_field(stats, 'framesSent'); - assert_optional_unsigned_int_field(stats, 'hugeFramesSent'); - assert_unsigned_int_field(stats, 'framesEncoded'); - assert_optional_unsigned_int_field(stats, 'keyFramesEncoded'); - assert_optional_unsigned_int_field(stats, 'framesDiscardedOnSend'); - assert_optional_unsigned_int_field(stats, 'qpSum'); - } else if (stats['kind'] === 'audio') { - assert_optional_unsigned_int_field(stats, 'totalSamplesSent'); - assert_optional_unsigned_int_field(stats, 'samplesEncodedWithSilk'); - assert_optional_unsigned_int_field(stats, 'samplesEncodedWithCelt'); - assert_optional_boolean_field(stats, 'voiceActivityFlag'); - } - assert_optional_number_field(stats, 'totalEncodeTime'); - assert_optional_number_field(stats, 'totalPacketSendDelay'); - assert_optional_number_field(stats, 'averageRTCPInterval'); - - if (stats['kind'] === 'video') { - assert_optional_enum_field(stats, 'qualityLimitationReason', ['none', 'cpu', 'bandwidth', 'other']); - - assert_optional_dict_field(stats, 'qualityLimitationDurations'); - if (stats['qualityLimitationDurations']) { - Object.keys(stats['qualityLimitationDurations']) - .forEach(k => - assert_equals(typeof k, 'string', 'Expect keys of qualityLimitationDurations to be strings') - ); - Object.values(stats['qualityLimitationDurations']) - .forEach(v => - assert_equals(typeof num, 'number', 'Expect values of qualityLimitationDurations to be numbers') - ); - } - - assert_optional_unsigned_int_field(stats, 'qualityLimitationResolutionChanges'); - } - assert_unsigned_int_field(stats, 'nackCount'); - assert_optional_dict_field(stats, 'perDscpPacketsSent'); - if (stats['perDscpPacketsSent']) { - Object.keys(stats['perDscpPacketsSent']) - .forEach(k => - assert_equals(typeof k, 'string', 'Expect keys of perDscpPacketsSent to be strings') - ); - Object.values(stats['perDscpPacketsSent']) - .forEach(v => - assert_true(Number.isInteger(v) && (v >= 0), 'Expect values of perDscpPacketsSent to be strings') - ); - } - - assert_optional_unsigned_int_field(stats, 'firCount'); - assert_optional_unsigned_int_field(stats, 'pliCount'); - assert_optional_unsigned_int_field(stats, 'sliCount'); - assert_optional_string_field(stats, 'encoderImplementation'); - // Obsolete stats - validateOptionalIdField(statsReport, stats, 'trackId', 'track'); -} - -/* - [webrtc-stats] - 7.8. RTCRemoteOutboundRtpStreamStats dictionary - dictionary RTCRemoteOutboundRtpStreamStats : RTCSentRtpStreamStats { - DOMString localId; - DOMHighResTimeStamp remoteTimestamp; - unsigned long long reportsSent; - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCRemoteOutboundRtpStreamStats, with all required attributes from its - inherited dictionaries, and also attributes localId, remoteTimestamp - */ -function validateRemoteOutboundRtpStreamStats(statsReport, stats) { - validateSentRtpStreamStats(statsReport, stats); - - validateIdField(statsReport, stats, 'localId', 'inbound-rtp'); - assert_number_field(stats, 'remoteTimeStamp'); - assert_optional_unsigned_int_field(stats, 'reportsSent'); -} - -/* - [webrtc-stats] - 7.11 RTCMediaSourceStats dictionary - dictionary RTCMediaSourceStats : RTCStats { - DOMString trackIdentifier; - DOMString kind; - }; - - dictionary RTCAudioSourceStats : RTCMediaSourceStats { - double audioLevel; - double totalAudioEnergy; - double totalSamplesDuration; - double echoReturnLoss; - double echoReturnLossEnhancement; - }; - - dictionary RTCVideoSourceStats : RTCMediaSourceStats { - unsigned long width; - unsigned long height; - unsigned long bitDepth; - unsigned long frames; - // see https://github.com/w3c/webrtc-stats/issues/540 - double framesPerSecond; - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - RTCMediaSourceStats with attributes trackIdentifier, kind - RTCAudioSourceStats, with all required attributes from its inherited dictionaries and totalAudioEnergy, totalSamplesDuration - RTCVideoSourceStats, with all required attributes from its inherited dictionaries and width, height, framesPerSecond -*/ -function validateMediaSourceStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - assert_string_field(stats, 'trackIdentifier'); - assert_enum_field(stats, 'kind', ['audio', 'video']); - - if (stats.kind === 'audio') { - assert_optional_number_field(stats, 'audioLevel'); - assert_number_field(stats, 'totalAudioEnergy'); - assert_number_field(stats, 'totalSamplesDuration'); - assert_optional_number_field(stats, 'echoReturnLoss'); - assert_optional_number_field(stats, 'echoReturnLossEnhancement'); - } else if (stats.kind === 'video') { - assert_unsigned_int_field(stats, 'width'); - assert_unsigned_int_field(stats, 'height'); - assert_optional_unsigned_int_field(stats, 'bitDpeth'); - assert_optional_unsigned_int_field(stats, 'frames'); - assert_number_field(stats, 'framesPerSecond'); - } -} - -/* - [webrtc-stats] - 7.9. RTCRTPContributingSourceStats - dictionary RTCRTPContributingSourceStats : RTCStats { - unsigned long contributorSsrc; - DOMString inboundRtpStreamId; - unsigned long packetsContributedTo; - double audioLevel; - }; - */ -function validateContributingSourceStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - assert_optional_unsigned_int_field(stats, 'contributorSsrc'); - - validateOptionalIdField(statsReport, stats, 'inboundRtpStreamId', 'inbound-rtp'); - assert_optional_unsigned_int_field(stats, 'packetsContributedTo'); - assert_optional_number_field(stats, 'audioLevel'); -} - -/* - [webrtc-stats] - 7.10. RTCPeerConnectionStats dictionary - dictionary RTCPeerConnectionStats : RTCStats { - unsigned long dataChannelsOpened; - unsigned long dataChannelsClosed; - unsigned long dataChannelsRequested; - unsigned long dataChannelsAccepted; - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCPeerConnectionStats, with attributes dataChannelsOpened, dataChannelsClosed - */ -function validatePeerConnectionStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - assert_unsigned_int_field(stats, 'dataChannelsOpened'); - assert_unsigned_int_field(stats, 'dataChannelsClosed'); - assert_optional_unsigned_int_field(stats, 'dataChannelsRequested'); - assert_optional_unsigned_int_field(stats, 'dataChannelsAccepted'); -} - -/* [webrtc-stats] - 7.16 RTCRtpTransceiverStats dictionary - dictionary RTCRtpTransceiverStats { - DOMString senderId; - DOMString receiverId; - DOMString mid; - }; -*/ -function validateTransceiverStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - validateOptionalIdField(statsReport, stats, 'senderId', 'sender'); - validateOptionalIdField(statsReport, stats, 'receiverId', 'sender'); - assert_optional_string_field(stats, 'mid'); -} - -/* - [webrtc-stats] - dictionary RTCMediaHandlerStats : RTCStats { - DOMString trackIdentifier; - boolean remoteSource; - boolean ended; - DOMString kind; - RTCPriorityType priority; - }; - dictionary RTCVideoHandlerStats : RTCMediaHandlerStats { - }; - dictionary RTCAudioHandlerStats : RTCMediaHandlerStats { - }; - Used from validateSenderStats and validateReceiverStats - - [webrtc-priority] - enum RTCPriorityType { - "very-low", - "low", - "medium", - "high" - }; - - [webrtc-pc] - MTI: - RTCMediaHandlerStats with attributes trackIdentifier - RTCAudioHandlerStats, with all required attributes from its inherited dictionaries - RTCVideoHandlerStats, with all required attributes from its inherited dictionaries - -*/ -function validateMediaHandlerStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - assert_string_field(stats, 'trackIdentifier'); - assert_optional_boolean_field(stats, 'remoteSource'); - assert_optional_boolean_field(stats, 'ended'); - assert_optional_string_field(stats, 'kind'); - assert_enum_field(stats, 'priority', ['very-low', 'low', 'medium', 'high']); -} - -/* - [webrtc-stats] - dictionary RTCAudioSenderStats : RTCAudioHandlerStats { - DOMString mediaSourceId; - }; - dictionary RTCVideoSenderStats : RTCVideoHandlerStats { - DOMString mediaSourceId; - }; - - [webrtc-pc] - MTI: - RTCVideoSenderStats, with all required attributes from its inherited dictionaries -*/ -function validateSenderStats(statsReport, stats) { - validateMediaHandlerStats(statsReport, stats); - validateOptionalIdField(statsReport, stats, 'mediaSourceId', 'media-source'); -} - -/* - [webrtc-stats] - dictionary RTCAudioReceiverStats : RTCAudioHandlerStats { - }; - dictionary RTCVideoReceiverStats : RTCVideoHandlerStats { - }; - - [webrtc-pc] - MTI: - RTCVideoReceiverStats, with all required attributes from its inherited dictionaries -*/ -function validateReceiverStats(statsReport, stats) { - validateMediaHandlerStats(statsReport, stats); -} - - -/* - [webrtc-stats] - 7.13. RTCDataChannelStats dictionary - dictionary RTCDataChannelStats : RTCStats { - DOMString label; - DOMString protocol; - // see https://github.com/w3c/webrtc-stats/issues/541 - unsigned short dataChannelIdentifier; - DOMString transportId; - RTCDataChannelState state; - unsigned long messagesSent; - unsigned long long bytesSent; - unsigned long messagesReceived; - unsigned long long bytesReceived; - }; - - [webrtc-pc] - 6.2. RTCDataChannel - enum RTCDataChannelState { - "connecting", - "open", - "closing", - "closed" - }; - - 8.6. Mandatory To Implement Stats - - RTCDataChannelStats, with attributes label, protocol, datachannelIdentifier, state, - messagesSent, bytesSent, messagesReceived, bytesReceived - */ -function validateDataChannelStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - assert_string_field(stats, 'label'); - assert_string_field(stats, 'protocol'); - assert_unsigned_int_field(stats, 'dataChannelIdentifier'); - - validateOptionalIdField(statsReport, stats, 'transportId', 'transport'); - - assert_enum_field(stats, 'state', - ['connecting', 'open', 'closing', 'closed']); - - assert_unsigned_int_field(stats, 'messagesSent'); - assert_unsigned_int_field(stats, 'bytesSent'); - assert_unsigned_int_field(stats, 'messagesReceived'); - assert_unsigned_int_field(stats, 'bytesReceived'); -} - -/* - [webrtc-stats] - 7.14. RTCTransportStats dictionary - dictionary RTCTransportStats : RTCStats { - unsigned long long packetsSent; - unsigned long long packetsReceived; - unsigned long long bytesSent; - unsigned long long bytesReceived; - DOMString rtcpTransportStatsId; - RTCIceRole iceRole; - RTCDtlsTransportState dtlsState; - DOMString selectedCandidatePairId; - DOMString localCertificateId; - DOMString remoteCertificateId; - DOMString tlsVersion; - DOMString dtlsCipher; - DOMString srtpCipher; - DOMString tlsGroup; - unsigned long selectedCandidatePairChanges; - }; - - [webrtc-pc] - 5.5. RTCDtlsTransportState Enum - enum RTCDtlsTransportState { - "new", - "connecting", - "connected", - "closed", - "failed" - }; - - 5.6. RTCIceRole Enum - enum RTCIceRole { - "unknown", - "controlling", - "controlled" - }; - - 8.6. Mandatory To Implement Stats - - RTCTransportStats, with attributes bytesSent, bytesReceived, - selectedCandidatePairId, localCertificateId, - remoteCertificateId - */ -function validateTransportStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - assert_optional_unsigned_int_field(stats, 'packetsSent'); - assert_optional_unsigned_int_field(stats, 'packetsReceived'); - assert_unsigned_int_field(stats, 'bytesSent'); - assert_unsigned_int_field(stats, 'bytesReceived'); - - validateOptionalIdField(statsReport, stats, 'rtcpTransportStatsId', - 'transport'); - - assert_optional_enum_field(stats, 'iceRole', - ['unknown', 'controlling', 'controlled']); - - assert_optional_enum_field(stats, 'dtlsState', - ['new', 'connecting', 'connected', 'closed', 'failed']); - - validateIdField(statsReport, stats, 'selectedCandidatePairId', 'candidate-pair'); - validateIdField(statsReport, stats, 'localCertificateId', 'certificate'); - validateIdField(statsReport, stats, 'remoteCertificateId', 'certificate'); - assert_optional_string_field(stats, 'tlsVersion'); - assert_optional_string_field(stats, 'dtlsCipher'); - assert_optional_string_field(stats, 'srtpCipher'); - assert_optional_string_field(stats, 'tlsGroup'); - assert_optional_unsigned_int_field(stats, 'selectedCandidatePairChanges'); -} - -/* - [webrtc-stats] - 7.15. RTCIceCandidateStats dictionary - dictionary RTCIceCandidateStats : RTCStats { - required DOMString transportId; - DOMString? address; - long port; - DOMString protocol; - RTCIceCandidateType candidateType; - long priority; - DOMString url; - DOMString relayProtocol; - }; - - [webrtc-pc] - 4.8.1.3. RTCIceCandidateType Enum - enum RTCIceCandidateType { - "host", - "srflx", - "prflx", - "relay" - }; - - 8.6. Mandatory To Implement Stats - - RTCIceCandidateStats, with attributes address, port, protocol, candidateType, url - */ -function validateIceCandidateStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - validateIdField(statsReport, stats, 'transportId', 'transport'); - // The address is mandatory to implement, but is allowed to be null - // when hidden for privacy reasons. - if (stats.address != null) { - // Departure from strict spec reading: - // This field is populated in a racy manner in Chrome. - // We allow it to be present or not present for the time being. - // TODO(https://bugs.chromium.org/1092721): Become consistent. - assert_optional_string_field(stats, 'address'); - } - assert_unsigned_int_field(stats, 'port'); - assert_string_field(stats, 'protocol'); - - assert_enum_field(stats, 'candidateType', - ['host', 'srflx', 'prflx', 'relay']); - - assert_optional_int_field(stats, 'priority'); - // The url field is mandatory for local candidates gathered from - // a STUN or TURN server, and MUST NOT be present otherwise. - // TODO(hta): Improve checking. - assert_optional_string_field(stats, 'url'); - assert_optional_string_field(stats, 'relayProtocol'); -} - -/* - [webrtc-stats] - 7.16. RTCIceCandidatePairStats dictionary - dictionary RTCIceCandidatePairStats : RTCStats { - DOMString transportId; - DOMString localCandidateId; - DOMString remoteCandidateId; - RTCStatsIceCandidatePairState state; - boolean nominated; - unsigned long packetsSent; - unsigned long packetsReceived; - unsigned long long bytesSent; - unsigned long long bytesReceived; - DOMHighResTimeStamp lastPacketSentTimestamp; - DOMHighResTimeStamp lastPacketReceivedTimestamp; - DOMHighResTimeStamp firstRequestTimestamp; - DOMHighResTimeStamp lastRequestTimestamp; - DOMHighResTimeStamp lastResponseTimestamp; - double totalRoundTripTime; - double currentRoundTripTime; - double availableOutgoingBitrate; - double availableIncomingBitrate; - unsigned long circuitBreakerTriggerCount; - unsigned long long requestsReceived; - unsigned long long requestsSent; - unsigned long long responsesReceived; - unsigned long long responsesSent; - unsigned long long retransmissionsReceived; - unsigned long long retransmissionsSent; - unsigned long long consentRequestsSent; - DOMHighResTimeStamp consentExpiredTimestamp; - unsigned long packetsDiscardedOnSend; - unsigned long long bytesDiscardedOnSend; }; - - enum RTCStatsIceCandidatePairState { - "frozen", - "waiting", - "in-progress", - "failed", - "succeeded" - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCIceCandidatePairStats, with attributes transportId, localCandidateId, - remoteCandidateId, state, nominated, bytesSent, bytesReceived, totalRoundTripTime, currentRoundTripTime - // not including priority per https://github.com/w3c/webrtc-pc/issues/2457 - */ -function validateIceCandidatePairStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - validateIdField(statsReport, stats, 'transportId', 'transport'); - validateIdField(statsReport, stats, 'localCandidateId', 'local-candidate'); - validateIdField(statsReport, stats, 'remoteCandidateId', 'remote-candidate'); - - assert_enum_field(stats, 'state', - ['frozen', 'waiting', 'in-progress', 'failed', 'succeeded']); - - assert_boolean_field(stats, 'nominated'); - assert_optional_unsigned_int_field(stats, 'packetsSent'); - assert_optional_unsigned_int_field(stats, 'packetsReceived'); - assert_unsigned_int_field(stats, 'bytesSent'); - assert_unsigned_int_field(stats, 'bytesReceived'); - - assert_optional_number_field(stats, 'lastPacketSentTimestamp'); - assert_optional_number_field(stats, 'lastPacketReceivedTimestamp'); - assert_optional_number_field(stats, 'firstRequestTimestamp'); - assert_optional_number_field(stats, 'lastRequestTimestamp'); - assert_optional_number_field(stats, 'lastResponseTimestamp'); - - assert_number_field(stats, 'totalRoundTripTime'); - assert_number_field(stats, 'currentRoundTripTime'); - - assert_optional_number_field(stats, 'availableOutgoingBitrate'); - assert_optional_number_field(stats, 'availableIncomingBitrate'); - - assert_optional_unsigned_int_field(stats, 'circuitBreakerTriggerCount'); - assert_optional_unsigned_int_field(stats, 'requestsReceived'); - assert_optional_unsigned_int_field(stats, 'requestsSent'); - assert_optional_unsigned_int_field(stats, 'responsesReceived'); - assert_optional_unsigned_int_field(stats, 'responsesSent'); - assert_optional_unsigned_int_field(stats, 'retransmissionsReceived'); - assert_optional_unsigned_int_field(stats, 'retransmissionsSent'); - assert_optional_unsigned_int_field(stats, 'consentRequestsSent'); - assert_optional_number_field(stats, 'consentExpiredTimestamp'); - assert_optional_unsigned_int_field(stats, 'packetsDiscardedOnSend'); - assert_optional_unsigned_int_field(stats, 'bytesDiscardedOnSend'); -} - -/* - [webrtc-stats] - 7.17. RTCCertificateStats dictionary - dictionary RTCCertificateStats : RTCStats { - DOMString fingerprint; - DOMString fingerprintAlgorithm; - DOMString base64Certificate; - DOMString issuerCertificateId; - }; - - [webrtc-pc] - 8.6. Mandatory To Implement Stats - - RTCCertificateStats, with attributes fingerprint, fingerprintAlgorithm, - base64Certificate, issuerCertificateId - */ -function validateCertificateStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - assert_string_field(stats, 'fingerprint'); - assert_string_field(stats, 'fingerprintAlgorithm'); - assert_string_field(stats, 'base64Certificate'); - assert_optional_string_field(stats, 'issuerCertificateId'); -} - -/* - [webrtc-stats] - 7.30. RTCIceServerStats dictionary - dictionary RTCIceServerStats : RTCStats { - DOMString url; - long port; - DOMString protocol; - unsigned long totalRequestsSent; - unsigned long totalResponsesReceived; - double totalRoundTripTime; - }; -*/ -function validateIceServerStats(statsReport, stats) { - validateRtcStats(statsReport, stats); - - assert_optional_string_field(stats, 'url'); - assert_optional_int_field(stats, 'port'); - assert_optional_string_field(stats, 'protocol'); - assert_optional_unsigned_int_field(stats, 'totalRequestsSent'); - assert_optional_unsigned_int_field(stats, 'totalResponsesReceived'); - assert_optional_number_field(stats, 'totalRoundTripTime'); -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/dictionary-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/dictionary-helper.js deleted file mode 100755 index dab7e49fa..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/dictionary-helper.js +++ /dev/null @@ -1,101 +0,0 @@ -'use strict'; - -// Helper assertion functions to validate dictionary fields -// on dictionary objects returned from APIs - -function assert_unsigned_int_field(object, field) { - const num = object[field]; - assert_true(Number.isInteger(num) && (num >= 0), - `Expect dictionary.${field} to be unsigned integer`); -} - -function assert_int_field(object, field) { - const num = object[field]; - assert_true(Number.isInteger(num), - `Expect dictionary.${field} to be integer`); -} - -function assert_string_field(object, field) { - const str = object[field]; - assert_equals(typeof str, 'string', - `Expect dictionary.${field} to be string`); -} - -function assert_number_field(object, field) { - const num = object[field]; - assert_equals(typeof num, 'number', - `Expect dictionary.${field} to be number`); -} - -function assert_boolean_field(object, field) { - const bool = object[field]; - assert_equals(typeof bool, 'boolean', - `Expect dictionary.${field} to be boolean`); -} - -function assert_array_field(object, field) { - assert_true(Array.isArray(object[field]), - `Expect dictionary.${field} to be array`); -} - -function assert_dict_field(object, field) { - assert_equals(typeof object[field], 'object', - `Expect dictionary.${field} to be plain object`); - - assert_not_equals(object[field], null, - `Expect dictionary.${field} to not be null`); -} - -function assert_enum_field(object, field, validValues) { - assert_string_field(object, field); - assert_true(validValues.includes(object[field]), - `Expect dictionary.${field} to have one of the valid enum values: ${validValues}`); -} - -function assert_optional_unsigned_int_field(object, field) { - if(object[field] !== undefined) { - assert_unsigned_int_field(object, field); - } -} - -function assert_optional_int_field(object, field) { - if(object[field] !== undefined) { - assert_int_field(object, field); - } -} - -function assert_optional_string_field(object, field) { - if(object[field] !== undefined) { - assert_string_field(object, field); - } -} - -function assert_optional_number_field(object, field) { - if(object[field] !== undefined) { - assert_number_field(object, field); - } -} - -function assert_optional_boolean_field(object, field) { - if(object[field] !== undefined) { - assert_boolean_field(object, field); - } -} - -function assert_optional_array_field(object, field) { - if(object[field] !== undefined) { - assert_array_field(object, field); - } -} - -function assert_optional_dict_field(object, field) { - if(object[field] !== undefined) { - assert_dict_field(object, field); - } -} - -function assert_optional_enum_field(object, field, validValues) { - if(object[field] !== undefined) { - assert_enum_field(object, field, validValues); - } -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/get-host-info.sub.js b/common/tct-webrtc-w3c-tests/webrtc/support/get-host-info.sub.js deleted file mode 100755 index fd3255363..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/get-host-info.sub.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Host information for cross-origin tests. - * @returns {Object} with properties for different host information. - */ -function get_host_info() { - - var HTTP_PORT = '8000'; - var HTTP_PORT2 = '81'; - var HTTPS_PORT = '443'; - var HTTPS_PORT2 = '444'; - var PROTOCOL = self.location.protocol; - var IS_HTTPS = (PROTOCOL == "https:"); - var PORT = IS_HTTPS ? HTTPS_PORT : HTTP_PORT; - var PORT2 = IS_HTTPS ? HTTPS_PORT2 : HTTP_PORT2; - var HTTP_PORT_ELIDED = HTTP_PORT == "80" ? "" : (":" + HTTP_PORT); - var HTTP_PORT2_ELIDED = HTTP_PORT2 == "80" ? "" : (":" + HTTP_PORT2); - var HTTPS_PORT_ELIDED = HTTPS_PORT == "443" ? "" : (":" + HTTPS_PORT); - var PORT_ELIDED = IS_HTTPS ? HTTPS_PORT_ELIDED : HTTP_PORT_ELIDED; - var ORIGINAL_HOST = 'w3c-test.org'; - var REMOTE_HOST = (ORIGINAL_HOST === 'localhost') ? '127.0.0.1' : ('www.' + ORIGINAL_HOST); - var OTHER_HOST = 'www2.w3c-test.org'; - var NOTSAMESITE_HOST = (ORIGINAL_HOST === 'localhost') ? '127.0.0.1' : ('not-web-platform.test'); - - return { - HTTP_PORT: HTTP_PORT, - HTTP_PORT2: HTTP_PORT2, - HTTPS_PORT: HTTPS_PORT, - HTTPS_PORT2: HTTPS_PORT2, - PORT: PORT, - PORT2: PORT2, - ORIGINAL_HOST: ORIGINAL_HOST, - REMOTE_HOST: REMOTE_HOST, - - ORIGIN: PROTOCOL + "//" + ORIGINAL_HOST + PORT_ELIDED, - HTTP_ORIGIN: 'http://' + ORIGINAL_HOST + HTTP_PORT_ELIDED, - HTTPS_ORIGIN: 'https://' + ORIGINAL_HOST + HTTPS_PORT_ELIDED, - HTTPS_ORIGIN_WITH_CREDS: 'https://foo:bar@' + ORIGINAL_HOST + HTTPS_PORT_ELIDED, - HTTP_ORIGIN_WITH_DIFFERENT_PORT: 'http://' + ORIGINAL_HOST + HTTP_PORT2_ELIDED, - REMOTE_ORIGIN: PROTOCOL + "//" + REMOTE_HOST + PORT_ELIDED, - OTHER_ORIGIN: PROTOCOL + "//" + OTHER_HOST + PORT_ELIDED, - HTTP_REMOTE_ORIGIN: 'http://' + REMOTE_HOST + HTTP_PORT_ELIDED, - HTTP_NOTSAMESITE_ORIGIN: 'http://' + NOTSAMESITE_HOST + HTTP_PORT_ELIDED, - HTTP_REMOTE_ORIGIN_WITH_DIFFERENT_PORT: 'http://' + REMOTE_HOST + HTTP_PORT2_ELIDED, - HTTPS_REMOTE_ORIGIN: 'https://' + REMOTE_HOST + HTTPS_PORT_ELIDED, - HTTPS_REMOTE_ORIGIN_WITH_CREDS: 'https://foo:bar@' + REMOTE_HOST + HTTPS_PORT_ELIDED, - HTTPS_NOTSAMESITE_ORIGIN: 'https://' + NOTSAMESITE_HOST + HTTPS_PORT_ELIDED, - UNAUTHENTICATED_ORIGIN: 'http://' + OTHER_HOST + HTTP_PORT_ELIDED, - AUTHENTICATED_ORIGIN: 'https://' + OTHER_HOST + HTTPS_PORT_ELIDED - }; -} - -/** - * When a default port is used, location.port returns the empty string. - * This function attempts to provide an exact port, assuming we are running under wptserve. - * @param {*} loc - can be Location///URL, but assumes http/https only. - * @returns {string} The port number. - */ -function get_port(loc) { - if (loc.port) { - return loc.port; - } - return loc.protocol === 'https:' ? '443' : '80'; -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/idlharness.https.window.js b/common/tct-webrtc-w3c-tests/webrtc/support/idlharness.https.window.js deleted file mode 100755 index 98685f1cd..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/idlharness.https.window.js +++ /dev/null @@ -1,146 +0,0 @@ -// META: script=/resources/WebIDLParser.js -// META: script=/resources/idlharness.js -// META: script=./RTCPeerConnection-helper.js -// META: timeout=long - -'use strict'; - -// The following helper functions are called from RTCPeerConnection-helper.js: -// generateAnswer() -// getNoiseStream() - -// Put the global IDL test objects under a parent object. -// This allows easier search for the test cases when -// viewing the web page -const idlTestObjects = {}; - -// Helper function to create RTCTrackEvent object -function initTrackEvent() { - const pc = new RTCPeerConnection(); - const transceiver = pc.addTransceiver('audio'); - const { sender, receiver } = transceiver; - const { track } = receiver; - return new RTCTrackEvent('track', { - receiver, track, transceiver - }); -} - -// List of async test driver functions -const asyncInitTasks = [ - asyncInitCertificate, - asyncInitTransports, - asyncInitMediaStreamTrack, -]; - -// Asynchronously generate an RTCCertificate -function asyncInitCertificate() { - return RTCPeerConnection.generateCertificate({ - name: 'RSASSA-PKCS1-v1_5', - modulusLength: 2048, - publicExponent: new Uint8Array([1, 0, 1]), - hash: 'SHA-256' - }).then(cert => { - idlTestObjects.certificate = cert; - }); -} - -// Asynchronously generate instances of -// RTCSctpTransport, RTCDtlsTransport, -// and RTCIceTransport -function asyncInitTransports() { - const pc = new RTCPeerConnection(); - pc.createDataChannel('test'); - - // setting answer description initializes pc.sctp - return pc.createOffer() - .then(offer => - pc.setLocalDescription(offer) - .then(() => generateAnswer(offer))) - .then(answer => pc.setRemoteDescription(answer)) - .then(() => { - const sctpTransport = pc.sctp; - assert_true(sctpTransport instanceof RTCSctpTransport, - 'Expect pc.sctp to be instance of RTCSctpTransport'); - idlTestObjects.sctpTransport = sctpTransport; - - const dtlsTransport = sctpTransport.transport; - assert_true(dtlsTransport instanceof RTCDtlsTransport, - 'Expect sctpTransport.transport to be instance of RTCDtlsTransport'); - idlTestObjects.dtlsTransport = dtlsTransport; - - const iceTransport = dtlsTransport.iceTransport; - assert_true(iceTransport instanceof RTCIceTransport, - 'Expect sctpTransport.transport to be instance of RTCDtlsTransport'); - idlTestObjects.iceTransport = iceTransport; - }); -} - -// Asynchoronously generate MediaStreamTrack from getUserMedia -function asyncInitMediaStreamTrack() { - return getNoiseStream({ audio: true }) - .then(mediaStream => { - idlTestObjects.mediaStreamTrack = mediaStream.getTracks()[0]; - }); -} - -// Run all async test drivers, report and swallow any error -// thrown/rejected. Proper test for correct initialization -// of the objects are done in their respective test files. -function asyncInit() { - return Promise.all(asyncInitTasks.map( - task => { - const t = async_test(`Test driver for ${task.name}`); - let promise; - t.step(() => { - promise = task().then( - t.step_func_done(), - t.step_func(err => - assert_unreached(`Failed to run ${task.name}: ${err}`))); - }); - return promise; - })); -} - -idl_test( - ['webrtc'], - ['webidl', 'mediacapture-streams', 'hr-time', 'dom', 'html'], - async idlArray => { - idlArray.add_objects({ - RTCPeerConnection: [`new RTCPeerConnection()`], - RTCSessionDescription: [`new RTCSessionDescription({ type: 'offer' })`], - RTCIceCandidate: [`new RTCIceCandidate({ sdpMid: 1 })`], - RTCDataChannel: [`new RTCPeerConnection().createDataChannel('')`], - RTCRtpTransceiver: [`new RTCPeerConnection().addTransceiver('audio')`], - RTCRtpSender: [`new RTCPeerConnection().addTransceiver('audio').sender`], - RTCRtpReceiver: [`new RTCPeerConnection().addTransceiver('audio').receiver`], - RTCPeerConnectionIceEvent: [`new RTCPeerConnectionIceEvent('ice')`], - RTCPeerConnectionIceErrorEvent: [ - `new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 });` - ], - RTCTrackEvent: [`initTrackEvent()`], - RTCErrorEvent: [`new RTCErrorEvent('error')`], - RTCDataChannelEvent: [ - `new RTCDataChannelEvent('channel', { - channel: new RTCPeerConnection().createDataChannel('') - })` - ], - // Async initialized objects below - RTCCertificate: ['idlTestObjects.certificate'], - RTCSctpTransport: ['idlTestObjects.sctpTransport'], - RTCDtlsTransport: ['idlTestObjects.dtlsTransport'], - RTCIceTransport: ['idlTestObjects.iceTransport'], - MediaStreamTrack: ['idlTestObjects.mediaStreamTrack'], - }); - /* - TODO - RTCRtpContributingSource - RTCRtpSynchronizationSource - RTCDTMFSender - RTCDTMFToneChangeEvent - RTCIdentityProviderRegistrar - RTCIdentityAssertion - */ - - await asyncInit(); - } -); diff --git a/common/tct-webrtc-w3c-tests/webrtc/support/permission-helper.js b/common/tct-webrtc-w3c-tests/webrtc/support/permission-helper.js deleted file mode 100755 index 769f3ee24..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/support/permission-helper.js +++ /dev/null @@ -1,24 +0,0 @@ -// Set permissions for camera and microphone using Web Driver -// Status can be one of "granted" or "denied" -// Scope take values from permission names -async function setMediaPermission(status="granted", scope=["camera", "microphone"]) { - try { - for (let s of scope) { - await test_driver.set_permission({ name: s }, status, true); - } - } catch (e) { - const noSetPermissionSupport = typeof e === "string" && e.match(/set_permission not implemented/); - if (!(noSetPermissionSupport || - (e instanceof Error && e.message.match("unimplemented")) )) { - throw e; - } - // Web Driver not implemented action - // FF: https://bugzilla.mozilla.org/show_bug.cgi?id=1524074 - - // with current WPT runners, will default to granted state for FF and Safari - // throw if status!="granted" to invalidate test results - if (status === "denied") { - assert_implements_optional(!noSetPermissionSupport, "Unable to set permission to denied for this test"); - } - } -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/third_party/README.md b/common/tct-webrtc-w3c-tests/webrtc/third_party/README.md deleted file mode 100755 index 56a2295dd..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/third_party/README.md +++ /dev/null @@ -1,5 +0,0 @@ -## sdp -Third-party SDP module from - https://www.npmjs.com/package/sdp -without tests or dependencies. See the commit message for version -and commit information diff --git a/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/LICENSE b/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/LICENSE deleted file mode 100755 index 09502ec0a..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2017 Philipp Hancke - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/index.html b/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/index.html deleted file mode 100755 index 474d42171..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - -Directory listing for /webrtc/third_party/sdp/ -

Directory listing for /webrtc/third_party/sdp/

-
diff --git a/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/sdp.js b/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/sdp.js deleted file mode 100755 index d2a287061..000000000 --- a/common/tct-webrtc-w3c-tests/webrtc/third_party/sdp/sdp.js +++ /dev/null @@ -1,825 +0,0 @@ -/* eslint-env node */ -'use strict'; - -// SDP helpers. -var SDPUtils = {}; - -// Generate an alphanumeric identifier for cname or mids. -// TODO: use UUIDs instead? https://gist.github.com/jed/982883 -SDPUtils.generateIdentifier = function() { - return Math.random().toString(36).substr(2, 10); -}; - -// The RTCP CNAME used by all peerconnections from the same JS. -SDPUtils.localCName = SDPUtils.generateIdentifier(); - -// Splits SDP into lines, dealing with both CRLF and LF. -SDPUtils.splitLines = function(blob) { - return blob.trim().split('\n').map(function(line) { - return line.trim(); - }); -}; -// Splits SDP into sessionpart and mediasections. Ensures CRLF. -SDPUtils.splitSections = function(blob) { - var parts = blob.split('\nm='); - return parts.map(function(part, index) { - return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; - }); -}; - -// returns the session description. -SDPUtils.getDescription = function(blob) { - var sections = SDPUtils.splitSections(blob); - return sections && sections[0]; -}; - -// returns the individual media sections. -SDPUtils.getMediaSections = function(blob) { - var sections = SDPUtils.splitSections(blob); - sections.shift(); - return sections; -}; - -// Returns lines that start with a certain prefix. -SDPUtils.matchPrefix = function(blob, prefix) { - return SDPUtils.splitLines(blob).filter(function(line) { - return line.indexOf(prefix) === 0; - }); -}; - -// Parses an ICE candidate line. Sample input: -// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 -// rport 55996" -SDPUtils.parseCandidate = function(line) { - var parts; - // Parse both variants. - if (line.indexOf('a=candidate:') === 0) { - parts = line.substring(12).split(' '); - } else { - parts = line.substring(10).split(' '); - } - - var candidate = { - foundation: parts[0], - component: parseInt(parts[1], 10), - protocol: parts[2].toLowerCase(), - priority: parseInt(parts[3], 10), - ip: parts[4], - address: parts[4], // address is an alias for ip. - port: parseInt(parts[5], 10), - // skip parts[6] == 'typ' - type: parts[7] - }; - - for (var i = 8; i < parts.length; i += 2) { - switch (parts[i]) { - case 'raddr': - candidate.relatedAddress = parts[i + 1]; - break; - case 'rport': - candidate.relatedPort = parseInt(parts[i + 1], 10); - break; - case 'tcptype': - candidate.tcpType = parts[i + 1]; - break; - case 'ufrag': - candidate.ufrag = parts[i + 1]; // for backward compability. - candidate.usernameFragment = parts[i + 1]; - break; - default: // extension handling, in particular ufrag - candidate[parts[i]] = parts[i + 1]; - break; - } - } - return candidate; -}; - -// Translates a candidate object into SDP candidate attribute. -SDPUtils.writeCandidate = function(candidate) { - var sdp = []; - sdp.push(candidate.foundation); - sdp.push(candidate.component); - sdp.push(candidate.protocol.toUpperCase()); - sdp.push(candidate.priority); - sdp.push(candidate.address || candidate.ip); - sdp.push(candidate.port); - - var type = candidate.type; - sdp.push('typ'); - sdp.push(type); - if (type !== 'host' && candidate.relatedAddress && - candidate.relatedPort) { - sdp.push('raddr'); - sdp.push(candidate.relatedAddress); - sdp.push('rport'); - sdp.push(candidate.relatedPort); - } - if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') { - sdp.push('tcptype'); - sdp.push(candidate.tcpType); - } - if (candidate.usernameFragment || candidate.ufrag) { - sdp.push('ufrag'); - sdp.push(candidate.usernameFragment || candidate.ufrag); - } - return 'candidate:' + sdp.join(' '); -}; - -// Parses an ice-options line, returns an array of option tags. -// a=ice-options:foo bar -SDPUtils.parseIceOptions = function(line) { - return line.substr(14).split(' '); -}; - -// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input: -// a=rtpmap:111 opus/48000/2 -SDPUtils.parseRtpMap = function(line) { - var parts = line.substr(9).split(' '); - var parsed = { - payloadType: parseInt(parts.shift(), 10) // was: id - }; - - parts = parts[0].split('/'); - - parsed.name = parts[0]; - parsed.clockRate = parseInt(parts[1], 10); // was: clockrate - parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1; - // legacy alias, got renamed back to channels in ORTC. - parsed.numChannels = parsed.channels; - return parsed; -}; - -// Generate an a=rtpmap line from RTCRtpCodecCapability or -// RTCRtpCodecParameters. -SDPUtils.writeRtpMap = function(codec) { - var pt = codec.payloadType; - if (codec.preferredPayloadType !== undefined) { - pt = codec.preferredPayloadType; - } - var channels = codec.channels || codec.numChannels || 1; - return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + - (channels !== 1 ? '/' + channels : '') + '\r\n'; -}; - -// Parses an a=extmap line (headerextension from RFC 5285). Sample input: -// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset -// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset -SDPUtils.parseExtmap = function(line) { - var parts = line.substr(9).split(' '); - return { - id: parseInt(parts[0], 10), - direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv', - uri: parts[1] - }; -}; - -// Generates a=extmap line from RTCRtpHeaderExtensionParameters or -// RTCRtpHeaderExtension. -SDPUtils.writeExtmap = function(headerExtension) { - return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + - (headerExtension.direction && headerExtension.direction !== 'sendrecv' - ? '/' + headerExtension.direction - : '') + - ' ' + headerExtension.uri + '\r\n'; -}; - -// Parses an ftmp line, returns dictionary. Sample input: -// a=fmtp:96 vbr=on;cng=on -// Also deals with vbr=on; cng=on -SDPUtils.parseFmtp = function(line) { - var parsed = {}; - var kv; - var parts = line.substr(line.indexOf(' ') + 1).split(';'); - for (var j = 0; j < parts.length; j++) { - kv = parts[j].trim().split('='); - parsed[kv[0].trim()] = kv[1]; - } - return parsed; -}; - -// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters. -SDPUtils.writeFmtp = function(codec) { - var line = ''; - var pt = codec.payloadType; - if (codec.preferredPayloadType !== undefined) { - pt = codec.preferredPayloadType; - } - if (codec.parameters && Object.keys(codec.parameters).length) { - var params = []; - Object.keys(codec.parameters).forEach(function(param) { - if (codec.parameters[param]) { - params.push(param + '=' + codec.parameters[param]); - } else { - params.push(param); - } - }); - line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; - } - return line; -}; - -// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: -// a=rtcp-fb:98 nack rpsi -SDPUtils.parseRtcpFb = function(line) { - var parts = line.substr(line.indexOf(' ') + 1).split(' '); - return { - type: parts.shift(), - parameter: parts.join(' ') - }; -}; -// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. -SDPUtils.writeRtcpFb = function(codec) { - var lines = ''; - var pt = codec.payloadType; - if (codec.preferredPayloadType !== undefined) { - pt = codec.preferredPayloadType; - } - if (codec.rtcpFeedback && codec.rtcpFeedback.length) { - // FIXME: special handling for trr-int? - codec.rtcpFeedback.forEach(function(fb) { - lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + - (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + - '\r\n'; - }); - } - return lines; -}; - -// Parses an RFC 5576 ssrc media attribute. Sample input: -// a=ssrc:3735928559 cname:something -SDPUtils.parseSsrcMedia = function(line) { - var sp = line.indexOf(' '); - var parts = { - ssrc: parseInt(line.substr(7, sp - 7), 10) - }; - var colon = line.indexOf(':', sp); - if (colon > -1) { - parts.attribute = line.substr(sp + 1, colon - sp - 1); - parts.value = line.substr(colon + 1); - } else { - parts.attribute = line.substr(sp + 1); - } - return parts; -}; - -SDPUtils.parseSsrcGroup = function(line) { - var parts = line.substr(13).split(' '); - return { - semantics: parts.shift(), - ssrcs: parts.map(function(ssrc) { - return parseInt(ssrc, 10); - }) - }; -}; - -// Extracts the MID (RFC 5888) from a media section. -// returns the MID or undefined if no mid line was found. -SDPUtils.getMid = function(mediaSection) { - var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; - if (mid) { - return mid.substr(6); - } -}; - -SDPUtils.parseFingerprint = function(line) { - var parts = line.substr(14).split(' '); - return { - algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. - value: parts[1] - }; -}; - -// Extracts DTLS parameters from SDP media section or sessionpart. -// FIXME: for consistency with other functions this should only -// get the fingerprint line as input. See also getIceParameters. -SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) { - var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, - 'a=fingerprint:'); - // Note: a=setup line is ignored since we use the 'auto' role. - // Note2: 'algorithm' is not case sensitive except in Edge. - return { - role: 'auto', - fingerprints: lines.map(SDPUtils.parseFingerprint) - }; -}; - -// Serializes DTLS parameters to SDP. -SDPUtils.writeDtlsParameters = function(params, setupType) { - var sdp = 'a=setup:' + setupType + '\r\n'; - params.fingerprints.forEach(function(fp) { - sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; - }); - return sdp; -}; - -// Parses a=crypto lines into -// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members -SDPUtils.parseCryptoLine = function(line) { - var parts = line.substr(9).split(' '); - return { - tag: parseInt(parts[0], 10), - cryptoSuite: parts[1], - keyParams: parts[2], - sessionParams: parts.slice(3), - }; -}; - -SDPUtils.writeCryptoLine = function(parameters) { - return 'a=crypto:' + parameters.tag + ' ' + - parameters.cryptoSuite + ' ' + - (typeof parameters.keyParams === 'object' - ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) - : parameters.keyParams) + - (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + - '\r\n'; -}; - -// Parses the crypto key parameters into -// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam* -SDPUtils.parseCryptoKeyParams = function(keyParams) { - if (keyParams.indexOf('inline:') !== 0) { - return null; - } - var parts = keyParams.substr(7).split('|'); - return { - keyMethod: 'inline', - keySalt: parts[0], - lifeTime: parts[1], - mkiValue: parts[2] ? parts[2].split(':')[0] : undefined, - mkiLength: parts[2] ? parts[2].split(':')[1] : undefined, - }; -}; - -SDPUtils.writeCryptoKeyParams = function(keyParams) { - return keyParams.keyMethod + ':' - + keyParams.keySalt + - (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + - (keyParams.mkiValue && keyParams.mkiLength - ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength - : ''); -}; - -// Extracts all SDES paramters. -SDPUtils.getCryptoParameters = function(mediaSection, sessionpart) { - var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, - 'a=crypto:'); - return lines.map(SDPUtils.parseCryptoLine); -}; - -// Parses ICE information from SDP media section or sessionpart. -// FIXME: for consistency with other functions this should only -// get the ice-ufrag and ice-pwd lines as input. -SDPUtils.getIceParameters = function(mediaSection, sessionpart) { - var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, - 'a=ice-ufrag:')[0]; - var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, - 'a=ice-pwd:')[0]; - if (!(ufrag && pwd)) { - return null; - } - return { - usernameFragment: ufrag.substr(12), - password: pwd.substr(10), - }; -}; - -// Serializes ICE parameters to SDP. -SDPUtils.writeIceParameters = function(params) { - return 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + - 'a=ice-pwd:' + params.password + '\r\n'; -}; - -// Parses the SDP media section and returns RTCRtpParameters. -SDPUtils.parseRtpParameters = function(mediaSection) { - var description = { - codecs: [], - headerExtensions: [], - fecMechanisms: [], - rtcp: [] - }; - var lines = SDPUtils.splitLines(mediaSection); - var mline = lines[0].split(' '); - for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..] - var pt = mline[i]; - var rtpmapline = SDPUtils.matchPrefix( - mediaSection, 'a=rtpmap:' + pt + ' ')[0]; - if (rtpmapline) { - var codec = SDPUtils.parseRtpMap(rtpmapline); - var fmtps = SDPUtils.matchPrefix( - mediaSection, 'a=fmtp:' + pt + ' '); - // Only the first a=fmtp: is considered. - codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; - codec.rtcpFeedback = SDPUtils.matchPrefix( - mediaSection, 'a=rtcp-fb:' + pt + ' ') - .map(SDPUtils.parseRtcpFb); - description.codecs.push(codec); - // parse FEC mechanisms from rtpmap lines. - switch (codec.name.toUpperCase()) { - case 'RED': - case 'ULPFEC': - description.fecMechanisms.push(codec.name.toUpperCase()); - break; - default: // only RED and ULPFEC are recognized as FEC mechanisms. - break; - } - } - } - SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) { - description.headerExtensions.push(SDPUtils.parseExtmap(line)); - }); - // FIXME: parse rtcp. - return description; -}; - -// Generates parts of the SDP media section describing the capabilities / -// parameters. -SDPUtils.writeRtpDescription = function(kind, caps) { - var sdp = ''; - - // Build the mline. - sdp += 'm=' + kind + ' '; - sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. - sdp += ' UDP/TLS/RTP/SAVPF '; - sdp += caps.codecs.map(function(codec) { - if (codec.preferredPayloadType !== undefined) { - return codec.preferredPayloadType; - } - return codec.payloadType; - }).join(' ') + '\r\n'; - - sdp += 'c=IN IP4 0.0.0.0\r\n'; - sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; - - // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. - caps.codecs.forEach(function(codec) { - sdp += SDPUtils.writeRtpMap(codec); - sdp += SDPUtils.writeFmtp(codec); - sdp += SDPUtils.writeRtcpFb(codec); - }); - var maxptime = 0; - caps.codecs.forEach(function(codec) { - if (codec.maxptime > maxptime) { - maxptime = codec.maxptime; - } - }); - if (maxptime > 0) { - sdp += 'a=maxptime:' + maxptime + '\r\n'; - } - sdp += 'a=rtcp-mux\r\n'; - - if (caps.headerExtensions) { - caps.headerExtensions.forEach(function(extension) { - sdp += SDPUtils.writeExtmap(extension); - }); - } - // FIXME: write fecMechanisms. - return sdp; -}; - -// Parses the SDP media section and returns an array of -// RTCRtpEncodingParameters. -SDPUtils.parseRtpEncodingParameters = function(mediaSection) { - var encodingParameters = []; - var description = SDPUtils.parseRtpParameters(mediaSection); - var hasRed = description.fecMechanisms.indexOf('RED') !== -1; - var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; - - // filter a=ssrc:... cname:, ignore PlanB-msid - var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') - .map(function(line) { - return SDPUtils.parseSsrcMedia(line); - }) - .filter(function(parts) { - return parts.attribute === 'cname'; - }); - var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; - var secondarySsrc; - - var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID') - .map(function(line) { - var parts = line.substr(17).split(' '); - return parts.map(function(part) { - return parseInt(part, 10); - }); - }); - if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { - secondarySsrc = flows[0][1]; - } - - description.codecs.forEach(function(codec) { - if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { - var encParam = { - ssrc: primarySsrc, - codecPayloadType: parseInt(codec.parameters.apt, 10) - }; - if (primarySsrc && secondarySsrc) { - encParam.rtx = {ssrc: secondarySsrc}; - } - encodingParameters.push(encParam); - if (hasRed) { - encParam = JSON.parse(JSON.stringify(encParam)); - encParam.fec = { - ssrc: primarySsrc, - mechanism: hasUlpfec ? 'red+ulpfec' : 'red' - }; - encodingParameters.push(encParam); - } - } - }); - if (encodingParameters.length === 0 && primarySsrc) { - encodingParameters.push({ - ssrc: primarySsrc - }); - } - - // we support both b=AS and b=TIAS but interpret AS as TIAS. - var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); - if (bandwidth.length) { - if (bandwidth[0].indexOf('b=TIAS:') === 0) { - bandwidth = parseInt(bandwidth[0].substr(7), 10); - } else if (bandwidth[0].indexOf('b=AS:') === 0) { - // use formula from JSEP to convert b=AS to TIAS value. - bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 - - (50 * 40 * 8); - } else { - bandwidth = undefined; - } - encodingParameters.forEach(function(params) { - params.maxBitrate = bandwidth; - }); - } - return encodingParameters; -}; - -// parses http://draft.ortc.org/#rtcrtcpparameters* -SDPUtils.parseRtcpParameters = function(mediaSection) { - var rtcpParameters = {}; - - // Gets the first SSRC. Note tha with RTX there might be multiple - // SSRCs. - var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') - .map(function(line) { - return SDPUtils.parseSsrcMedia(line); - }) - .filter(function(obj) { - return obj.attribute === 'cname'; - })[0]; - if (remoteSsrc) { - rtcpParameters.cname = remoteSsrc.value; - rtcpParameters.ssrc = remoteSsrc.ssrc; - } - - // Edge uses the compound attribute instead of reducedSize - // compound is !reducedSize - var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); - rtcpParameters.reducedSize = rsize.length > 0; - rtcpParameters.compound = rsize.length === 0; - - // parses the rtcp-mux attrіbute. - // Note that Edge does not support unmuxed RTCP. - var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); - rtcpParameters.mux = mux.length > 0; - - return rtcpParameters; -}; - -// parses either a=msid: or a=ssrc:... msid lines and returns -// the id of the MediaStream and MediaStreamTrack. -SDPUtils.parseMsid = function(mediaSection) { - var parts; - var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); - if (spec.length === 1) { - parts = spec[0].substr(7).split(' '); - return {stream: parts[0], track: parts[1]}; - } - var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') - .map(function(line) { - return SDPUtils.parseSsrcMedia(line); - }) - .filter(function(msidParts) { - return msidParts.attribute === 'msid'; - }); - if (planB.length > 0) { - parts = planB[0].value.split(' '); - return {stream: parts[0], track: parts[1]}; - } -}; - -// SCTP -// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back -// to draft-ietf-mmusic-sctp-sdp-05 -SDPUtils.parseSctpDescription = function(mediaSection) { - var mline = SDPUtils.parseMLine(mediaSection); - var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:'); - var maxMessageSize; - if (maxSizeLine.length > 0) { - maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10); - } - if (isNaN(maxMessageSize)) { - maxMessageSize = 65536; - } - var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:'); - if (sctpPort.length > 0) { - return { - port: parseInt(sctpPort[0].substr(12), 10), - protocol: mline.fmt, - maxMessageSize: maxMessageSize - }; - } - var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:'); - if (sctpMapLines.length > 0) { - var parts = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:')[0] - .substr(10) - .split(' '); - return { - port: parseInt(parts[0], 10), - protocol: parts[1], - maxMessageSize: maxMessageSize - }; - } -}; - -// SCTP -// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers -// support by now receiving in this format, unless we originally parsed -// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line -// protocol of DTLS/SCTP -- without UDP/ or TCP/) -SDPUtils.writeSctpDescription = function(media, sctp) { - var output = []; - if (media.protocol !== 'DTLS/SCTP') { - output = [ - 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', - 'c=IN IP4 0.0.0.0\r\n', - 'a=sctp-port:' + sctp.port + '\r\n' - ]; - } else { - output = [ - 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', - 'c=IN IP4 0.0.0.0\r\n', - 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n' - ]; - } - if (sctp.maxMessageSize !== undefined) { - output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n'); - } - return output.join(''); -}; - -// Generate a session ID for SDP. -// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1 -// recommends using a cryptographically random +ve 64-bit value -// but right now this should be acceptable and within the right range -SDPUtils.generateSessionId = function() { - return Math.random().toString().substr(2, 21); -}; - -// Write boilder plate for start of SDP -// sessId argument is optional - if not supplied it will -// be generated randomly -// sessVersion is optional and defaults to 2 -// sessUser is optional and defaults to 'thisisadapterortc' -SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) { - var sessionId; - var version = sessVer !== undefined ? sessVer : 2; - if (sessId) { - sessionId = sessId; - } else { - sessionId = SDPUtils.generateSessionId(); - } - var user = sessUser || 'thisisadapterortc'; - // FIXME: sess-id should be an NTP timestamp. - return 'v=0\r\n' + - 'o=' + user + ' ' + sessionId + ' ' + version + - ' IN IP4 127.0.0.1\r\n' + - 's=-\r\n' + - 't=0 0\r\n'; -}; - -SDPUtils.writeMediaSection = function(transceiver, caps, type, stream) { - var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps); - - // Map ICE parameters (ufrag, pwd) to SDP. - sdp += SDPUtils.writeIceParameters( - transceiver.iceGatherer.getLocalParameters()); - - // Map DTLS parameters to SDP. - sdp += SDPUtils.writeDtlsParameters( - transceiver.dtlsTransport.getLocalParameters(), - type === 'offer' ? 'actpass' : 'active'); - - sdp += 'a=mid:' + transceiver.mid + '\r\n'; - - if (transceiver.direction) { - sdp += 'a=' + transceiver.direction + '\r\n'; - } else if (transceiver.rtpSender && transceiver.rtpReceiver) { - sdp += 'a=sendrecv\r\n'; - } else if (transceiver.rtpSender) { - sdp += 'a=sendonly\r\n'; - } else if (transceiver.rtpReceiver) { - sdp += 'a=recvonly\r\n'; - } else { - sdp += 'a=inactive\r\n'; - } - - if (transceiver.rtpSender) { - // spec. - var msid = 'msid:' + stream.id + ' ' + - transceiver.rtpSender.track.id + '\r\n'; - sdp += 'a=' + msid; - - // for Chrome. - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + - ' ' + msid; - if (transceiver.sendEncodingParameters[0].rtx) { - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + - ' ' + msid; - sdp += 'a=ssrc-group:FID ' + - transceiver.sendEncodingParameters[0].ssrc + ' ' + - transceiver.sendEncodingParameters[0].rtx.ssrc + - '\r\n'; - } - } - // FIXME: this should be written by writeRtpDescription. - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + - ' cname:' + SDPUtils.localCName + '\r\n'; - if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) { - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + - ' cname:' + SDPUtils.localCName + '\r\n'; - } - return sdp; -}; - -// Gets the direction from the mediaSection or the sessionpart. -SDPUtils.getDirection = function(mediaSection, sessionpart) { - // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. - var lines = SDPUtils.splitLines(mediaSection); - for (var i = 0; i < lines.length; i++) { - switch (lines[i]) { - case 'a=sendrecv': - case 'a=sendonly': - case 'a=recvonly': - case 'a=inactive': - return lines[i].substr(2); - default: - // FIXME: What should happen here? - } - } - if (sessionpart) { - return SDPUtils.getDirection(sessionpart); - } - return 'sendrecv'; -}; - -SDPUtils.getKind = function(mediaSection) { - var lines = SDPUtils.splitLines(mediaSection); - var mline = lines[0].split(' '); - return mline[0].substr(2); -}; - -SDPUtils.isRejected = function(mediaSection) { - return mediaSection.split(' ', 2)[1] === '0'; -}; - -SDPUtils.parseMLine = function(mediaSection) { - var lines = SDPUtils.splitLines(mediaSection); - var parts = lines[0].substr(2).split(' '); - return { - kind: parts[0], - port: parseInt(parts[1], 10), - protocol: parts[2], - fmt: parts.slice(3).join(' ') - }; -}; - -SDPUtils.parseOLine = function(mediaSection) { - var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; - var parts = line.substr(2).split(' '); - return { - username: parts[0], - sessionId: parts[1], - sessionVersion: parseInt(parts[2], 10), - netType: parts[3], - addressType: parts[4], - address: parts[5] - }; -}; - -// a very naive interpretation of a valid SDP. -SDPUtils.isValidSDP = function(blob) { - if (typeof blob !== 'string' || blob.length === 0) { - return false; - } - var lines = SDPUtils.splitLines(blob); - for (var i = 0; i < lines.length; i++) { - if (lines[i].length < 2 || lines[i].charAt(1) !== '=') { - return false; - } - // TODO: check the modifier a bit more. - } - return true; -}; - -// Expose public methods. -if (typeof module === 'object') { - module.exports = SDPUtils; -} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/COPYING b/common/tct-webrtc-w3c-tests/webrtc/w3c/COPYING new file mode 100755 index 000000000..34e18be95 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/COPYING @@ -0,0 +1,11 @@ +This test suite comes from +https://github.com/web-platform-tests/wpt/tree/master/webrtc/ +with tizen namespace and application id added into config.xml + +These tests are copyright by W3C and/or the author listed in the test +file. The tests are dual-licensed under the W3C Test Suite License: +http://www.w3.org/Consortium/Legal/2008/04-testsuite-license +and the BSD 3-clause License: +http://www.w3.org/Consortium/Legal/2008/03-bsd-license +under W3C's test suite licensing policy: +http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate-postMessage.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate-postMessage.html new file mode 100755 index 000000000..9a9c23691 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate-postMessage.html @@ -0,0 +1,62 @@ + + +RTCCertificate persistent Tests + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html new file mode 100755 index 000000000..cfdb655fc --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCCertificate.html @@ -0,0 +1,264 @@ + + +RTCCertificate Tests + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html new file mode 100755 index 000000000..a189d06d0 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-bundlePolicy.html @@ -0,0 +1,128 @@ + + +RTCConfiguration bundlePolicy + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html new file mode 100755 index 000000000..29352adca --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceCandidatePoolSize.html @@ -0,0 +1,117 @@ + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html new file mode 100755 index 000000000..2cb34181c --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceServers.html @@ -0,0 +1,215 @@ + + +RTCConfiguration iceServers + + + + \ No newline at end of file diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html new file mode 100755 index 000000000..e25579b12 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-iceTransportPolicy.html @@ -0,0 +1,105 @@ + + +RTCConfiguration iceTransportPolicy + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html new file mode 100755 index 000000000..497d02560 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCConfiguration-rtcpMuxPolicy.html @@ -0,0 +1,196 @@ + +RTCConfiguration rtcpMuxPolicy + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html new file mode 100755 index 000000000..cd3a513fc --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-insertDTMF.https.html @@ -0,0 +1,176 @@ + + +RTCDTMFSender.prototype.insertDTMF + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange-long.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange-long.https.html new file mode 100755 index 000000000..ced351aa7 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange-long.https.html @@ -0,0 +1,50 @@ + + + +RTCDTMFSender.prototype.ontonechange (Long Timeout) + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html new file mode 100755 index 000000000..45f3ddb90 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDTMFSender-ontonechange.https.html @@ -0,0 +1,285 @@ + + +RTCDTMFSender.prototype.ontonechange + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html new file mode 100755 index 000000000..16656bbd9 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-bufferedAmount.html @@ -0,0 +1,207 @@ + + + +RTCDataChannel.prototype.bufferedAmount + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html new file mode 100755 index 000000000..7434cb51d --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-close.html @@ -0,0 +1,180 @@ + + + +RTCDataChannel.prototype.close + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html new file mode 100755 index 000000000..b42c86062 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-iceRestart.html @@ -0,0 +1,76 @@ + + + +RTCDataChannel interactions with ICE restart + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html new file mode 100755 index 000000000..9257fdd88 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-id.html @@ -0,0 +1,345 @@ + + +RTCDataChannel id attribute + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html new file mode 100755 index 000000000..e9b4d4dd3 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannel-send.html @@ -0,0 +1,206 @@ + + + +RTCDataChannel.prototype.send + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html new file mode 100755 index 000000000..df4fd4381 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDataChannelEvent-constructor.html @@ -0,0 +1,41 @@ + + +RTCDataChannelEvent constructor + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-getRemoteCertificates.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-getRemoteCertificates.html new file mode 100755 index 000000000..893797eb5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-getRemoteCertificates.html @@ -0,0 +1,97 @@ + + +RTCDtlsTransport.prototype.getRemoteCertificates + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html new file mode 100755 index 000000000..daa706e20 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCDtlsTransport-state.html @@ -0,0 +1,89 @@ + + +RTCDtlsTransport + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html new file mode 100755 index 000000000..9a1c23e7a --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCError.html @@ -0,0 +1,89 @@ + + +RTCError and RTCErrorInit + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html new file mode 100755 index 000000000..a1e395381 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceCandidate-constructor.html @@ -0,0 +1,234 @@ + +RTCIceCandidate constructor + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceConnectionState-candidate-pair.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceConnectionState-candidate-pair.https.html new file mode 100755 index 000000000..d00793f46 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceConnectionState-candidate-pair.https.html @@ -0,0 +1,33 @@ + + + +RTCIceConnectionState and RTCIceCandidatePair + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceTransport.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceTransport.html new file mode 100755 index 000000000..32ee02223 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCIceTransport.html @@ -0,0 +1,146 @@ + + +RTCIceTransport + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-SLD-SRD-timing.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-SLD-SRD-timing.https.html new file mode 100755 index 000000000..6391fea6a --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-SLD-SRD-timing.https.html @@ -0,0 +1,24 @@ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-add-track-no-deadlock.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-add-track-no-deadlock.https.html new file mode 100755 index 000000000..b75596d32 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-add-track-no-deadlock.https.html @@ -0,0 +1,31 @@ + + +RTCPeerConnection addTrack does not deadlock + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html new file mode 100755 index 000000000..de1e63c50 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-connectionSetup.html @@ -0,0 +1,92 @@ + + +Test RTCPeerConnection.prototype.addIceCandidate + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html new file mode 100755 index 000000000..f8de26108 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate-timing.https.html @@ -0,0 +1,149 @@ + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html new file mode 100755 index 000000000..a8f8081af --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addIceCandidate.html @@ -0,0 +1,473 @@ + +Test RTCPeerConnection.prototype.addIceCandidate + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html new file mode 100755 index 000000000..9543fda28 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTrack.https.html @@ -0,0 +1,394 @@ + + +RTCPeerConnection.prototype.addTrack + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html new file mode 100755 index 000000000..9846f7217 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-addTransceiver.https.html @@ -0,0 +1,441 @@ + + +RTCPeerConnection.prototype.addTransceiver + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html new file mode 100755 index 000000000..a08e980eb --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-canTrickleIceCandidates.html @@ -0,0 +1,62 @@ + + + + + RTCPeerConnection canTrickleIceCandidates tests + + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-candidate-in-sdp.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-candidate-in-sdp.https.html new file mode 100755 index 000000000..69736c392 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-candidate-in-sdp.https.html @@ -0,0 +1,26 @@ + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html new file mode 100755 index 000000000..bd34063fd --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-connectionState.https.html @@ -0,0 +1,291 @@ + + +RTCPeerConnection.prototype.connectionState + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html new file mode 100755 index 000000000..f6d421b21 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-constructor.html @@ -0,0 +1,76 @@ + + +RTCPeerConnection constructor + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html new file mode 100755 index 000000000..717054afe --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createAnswer.html @@ -0,0 +1,28 @@ + + +RTCPeerConnection.prototype.createAnswer + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html new file mode 100755 index 000000000..6e9057e1e --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createDataChannel.html @@ -0,0 +1,700 @@ + + + +RTCPeerConnection.prototype.createDataChannel + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html new file mode 100755 index 000000000..3e11613f4 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-createOffer.html @@ -0,0 +1,100 @@ + + +RTCPeerConnection.prototype.createOffer + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html new file mode 100755 index 000000000..8dee8e479 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-description-attributes-timing.https.html @@ -0,0 +1,81 @@ + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html new file mode 100755 index 000000000..9122ffc59 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-explicit-rollback-iceGatheringState.html @@ -0,0 +1,53 @@ + + +RTCPeerConnection.prototype.iceGatheringState + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html new file mode 100755 index 000000000..7b861ed83 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-generateCertificate.html @@ -0,0 +1,120 @@ + + +Test RTCPeerConnection.generateCertificate + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html new file mode 100755 index 000000000..42cb94e05 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getStats.https.html @@ -0,0 +1,264 @@ + + + +RTCPeerConnection.prototype.getStats + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getTransceivers.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getTransceivers.html new file mode 100755 index 000000000..288ad0e99 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-getTransceivers.html @@ -0,0 +1,39 @@ + + +RTCPeerConnection.prototype.getTransceivers + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-helper-test.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-helper-test.html new file mode 100755 index 000000000..e87d9e5c2 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-helper-test.html @@ -0,0 +1,21 @@ + + +RTCPeerConnection-helper tests + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState-disconnected.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState-disconnected.https.html new file mode 100755 index 000000000..08cd50d2c --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState-disconnected.https.html @@ -0,0 +1,30 @@ + + + +RTCPeerConnection.prototype.iceConnectionState - disconnection + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html new file mode 100755 index 000000000..ffef5c6e8 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceConnectionState.https.html @@ -0,0 +1,396 @@ + + + +RTCPeerConnection.prototype.iceConnectionState + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html new file mode 100755 index 000000000..a2cb54a74 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-iceGatheringState.html @@ -0,0 +1,244 @@ + + +RTCPeerConnection.prototype.iceGatheringState + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html new file mode 100755 index 000000000..10c18552a --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-mandatory-getStats.https.html @@ -0,0 +1,260 @@ + + + +Mandatory-to-implement stats compliance (a subset of webrtc-stats) + + + + + + \ No newline at end of file diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html new file mode 100755 index 000000000..4b70a7eb8 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ondatachannel.html @@ -0,0 +1,374 @@ + + + +RTCPeerConnection.prototype.ondatachannel + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onicecandidateerror.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onicecandidateerror.https.html new file mode 100755 index 000000000..54b1bdab5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onicecandidateerror.https.html @@ -0,0 +1,38 @@ + + + +RTCPeerConnection.prototype.onicecandidateerror + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html new file mode 100755 index 000000000..3bbd226be --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onnegotiationneeded.html @@ -0,0 +1,461 @@ + + +Test RTCPeerConnection.prototype.onnegotiationneeded + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html new file mode 100755 index 000000000..4bc99eabb --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-onsignalingstatechanged.https.html @@ -0,0 +1,71 @@ + + +RTCPeerConnection onsignalingstatechanged + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html new file mode 100755 index 000000000..5f40ba592 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-ontrack.https.html @@ -0,0 +1,258 @@ + + +RTCPeerConnection.prototype.ontrack + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html new file mode 100755 index 000000000..b780e2d3c --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-operations.https.html @@ -0,0 +1,133 @@ + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html new file mode 100755 index 000000000..8dce89bed --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-removeTrack.https.html @@ -0,0 +1,338 @@ + + +RTCPeerConnection.prototype.removeTrack + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce-onnegotiationneeded.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce-onnegotiationneeded.https.html new file mode 100755 index 000000000..5f5849a40 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce-onnegotiationneeded.https.html @@ -0,0 +1,29 @@ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html new file mode 100755 index 000000000..17c17102b --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-restartIce.https.html @@ -0,0 +1,421 @@ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html new file mode 100755 index 000000000..f7cf106d7 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setDescription-transceiver.html @@ -0,0 +1,295 @@ + + +RTCPeerConnection Set Session Description - Transceiver Tests + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html new file mode 100755 index 000000000..a7ef5a146 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-answer.html @@ -0,0 +1,205 @@ + + +RTCPeerConnection.prototype.setLocalDescription + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html new file mode 100755 index 000000000..e3984e84f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-offer.html @@ -0,0 +1,212 @@ + + +RTCPeerConnection.prototype.setLocalDescription + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html new file mode 100755 index 000000000..8c14abdeb --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-parameterless.https.html @@ -0,0 +1,131 @@ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html new file mode 100755 index 000000000..b8d4bfe2b --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-pranswer.html @@ -0,0 +1,156 @@ + + +RTCPeerConnection.prototype.setLocalDescription pranswer + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html new file mode 100755 index 000000000..2c6d355a5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription-rollback.html @@ -0,0 +1,159 @@ + + +RTCPeerConnection.prototype.setLocalDescription rollback + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html new file mode 100755 index 000000000..18b452f94 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setLocalDescription.html @@ -0,0 +1,152 @@ + + +RTCPeerConnection.prototype.setLocalDescription + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html new file mode 100755 index 000000000..d2a4a4cb2 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-answer.html @@ -0,0 +1,123 @@ + + +RTCPeerConnection.prototype.setRemoteDescription - answer + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-nomsid.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-nomsid.html new file mode 100755 index 000000000..8d9c6f346 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-nomsid.html @@ -0,0 +1,40 @@ + + +RTCPeerConnection.prototype.setRemoteDescription - legacy streams without a=msid lines + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html new file mode 100755 index 000000000..12f7ba7ff --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-offer.html @@ -0,0 +1,239 @@ + + +RTCPeerConnection.prototype.setRemoteDescription - offer + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html new file mode 100755 index 000000000..25db66363 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-pranswer.html @@ -0,0 +1,166 @@ + + +RTCPeerConnection.prototype.setRemoteDescription pranswer + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html new file mode 100755 index 000000000..972187299 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html @@ -0,0 +1,115 @@ + + +RTCPeerConnection.prototype.setRemoteDescription - replaceTrack + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html new file mode 100755 index 000000000..14559ec1f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-rollback.html @@ -0,0 +1,595 @@ + + +RTCPeerConnection.prototype.setRemoteDescription rollback + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html new file mode 100755 index 000000000..2e74afc9d --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription-tracks.https.html @@ -0,0 +1,316 @@ + + + +RTCPeerConnection.prototype.setRemoteDescription - add/remove remote tracks + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html new file mode 100755 index 000000000..719a08e33 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-setRemoteDescription.html @@ -0,0 +1,158 @@ + + +RTCPeerConnection.prototype.setRemoteDescription + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html new file mode 100755 index 000000000..a7d81a6c1 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-track-stats.https.html @@ -0,0 +1,490 @@ + + + +RTCPeerConnection.prototype.getStats + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html new file mode 100755 index 000000000..f6fa003e8 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-transceivers.https.html @@ -0,0 +1,508 @@ + + + +RTCPeerConnection-transceivers.https.html + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-videoDetectorTest.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-videoDetectorTest.html new file mode 100755 index 000000000..af0b12497 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnection-videoDetectorTest.html @@ -0,0 +1,87 @@ + + + +RTCPeerConnection Video detector test + +

The test passes if the video is being outputted .

+ + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceErrorEvent.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceErrorEvent.html new file mode 100755 index 000000000..84e76fc5b --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceErrorEvent.html @@ -0,0 +1,26 @@ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html new file mode 100755 index 000000000..3bd632fe5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCPeerConnectionIceEvent-constructor.html @@ -0,0 +1,85 @@ + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html new file mode 100755 index 000000000..4badcd7e5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-codecs.html @@ -0,0 +1,206 @@ + + +RTCRtpParameters codecs + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html new file mode 100755 index 000000000..29f18a3b3 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-encodings.html @@ -0,0 +1,517 @@ + + +RTCRtpParameters encodings + + + + + \ No newline at end of file diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-headerExtensions.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-headerExtensions.html new file mode 100755 index 000000000..6731a7be2 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-headerExtensions.html @@ -0,0 +1,74 @@ + + +RTCRtpParameters headerExtensions + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html new file mode 100755 index 000000000..40619edf7 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-rtcp.html @@ -0,0 +1,104 @@ + + +RTCRtpParameters rtcp + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html new file mode 100755 index 000000000..d1a05440d --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpParameters-transactionId.html @@ -0,0 +1,151 @@ + + +RTCRtpParameters transactionId + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html new file mode 100755 index 000000000..f94e59980 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getCapabilities.html @@ -0,0 +1,39 @@ + + +RTCRtpReceiver.getCapabilities + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html new file mode 100755 index 000000000..62aaaa43a --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getContributingSources.https.html @@ -0,0 +1,35 @@ + + +RTCRtpReceiver.prototype.getContributingSources + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html new file mode 100755 index 000000000..3ea890cfe --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpReceiver-getParameters.html @@ -0,0 +1,58 @@ + + +RTCRtpReceiver.prototype.getParameters + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-encode-same-track-twice.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-encode-same-track-twice.https.html new file mode 100755 index 000000000..e7c8f5f77 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-encode-same-track-twice.https.html @@ -0,0 +1,66 @@ + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html new file mode 100755 index 000000000..1b40c9175 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-getCapabilities.html @@ -0,0 +1,45 @@ + + +RTCRtpSender.getCapabilities + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html new file mode 100755 index 000000000..946002eec --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-replaceTrack.https.html @@ -0,0 +1,270 @@ + + + +RTCRtpSender.prototype.replaceTrack + +

The test passes if the video is being outputted .

+ + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setParameters.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setParameters.html new file mode 100755 index 000000000..0910c4c50 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setParameters.html @@ -0,0 +1,30 @@ + + +RTCRtpSender.prototype.setParameters + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html new file mode 100755 index 000000000..71577199f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-setStreams.https.html @@ -0,0 +1,128 @@ + + +RTCRtpSender.prototype.setStreams + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html new file mode 100755 index 000000000..98c310671 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender-transport.https.html @@ -0,0 +1,152 @@ + + + +RTCRtpSender.transport + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender.https.html new file mode 100755 index 000000000..13442b1d7 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpSender.https.html @@ -0,0 +1,20 @@ + + +RTCRtpSender + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html new file mode 100755 index 000000000..82635726f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-direction.html @@ -0,0 +1,94 @@ + + +RTCRtpTransceiver.prototype.direction + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html new file mode 100755 index 000000000..d2cfe41ff --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-setCodecPreferences.html @@ -0,0 +1,275 @@ + + +RTCRtpTransceiver.prototype.setCodecPreferences + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html new file mode 100755 index 000000000..1eee4a9d7 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stop.html @@ -0,0 +1,138 @@ + + +RTCRtpTransceiver.prototype.stop + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html new file mode 100755 index 000000000..cc3a678c5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver-stopping.https.html @@ -0,0 +1,108 @@ + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html new file mode 100755 index 000000000..3ec5ae7ca --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCRtpTransceiver.https.html @@ -0,0 +1,2316 @@ + + + +RTCRtpTransceiver + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html new file mode 100755 index 000000000..591bf2c10 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-constructor.html @@ -0,0 +1,125 @@ + + +RTCSctpTransport constructor + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html new file mode 100755 index 000000000..177b0e690 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-events.html @@ -0,0 +1,55 @@ + + +RTCIceTransport + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html new file mode 100755 index 000000000..813164abe --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxChannels.html @@ -0,0 +1,49 @@ + + +RTCSctpTransport.prototype.maxChannels + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html new file mode 100755 index 000000000..8974dd62f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCSctpTransport-maxMessageSize.html @@ -0,0 +1,206 @@ + + +RTCSctpTransport.prototype.maxMessageSize + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html new file mode 100755 index 000000000..e8d1fc7e5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-constructor.html @@ -0,0 +1,159 @@ + + +RTCTrackEvent constructor + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html new file mode 100755 index 000000000..9c5f43d95 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RTCTrackEvent-fire.html @@ -0,0 +1,152 @@ + + +Change of msid in remote description should trigger related track events + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/RollbackEvents.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/RollbackEvents.https.html new file mode 100755 index 000000000..a333f74ee --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/RollbackEvents.https.html @@ -0,0 +1,231 @@ + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/RTCDTMFSender.txt b/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/RTCDTMFSender.txt new file mode 100755 index 000000000..aa3002132 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/RTCDTMFSender.txt @@ -0,0 +1,122 @@ +Coverage is based on the following editor draft: +https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + +7. insertDTMF + + [Trivial] + - The tones parameter is treated as a series of characters. + + [RTCDTMFSender-insertDTMF] + - The characters 0 through 9, A through D, #, and * generate the associated + DTMF tones. + + [RTCDTMFSender-insertDTMF] + - The characters a to d MUST be normalized to uppercase on entry and are equivalent + to A to D. + + [RTCDTMFSender-insertDTMF] + - As noted in [RTCWEB-AUDIO] Section 3, support for the characters 0 through 9, + A through D, #, and * are required. + + [RTCDTMFSender-insertDTMF] + - The character ',' MUST be supported, and indicates a delay of 2 seconds before + processing the next character in the tones parameter. + + [RTCDTMFSender-insertDTMF] + - All other characters (and only those other characters) MUST + be considered unrecognized. + + [Trivial] + - The duration parameter indicates the duration in ms to use for each character passed + in the tones parameters. + + [RTCDTMFSender-ontonechange] + - The duration cannot be more than 6000 ms or less than 40 ms. + + [RTCDTMFSender-ontonechange] + - The default duration is 100 ms for each tone. + + [RTCDTMFSender-ontonechange] + - The interToneGap parameter indicates the gap between tones in ms. The user agent + clamps it to at least 30 ms. The default value is 70 ms. + + [Untestable] + - The browser MAY increase the duration and interToneGap times to cause the times + that DTMF start and stop to align with the boundaries of RTP packets but it MUST + not increase either of them by more than the duration of a single RTP audio packet. + + [Trivial] + When the insertDTMF() method is invoked, the user agent MUST run the following steps: + + [Trivial] + 1. let sender be the RTCRtpSender used to send DTMF. + + [Trivial] + 2. Let transceiver be the RTCRtpTransceiver object associated with sender. + + [RTCDTMFSender-insertDTMF] + 3. If transceiver.stopped is true, throw an InvalidStateError. + + [RTCDTMFSender-insertDTMF] + 4. If transceiver.currentDirection is recvonly or inactive, throw an + InvalidStateError. + + [Trivial] + 5. Let tones be the method's first argument. + + [RTCDTMFSender-insertDTMF] + 6. If tones contains any unrecognized characters, throw an InvalidCharacterError. + + [RTCDTMFSender-insertDTMF] + 7. Set the object's toneBuffer attribute to tones. + + [RTCDTMFSender-ontonechange] + 8. If the value of the duration parameter is less than 40, set it to 40. + + [RTCDTMFSender-ontonechange-long] + If, on the other hand, the value is greater than 6000, set it to 6000. + + [RTCDTMFSender-ontonechange] + 9. If the value of the interToneGap parameter is less than 30, set it to 30. + + [RTCDTMFSender-ontonechange] + 10. If toneBuffer is an empty string, abort these steps. + + [RTCDTMFSender-ontonechange] + 11. If a Playout task is scheduled to be run; abort these steps; + + [RTCDTMFSender-ontonechange] + otherwise queue a task that runs the following steps (Playout task): + + [RTCDTMFSender-ontonechange] + 1. If transceiver.stopped is true, abort these steps. + + [RTCDTMFSender-ontonechange] + 2. If transceiver.currentDirection is recvonly or inactive, abort these steps. + + [RTCDTMFSender-ontonechange] + 3. If toneBuffer is an empty string, fire an event named tonechange with an + empty string at the RTCDTMFSender object and abort these steps. + + [RTCDTMFSender-ontonechange] + 4. Remove the first character from toneBuffer and let that character be tone. + + [Untestable] + 5. Start playout of tone for duration ms on the associated RTP media stream, + using the appropriate codec. + + [RTCDTMFSender-ontonechange] + 6. Queue a task to be executed in duration + interToneGap ms from now that + runs the steps labelled Playout task. + + [RTCDTMFSender-ontonechange] + 7. Fire an event named tonechange with a string consisting of tone at the + RTCDTMFSender object. + +Coverage Report + + Tested 31 + Not Tested 0 + Untestable 1 + + Total 32 diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/identity.txt b/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/identity.txt new file mode 100755 index 000000000..0d1bcca7e --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/identity.txt @@ -0,0 +1,220 @@ +Coverage is based on the following editor draft: +https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + +9.3 Requesting Identity Assertions + + [Trivial] + The identity assertion request process is triggered by a call to createOffer, + createAnswer, or getIdentityAssertion. When these calls are invoked and an + identity provider has been set, the following steps are executed: + + [RTCPeerConnection-getIdentityAssertion] + 1. The RTCPeerConnection instantiates an IdP as described in Identity Provider + Selection and Registering an IdP Proxy. If the IdP cannot be loaded, instantiated, + or the IdP proxy is not registered, this process fails. + + [RTCPeerConnection-getIdentityAssertion] + 2. The RTCPeerConnection invokes the generateAssertion method on the + RTCIdentityProvider methods registered by the IdP. + + [RTCPeerConnection-getIdentityAssertion] + The RTCPeerConnection generates the contents parameter to this method as + described in [RTCWEB-SECURITY-ARCH]. The value of contents includes the + fingerprint of the certificate that was selected or generated during the + construction of the RTCPeerConnection. The origin parameter contains the + origin of the script that calls the RTCPeerConnection method that triggers + this behavior. The usernameHint value is the same value that is provided + to setIdentityProvider, if any such value was provided. + + [RTCPeerConnection-getIdentityAssertion] + 3. The IdP proxy returns a Promise to the RTCPeerConnection. The IdP proxy is + expected to generate the identity assertion asynchronously. + + [RTCPeerConnection-getIdentityAssertion] + If the user has been authenticated by the IdP, and the IdP is able to generate + an identity assertion, the IdP resolves the promise with an identity assertion + in the form of an RTCIdentityAssertionResult . + + [RTCPeerConnection-getIdentityAssertion] + This step depends entirely on the IdP. The methods by which an IdP authenticates + users or generates assertions is not specified, though they could involve + interacting with the IdP server or other servers. + + [RTCPeerConnection-getIdentityAssertion] + 4. If the IdP proxy produces an error or returns a promise that does not resolve + to a valid RTCIdentityValidationResult (see 9.5 IdP Error Handling), then + identity validation fails. + + [Untestable] + 5. The RTCPeerConnection MAY store the identity assertion for use with future + offers or answers. If a fresh identity assertion is needed for any reason, + applications can create a new RTCPeerConnection. + + [RTCPeerConnection-getIdentityAssertion] + 6. If the identity request was triggered by a createOffer() or createAnswer(), + then the assertion is converted to a JSON string, base64-encoded and inserted + into an a=identity attribute in the session description. + + [RTCPeerConnection-getIdentityAssertion] + If assertion generation fails, then the promise for the corresponding function call + is rejected with a newly created OperationError. + +9.3.1 User Login Procedure + [RTCPeerConnection-getIdentityAssertion] + An IdP MAY reject an attempt to generate an identity assertion if it is unable to + verify that a user is authenticated. This might be due to the IdP not having the + necessary authentication information available to it (such as cookies). + + [RTCPeerConnection-getIdentityAssertion] + Rejecting the promise returned by generateAssertion will cause the error to propagate + to the application. Login errors are indicated by rejecting the promise with an RTCError + with errorDetail set to "idp-need-login". + + [RTCPeerConnection-getIdentityAssertion] + The URL to login at will be passed to the application in the idpLoginUrl attribute of + the RTCPeerConnection. + + [Out of Scope] + An application can load the login URL in an IFRAME or popup window; the resulting page + then SHOULD provide the user with an opportunity to enter any information necessary to + complete the authorization process. + + [Out of Scope] + Once the authorization process is complete, the page loaded in the IFRAME or popup sends + a message using postMessage [webmessaging] to the page that loaded it (through the + window.opener attribute for popups, or through window.parent for pages loaded in an IFRAME). + The message MUST consist of the DOMString "LOGINDONE". This message informs the application + that another attempt at generating an identity assertion is likely to be successful. + +9.4. Verifying Identity Assertions + The identity assertion request process involves the following asynchronous steps: + + [TODO] + 1. The RTCPeerConnection awaits any prior identity validation. Only one identity + validation can run at a time for an RTCPeerConnection. This can happen because + the resolution of setRemoteDescription is not blocked by identity validation + unless there is a target peer identity. + + [RTCPeerConnection-peerIdentity] + 2. The RTCPeerConnection loads the identity assertion from the session description + and decodes the base64 value, then parses the resulting JSON. The idp parameter + of the resulting dictionary contains a domain and an optional protocol value + that identifies the IdP, as described in [RTCWEB-SECURITY-ARCH]. + + [RTCPeerConnection-peerIdentity] + 3. The RTCPeerConnection instantiates the identified IdP as described in 9.1.1 + Identity Provider Selection and 9.2 Registering an IdP Proxy. If the IdP + cannot be loaded, instantiated or the IdP proxy is not registered, this + process fails. + + [RTCPeerConnection-peerIdentity] + 4. The RTCPeerConnection invokes the validateAssertion method registered by the IdP. + + [RTCPeerConnection-peerIdentity] + The assertion parameter is taken from the decoded identity assertion. The origin + parameter contains the origin of the script that calls the RTCPeerConnection + method that triggers this behavior. + + [RTCPeerConnection-peerIdentity] + 5. The IdP proxy returns a promise and performs the validation process asynchronously. + + [Out of Scope] + The IdP proxy verifies the identity assertion using whatever means necessary. + Depending on the authentication protocol this could involve interacting with the + IdP server. + + [RTCPeerConnection-peerIdentity] + 6. If the IdP proxy produces an error or returns a promise that does not resolve + to a valid RTCIdentityValidationResult (see 9.5 IdP Error Handling), then + identity validation fails. + + [RTCPeerConnection-peerIdentity] + 7. Once the assertion is successfully verified, the IdP proxy resolves the promise + with an RTCIdentityValidationResult containing the validated identity and the + original contents that are the payload of the assertion. + + [RTCPeerConnection-peerIdentity] + 8. The RTCPeerConnection decodes the contents and validates that it contains a + fingerprint value for every a=fingerprint attribute in the session description. + This ensures that the certificate used by the remote peer for communications + is covered by the identity assertion. + + [RTCPeerConnection-peerIdentity] + 9. The RTCPeerConnection validates that the domain portion of the identity matches + the domain of the IdP as described in [RTCWEB-SECURITY-ARCH]. If this check fails + then the identity validation fails. + + [RTCPeerConnection-peerIdentity] + 10. The RTCPeerConnection resolves the peerIdentity attribute with a new instance + of RTCIdentityAssertion that includes the IdP domain and peer identity. + + [Out of Scope] + 11. The user agent MAY display identity information to a user in its UI. Any user + identity information that is displayed in this fashion MUST use a mechanism that + cannot be spoofed by content. + + [RTCPeerConnection-peerIdentity] + If identity validation fails, the peerIdentity promise is rejected with a newly + created OperationError. + + [RTCPeerConnection-peerIdentity] + If identity validation fails and there is a target peer identity for the + RTCPeerConnection, the promise returned by setRemoteDescription MUST be rejected + with the same DOMException. + +9.5. IdP Error Handling + [RTCPeerConnection-getIdentityAssertion] + - A RTCPeerConnection might be configured with an identity provider, but loading of + the IdP URI fails. Any procedure that attempts to invoke such an identity provider + and cannot load the URI fails with an RTCError with errorDetail set to + "idp-load-failure" and the httpRequestStatusCode attribute of the error set to the + HTTP status code of the response. + + [Untestable] + - If the IdP loads fails due to the TLS certificate used for the HTTPS connection not + being trusted, it fails with an RTCError with errorDetail set to "idp-tls-failure". + This typically happens when the IdP uses certificate pinning and an intermediary + such as an enterprise firewall has intercepted the TLS connection. + + [RTCPeerConnection-getIdentityAssertion] + - If the script loaded from the identity provider is not valid JavaScript or does not + implement the correct interfaces, it causes an IdP failure with an RTCError with + errorDetail set to "idp-bad-script-failure". + + [TODO] + - An apparently valid identity provider might fail in several ways. + + If the IdP token has expired, then the IdP MUST fail with an RTCError with + errorDetail set to "idp-token-expired". + + If the IdP token is not valid, then the IdP MUST fail with an RTCError with + errorDetail set to "idp-token-invalid". + + [Untestable] + - The user agent SHOULD limit the time that it allows for an IdP to 15 seconds. + This includes both the loading of the IdP proxy and the identity assertion + generation or validation. Failure to do so potentially causes the corresponding + operation to take an indefinite amount of time. This timer can be cancelled when + the IdP proxy produces a response. Expiration of this timer cases an IdP failure + with an RTCError with errorDetail set to "idp-timeout". + + [RTCPeerConnection-getIdentityAssertion] + - If the identity provider requires the user to login, the operation will fail + RTCError with errorDetail set to "idp-need-login" and the idpLoginUrl attribute + of the error set to the URL that can be used to login. + + [RTCPeerConnection-peerIdentity] + - Even when the IdP proxy produces a positive result, the procedure that uses this + information might still fail. Additional validation of a RTCIdentityValidationResult + value is still necessary. The procedure for validation of identity assertions + describes additional steps that are required to successfully validate the output + of the IdP proxy. + + +Coverage Report + + Tested 29 + Not Tested 2 + Untestable 4 + + Total 35 diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/set-session-description.txt b/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/set-session-description.txt new file mode 100755 index 000000000..f2bb42270 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/coverage/set-session-description.txt @@ -0,0 +1,240 @@ +Coverage Report is based on the following editor draft: +https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + +4.3.1.6 Set the RTCSessionSessionDescription + + [Trivial] + 1. Let p be a new promise. + + [Trivial] + 2. In parallel, start the process to apply description as described in [JSEP] + (section 5.5. and section 5.6.). + + [Trivial] + 1. If the process to apply description fails for any reason, then user agent + MUST queue a task that runs the following steps: + + [Untestable] + 1. If connection's [[IsClosed]] slot is true, then abort these steps. + + [Untestable] + 2. If elements of the SDP were modified, then reject p with a newly created + InvalidModificationError and abort these steps. + + [RTCPeerConnection-setLocalDescription-answer] + [RTCPeerConnection-setRemoteDescription-offer] + [RTCPeerConnection-setRemoteDescription-answer] + 3. If the description's type is invalid for the current signaling state of + connection as described in [JSEP] (section 5.5. and section 5.6.), then + reject p with a newly created InvalidStateError and abort these steps. + + [RTCPeerConnection-setRemoteDescription-offer] + 4. If the content of description is not valid SDP syntax, then reject p + with an RTCError (with errorDetail set to "sdp-syntax-error" and the + sdpLineNumber attribute set to the line number in the SDP where the + syntax error was detected) and abort these steps. + + [Untestable] + 5. If the content of description is invalid, then reject p with a newly + created InvalidAccessError and abort these steps. + + [Untestable] + 6. For all other errors, for example if description cannot be applied at + the media layer, reject p with a newly created OperationError. + + [Trivial] + 2. If description is applied successfully, the user agent MUST queue a task + that runs the following steps: + + [Untestable] + 1. If connection's [[isClosed]] slot is true, then abort these steps. + + [RTCPeerConnection-setLocalDescription] + 2. If description is set as a local description, then run one of the + following steps: + + [RTCPeerConnection-setLocalDescription-offer] + - If description is of type "offer", set connection.pendingLocalDescription + to description and signaling state to have-local-offer. + + [RTCPeerConnection-setLocalDescription-answer] + - If description is of type "answer", then this completes an offer answer + negotiation. + + Set connection's currentLocalDescription to description and + currentRemoteDescription to the value of pendingRemoteDescription. + + Set both pendingRemoteDescription and pendingLocalDescription to null. + Finally set connection's signaling state to stable + + [RTCPeerConnection-setLocalDescription-rollback] + - If description is of type "rollback", then this is a rollback. Set + connection.pendingLocalDescription to null and signaling state to stable. + + [RTCPeerConnection-setLocalDescription-pranswer] + - If description is of type "pranswer", then set + connection.pendingLocalDescription to description and signaling state to + have-local-pranswer. + + [RTCPeerConnection-setRemoteDescription] + 3. Otherwise, if description is set as a remote description, then run one of the + following steps: + + [RTCPeerConnection-setRemoteDescription-offer] + - If description is of type "offer", set connection.pendingRemoteDescription + attribute to description and signaling state to have-remote-offer. + + [RTCPeerConnection-setRemoteDescription-answer] + - If description is of type "answer", then this completes an offer answer + negotiation. + + Set connection's currentRemoteDescription to description and + currentLocalDescription to the value of pendingLocalDescription. + + Set both pendingRemoteDescription and pendingLocalDescription to null. + + Finally setconnection's signaling state to stable + + [RTCPeerConnection-setRemoteDescription-rollback] + - If description is of type "rollback", then this is a rollback. + Set connection.pendingRemoteDescription to null and signaling state to stable. + + [RTCPeerConnection-setRemoteDescription-rollback] + - If description is of type "pranswer", then set + connection.pendingRemoteDescription to description and signaling state + to have-remote-pranswer. + + [RTCPeerConnection-setLocalDescription] + [RTCPeerConnection-setRemoteDescription] + 4. If connection's signaling state changed above, fire a simple event named + signalingstatechange at connection. + + [TODO] + 5. If description is of type "answer", and it initiates the closure of an existing + SCTP association, as defined in [SCTP-SDP], Sections 10.3 and 10.4, set the value + of connection's [[sctpTransport]] internal slot to null. + + [RTCSctpTransport] + 6. If description is of type "answer" or "pranswer", then run the following steps: + + [RTCSctpTransport] + 1. If description initiates the establishment of a new SCTP association, + as defined in [SCTP-SDP], Sections 10.3 and 10.4, set the value of connection's + [[sctpTransport]] internal slot to a newly created RTCSctpTransport. + + [TODO] + 2. If description negotiates the DTLS role of the SCTP transport, and there is an + RTCDataChannel with a null id, then generate an ID according to + [RTCWEB-DATA-PROTOCOL]. + + [Untestable] + If no available ID could be generated, then run the following steps: + + [Untestable] + 1. Let channel be the RTCDataChannel object for which an ID could not be + generated. + + [Untestable] + 2. Set channel's readyState attribute to closed. + + [Untestable] + 3. Fire an event named error with a ResourceInUse exception at channel. + + [Untestable] + 4. Fire a simple event named close at channel. + + [TODO RTCPeerConnection-setDescription-transceiver] + 7. If description is set as a local description, then run the following steps for + each media description in description that is not yet associated with an + RTCRtpTransceiver object: + + [TODO RTCPeerConnection-setDescription-transceiver] + 1. Let transceiver be the RTCRtpTransceiver used to create the media + description. + + [TODO RTCPeerConnection-setDescription-transceiver] + 2. Set transceiver's mid value to the mid of the corresponding media + description. + + [RTCPeerConnection-ontrack] + 8. If description is set as a remote description, then run the following steps + for each media description in description: + + [TODO RTCPeerConnection-setDescription-transceiver] + 1. As described by [JSEP] (section 5.9.), attempt to find an existing + RTCRtpTransceiver object, transceiver, to represent the media description. + + [RTCPeerConnection-ontrack] + 2. If no suitable transceiver is found (transceiver is unset), run the following + steps: + + [RTCPeerConnection-ontrack] + 1. Create an RTCRtpSender, sender, from the media description. + + [RTCPeerConnection-ontrack] + 2. Create an RTCRtpReceiver, receiver, from the media description. + + [RTCPeerConnection-ontrack] + 3. Create an RTCRtpTransceiver with sender, receiver and direction, and let + transceiver be the result. + + [RTCPeerConnection-ontrack] + 3. Set transceiver's mid value to the mid of the corresponding media description. + If the media description has no MID, and transceiver's mid is unset, generate + a random value as described in [JSEP] (section 5.9.). + + [RTCPeerConnection-ontrack] + 4. If the direction of the media description is sendrecv or sendonly, and + transceiver.receiver.track has not yet been fired in a track event, process + the remote track for the media description, given transceiver. + + [TODO RTCPeerConnection-setDescription-transceiver] + 5. If the media description is rejected, and transceiver is not already stopped, + stop the RTCRtpTransceiver transceiver. + + + [TODO RTCPeerConnection-setDescription-transceiver] + 9. If description is of type "rollback", then run the following steps: + + [TODO RTCPeerConnection-setDescription-transceiver] + 1. If the mid value of an RTCRtpTransceiver was set to a non-null value by + the RTCSessionDescription that is being rolled back, set the mid value + of that transceiver to null, as described by [JSEP] (section 4.1.8.2.). + + [TODO RTCPeerConnection-setDescription-transceiver] + 2. If an RTCRtpTransceiver was created by applying the RTCSessionDescription + that is being rolled back, and a track has not been attached to it via + addTrack, remove that transceiver from connection's set of transceivers, + as described by [JSEP] (section 4.1.8.2.). + + [TODO RTCPeerConnection-setDescription-transceiver] + 3. Restore the value of connection's [[SctpTransport]] internal slot to its + value at the last stable signaling state. + + [RTCPeerConnection-onnegotiationneeded] + 10. If connection's signaling state is now stable, update the negotiation-needed + flag. If connection's [[NegotiationNeeded]] slot was true both before and after + this update, queue a task that runs the following steps: + + [Untestable] + 1. If connection's [[IsClosed]] slot is true, abort these steps. + + [RTCPeerConnection-onnegotiationneeded] + 2. If connection's [[NegotiationNeeded]] slot is false, abort these steps. + + [RTCPeerConnection-onnegotiationneeded] + 3. Fire a simple event named negotiationneeded at connection. + + [Trivial] + 11. Resolve p with undefined. + + [Trivial] + 3. Return p. + + +Coverage Report + + Tested 35 + Not Tested 15 + Untestable 8 + Total 58 diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/getstats.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/getstats.html new file mode 100755 index 000000000..578a6b60e --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/getstats.html @@ -0,0 +1,130 @@ + + + + + + + RTCPeerConnection GetStats + + +
+

Retrieved stats info

+
+  
+  
+
+
+ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/historical.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/historical.html new file mode 100755 index 000000000..79238f543 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/historical.html @@ -0,0 +1,51 @@ + +Historical WebRTC features + + +
+ diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/README.txt b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/README.txt new file mode 100755 index 000000000..8adbf6aa1 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/README.txt @@ -0,0 +1,2 @@ +This directory contains files that test for behavior relevant to webrtc, +particularly defined in https://w3c.github.io/webrtc-pc/#legacy-interface-extensions diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-addStream.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-addStream.https.html new file mode 100755 index 000000000..ee13cdf2d --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-addStream.https.html @@ -0,0 +1,74 @@ + + + +RTCPeerConnection legacy addStream + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html new file mode 100755 index 000000000..7e6dcbcfb --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCPeerConnection-createOffer-offerToReceive.html @@ -0,0 +1,274 @@ + + +Test legacy offerToReceiveAudio/Video options + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html new file mode 100755 index 000000000..4932140a3 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html @@ -0,0 +1,172 @@ + + +RTCRtpTransceiver with OfferToReceive legacy options + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/onaddstream.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/onaddstream.https.html new file mode 100755 index 000000000..e36119e56 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/legacy/onaddstream.https.html @@ -0,0 +1,157 @@ + + +onaddstream tests + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/media/test-v-128k-320x240-24fps-8kfr.webm b/common/tct-webrtc-w3c-tests/webrtc/w3c/media/test-v-128k-320x240-24fps-8kfr.webm new file mode 100755 index 000000000..189c472f9 Binary files /dev/null and b/common/tct-webrtc-w3c-tests/webrtc/w3c/media/test-v-128k-320x240-24fps-8kfr.webm differ diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/no-media-call.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/no-media-call.html new file mode 100755 index 000000000..77563a1da --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/no-media-call.html @@ -0,0 +1,100 @@ + + + + + + RTCPeerConnection No-Media Connection Test + + +
+

iceConnectionState info

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/promises-call.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/promises-call.html new file mode 100755 index 000000000..66f7e65b9 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/promises-call.html @@ -0,0 +1,113 @@ + + + + + + + RTCPeerConnection Data-Only Connection Test with Promises + + +
+

iceConnectionState info

+
+
+ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/RTCPeerConnection-payloadTypes.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/RTCPeerConnection-payloadTypes.html new file mode 100755 index 000000000..8857c2790 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/RTCPeerConnection-payloadTypes.html @@ -0,0 +1,49 @@ + + + +RTCPeerConnection RTP payload types + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html new file mode 100755 index 000000000..fdcc3567d --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/bundle.https.html @@ -0,0 +1,95 @@ + + +RTCPeerConnection BUNDLE + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html new file mode 100755 index 000000000..5a69cf0ef --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/candidate-exchange.https.html @@ -0,0 +1,218 @@ + + + +Candidate exchange + + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html new file mode 100755 index 000000000..8ed25294f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/crypto-suite.https.html @@ -0,0 +1,85 @@ + + +RTCPeerConnection.prototype.createOffer + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-fingerprint-validation.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-fingerprint-validation.html new file mode 100755 index 000000000..59fdfc9a0 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-fingerprint-validation.html @@ -0,0 +1,37 @@ + + + +DTLS fingerprint validation + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-setup.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-setup.https.html new file mode 100755 index 000000000..004326523 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/dtls-setup.https.html @@ -0,0 +1,86 @@ + + +RTCPeerConnection a=setup SDP parameter test + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover-datachannel.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover-datachannel.html new file mode 100755 index 000000000..63134964f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover-datachannel.html @@ -0,0 +1,62 @@ + + + +RTCPeerConnection Handovers + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html new file mode 100755 index 000000000..89e98f249 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/handover.html @@ -0,0 +1,72 @@ + + +RTCPeerConnection Handovers + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html new file mode 100755 index 000000000..f12f3a30e --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-state.https.html @@ -0,0 +1,130 @@ + + + +RTCPeerConnection Failed State + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html new file mode 100755 index 000000000..2ad76290e --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/ice-ufragpwd.html @@ -0,0 +1,55 @@ + + + +RTCPeerConnection Failed State + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/jsep-initial-offer.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/jsep-initial-offer.https.html new file mode 100755 index 000000000..5c1cb8aaf --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/jsep-initial-offer.https.html @@ -0,0 +1,41 @@ + + +RTCPeerConnection.prototype.createOffer + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html new file mode 100755 index 000000000..4d178a782 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/missing-fields.html @@ -0,0 +1,47 @@ + + +RTCPeerconnection SDP parse tests + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html new file mode 100755 index 000000000..be4031943 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/msid-parse.html @@ -0,0 +1,71 @@ + + +RTCPeerconnection MSID parsing + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-clockrate.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-clockrate.html new file mode 100755 index 000000000..28909d8a6 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-clockrate.html @@ -0,0 +1,42 @@ + + + + +RTP clockrate + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-demuxing.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-demuxing.html new file mode 100755 index 000000000..fc14ed29f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-demuxing.html @@ -0,0 +1,58 @@ + + + +RTCPeerConnection payload type demuxing + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html new file mode 100755 index 000000000..a7d2a2554 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtp-payloadtypes.html @@ -0,0 +1,50 @@ + + +payload type handling (assuming rtcp-mux) + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html new file mode 100755 index 000000000..2e26f07fa --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/rtx-codecs.https.html @@ -0,0 +1,115 @@ + + +RTX codec integrity checks + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sctp-format.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sctp-format.html new file mode 100755 index 000000000..747b7b3ec --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sctp-format.html @@ -0,0 +1,25 @@ + + +RTCPeerconnection SDP SCTP format test + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sdes-dont-dont-dont.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sdes-dont-dont-dont.html new file mode 100755 index 000000000..2932c8e27 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/sdes-dont-dont-dont.html @@ -0,0 +1,57 @@ + + + +RTCPeerConnection MUST NOT support SDES + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-answer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-answer.html new file mode 100755 index 000000000..26104a3e0 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-answer.html @@ -0,0 +1,62 @@ + + +RTCPeerConnection Simulcast Answer + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-offer.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-offer.html new file mode 100755 index 000000000..bb8c33ac0 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/simulcast-offer.html @@ -0,0 +1,33 @@ + + +RTCPeerConnection Simulcast Offer + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/split.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/split.https.html new file mode 100755 index 000000000..32fdd2963 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/split.https.html @@ -0,0 +1,98 @@ + + +RTCPeerConnection BUNDLE + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/unknown-mediatypes.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/unknown-mediatypes.html new file mode 100755 index 000000000..0bf497f53 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/unknown-mediatypes.html @@ -0,0 +1,34 @@ + + +RTCPeerconnection SDP handling of unknown media types + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html new file mode 100755 index 000000000..3425c9ff0 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/protocol/video-codecs.https.html @@ -0,0 +1,95 @@ + + +RTCPeerConnection.prototype.createOffer + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html new file mode 100755 index 000000000..31251e863 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/receiver-track-live.https.html @@ -0,0 +1,72 @@ + + + + + Remote tracks should not get ended except for stop/close + + + + + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/recvonly-transceiver-can-become-sendrecv.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/recvonly-transceiver-can-become-sendrecv.https.html new file mode 100755 index 000000000..508c14511 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/recvonly-transceiver-can-become-sendrecv.https.html @@ -0,0 +1,50 @@ + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/resources/RTCCertificate-postMessage-iframe.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/resources/RTCCertificate-postMessage-iframe.html new file mode 100755 index 000000000..9e52ba0c8 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/resources/RTCCertificate-postMessage-iframe.html @@ -0,0 +1,9 @@ + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/simplecall-no-ssrcs.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/simplecall-no-ssrcs.https.html new file mode 100755 index 000000000..880740363 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/simplecall-no-ssrcs.https.html @@ -0,0 +1,118 @@ + + + + + RTCPeerConnection Connection Test + + + +
+
+ + +
+ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/simplecall.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/simplecall.https.html new file mode 100755 index 000000000..7d9387ac5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/simplecall.https.html @@ -0,0 +1,109 @@ + + + + + RTCPeerConnection Connection Test + + + +
+
+ + +
+ + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/basic.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/basic.https.html new file mode 100755 index 000000000..f109543f3 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/basic.https.html @@ -0,0 +1,23 @@ + + +RTCPeerConnection Simulcast Tests + + + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/getStats.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/getStats.https.html new file mode 100755 index 000000000..2c0d2a676 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/getStats.https.html @@ -0,0 +1,34 @@ + + +RTCPeerConnection Simulcast Tests - getStats + + + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/h264.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/h264.https.html new file mode 100755 index 000000000..a9e19e468 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/h264.https.html @@ -0,0 +1,31 @@ + + +RTCPeerConnection Simulcast Tests + + + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/setParameters-active.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/setParameters-active.https.html new file mode 100755 index 000000000..a34f7bc83 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/setParameters-active.https.html @@ -0,0 +1,54 @@ + + +RTCPeerConnection Simulcast Tests - setParameters/active + + + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/simulcast.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/simulcast.js new file mode 100755 index 000000000..3811d3a72 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/simulcast.js @@ -0,0 +1,131 @@ +'use strict'; +/* Helper functions to munge SDP and split the sending track into + * separate tracks on the receiving end. This can be done in a number + * of ways, the one used here uses the fact that the MID and RID header + * extensions which are used for packet routing share the same wire + * format. The receiver interprets the rids from the sender as mids + * which allows receiving the different spatial resolutions on separate + * m-lines and tracks. + */ +const extensionsToFilter = [ + 'urn:ietf:params:rtp-hdrext:sdes:mid', + 'urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id', + 'urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id', +]; + +function swapRidAndMidExtensionsInSimulcastOffer(offer, rids) { + const sections = SDPUtils.splitSections(offer.sdp); + const dtls = SDPUtils.getDtlsParameters(sections[1], sections[0]); + const ice = SDPUtils.getIceParameters(sections[1], sections[0]); + const rtpParameters = SDPUtils.parseRtpParameters(sections[1]); + + // The gist of this hack is that rid and mid have the same wire format. + const rid = rtpParameters.headerExtensions.find(ext => ext.uri === 'urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id'); + rtpParameters.headerExtensions = rtpParameters.headerExtensions.filter(ext => { + return !extensionsToFilter.includes(ext.uri); + }); + // This tells the other side that the RID packets are actually mids. + rtpParameters.headerExtensions.push({id: rid.id, uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', direction: 'sendrecv'}); + + // Filter rtx as we have no way to (re)interpret rrid. + // Not doing this makes probing use RTX, it's not understood and ramp-up is slower. + rtpParameters.codecs = rtpParameters.codecs.filter(c => c.name.toUpperCase() !== 'RTX'); + + let sdp = SDPUtils.writeSessionBoilerplate() + + SDPUtils.writeDtlsParameters(dtls, 'actpass') + + SDPUtils.writeIceParameters(ice) + + 'a=group:BUNDLE ' + rids.join(' ') + '\r\n'; + const baseRtpDescription = SDPUtils.writeRtpDescription('video', rtpParameters); + rids.forEach(rid => { + sdp += baseRtpDescription + + 'a=mid:' + rid + '\r\n' + + 'a=msid:rid-' + rid + ' rid-' + rid + '\r\n'; + }); + return sdp; +} + +function swapRidAndMidExtensionsInSimulcastAnswer(answer, localDescription, rids) { + const sections = SDPUtils.splitSections(answer.sdp); + const dtls = SDPUtils.getDtlsParameters(sections[1], sections[0]); + const ice = SDPUtils.getIceParameters(sections[1], sections[0]); + const rtpParameters = SDPUtils.parseRtpParameters(sections[1]); + + rtpParameters.headerExtensions = rtpParameters.headerExtensions.filter(ext => { + return !extensionsToFilter.includes(ext.uri); + }); + const localMid = SDPUtils.getMid(SDPUtils.splitSections(localDescription.sdp)[1]); + let sdp = SDPUtils.writeSessionBoilerplate() + + SDPUtils.writeDtlsParameters(dtls, 'active') + + SDPUtils.writeIceParameters(ice) + + 'a=group:BUNDLE ' + localMid + '\r\n'; + sdp += SDPUtils.writeRtpDescription('video', rtpParameters); + sdp += 'a=mid:' + localMid + '\r\n'; + + rids.forEach(rid => { + sdp += 'a=rid:' + rid + ' recv\r\n'; + }); + sdp += 'a=simulcast:recv ' + rids.join(';') + '\r\n'; + + // Re-add headerextensions we filtered. + const headerExtensions = SDPUtils.parseRtpParameters(SDPUtils.splitSections(localDescription.sdp)[1]).headerExtensions; + headerExtensions.forEach(ext => { + if (extensionsToFilter.includes(ext.uri)) { + sdp += 'a=extmap:' + ext.id + ' ' + ext.uri + '\r\n'; + } + }); + return sdp; +} + +async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, codec) { + exchangeIceCandidates(pc1, pc2); + + const metadataToBeLoaded = []; + pc2.ontrack = (e) => { + const stream = e.streams[0]; + const v = document.createElement('video'); + v.autoplay = true; + v.srcObject = stream; + v.id = stream.id + metadataToBeLoaded.push(new Promise((resolve) => { + v.addEventListener('loadedmetadata', () => { + resolve(); + }); + })); + }; + + const sendEncodings = rids.map(rid => ({rid})); + // Use a 2X downscale factor between each layer. To improve ramp-up time, the + // top layer is scaled down by a factor 2. Smaller layer comes first. For + // example if MediaStreamTrack is 720p and we want to send three layers we'll + // get {90p, 180p, 360p}. + let scaleResolutionDownBy = 2; + for (let i = sendEncodings.length - 1; i >= 0; --i) { + sendEncodings[i].scaleResolutionDownBy = scaleResolutionDownBy; + scaleResolutionDownBy *= 2; + } + // Use getUserMedia as getNoiseStream does not have enough entropy to ramp-up. + await setMediaPermission(); + const stream = await navigator.mediaDevices.getUserMedia({video: {width: 1280, height: 720}}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const transceiver = pc1.addTransceiver(stream.getVideoTracks()[0], { + streams: [stream], + sendEncodings: sendEncodings, + }); + if (codec) { + preferCodec(transceiver, codec.mimeType, codec.sdpFmtpLine); + } + const offer = await pc1.createOffer(); + await pc1.setLocalDescription(offer), + await pc2.setRemoteDescription({ + type: 'offer', + sdp: swapRidAndMidExtensionsInSimulcastOffer(offer, rids), + }); + const answer = await pc2.createAnswer(); + await pc2.setLocalDescription(answer); + await pc1.setRemoteDescription({ + type: 'answer', + sdp: swapRidAndMidExtensionsInSimulcastAnswer(answer, pc1.localDescription, rids), + }); + assert_equals(metadataToBeLoaded.length, rids.length); + return Promise.all(metadataToBeLoaded); +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/vp8.https.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/vp8.https.html new file mode 100755 index 000000000..624ce2617 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/simulcast/vp8.https.html @@ -0,0 +1,26 @@ + + +RTCPeerConnection Simulcast Tests + + + + + + + + + + diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCConfiguration-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCConfiguration-helper.js new file mode 100755 index 000000000..fb8eb5099 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCConfiguration-helper.js @@ -0,0 +1,24 @@ +'use strict'; + +// Run a test function as two test cases. +// The first test case test the configuration by passing a given config +// to the constructor. +// The second test case create an RTCPeerConnection object with default +// configuration, then call setConfiguration with the provided config. +// The test function is given a constructor function to create +// a new instance of RTCPeerConnection with given config, +// either directly as constructor parameter or through setConfiguration. +function config_test(test_func, desc) { + test(() => { + test_func(config => new RTCPeerConnection(config)); + }, `new RTCPeerConnection(config) - ${desc}`); + + test(() => { + test_func(config => { + const pc = new RTCPeerConnection(); + assert_idl_attribute(pc, 'setConfiguration'); + pc.setConfiguration(config); + return pc; + }) + }, `setConfiguration(config) - ${desc}`); +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCDTMFSender-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCDTMFSender-helper.js new file mode 100755 index 000000000..4316c3804 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCDTMFSender-helper.js @@ -0,0 +1,149 @@ +'use strict'; + +// Test is based on the following editor draft: +// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + +// Code using this helper should also include RTCPeerConnection-helper.js +// in the main HTML file + +// The following helper functions are called from RTCPeerConnection-helper.js: +// getTrackFromUserMedia +// exchangeOfferAnswer + +// Create a RTCDTMFSender using getUserMedia() +// Connect the PeerConnection to another PC and wait until it is +// properly connected, so that DTMF can be sent. +function createDtmfSender(pc = new RTCPeerConnection()) { + let dtmfSender; + return getTrackFromUserMedia('audio') + .then(([track, mediaStream]) => { + const sender = pc.addTrack(track, mediaStream); + dtmfSender = sender.dtmf; + assert_true(dtmfSender instanceof RTCDTMFSender, + 'Expect audio sender.dtmf to be set to a RTCDTMFSender'); + // Note: spec bug open - https://github.com/w3c/webrtc-pc/issues/1774 + // on whether sending should be possible before negotiation. + const pc2 = new RTCPeerConnection(); + Object.defineProperty(pc, 'otherPc', { value: pc2 }); + exchangeIceCandidates(pc, pc2); + return exchangeOfferAnswer(pc, pc2); + }).then(() => { + if (!('canInsertDTMF' in dtmfSender)) { + return Promise.resolve(); + } + // Wait until dtmfSender.canInsertDTMF becomes true. + // Up to 150 ms has been observed in test. Wait 1 second + // in steps of 10 ms. + // Note: Using a short timeout and rejected promise in order to + // make test return a clear error message on failure. + return new Promise((resolve, reject) => { + let counter = 0; + step_timeout(function checkCanInsertDTMF() { + if (dtmfSender.canInsertDTMF) { + resolve(); + } else { + if (counter >= 100) { + reject('Waited too long for canInsertDTMF'); + return; + } + ++counter; + step_timeout(checkCanInsertDTMF, 10); + } + }, 0); + }); + }).then(() => { + return dtmfSender; + }); +} + +/* + Create an RTCDTMFSender and test tonechange events on it. + testFunc + Test function that is going to manipulate the DTMFSender. + It will be called with: + t - the test object + sender - the created RTCDTMFSender + pc - the associated RTCPeerConnection as second argument. + toneChanges + Array of expected tonechange events fired. The elements + are array of 3 items: + expectedTone + The expected character in event.tone + expectedToneBuffer + The expected new value of dtmfSender.toneBuffer + expectedDuration + The rough time since beginning or last tonechange event + was fired. + desc + Test description. + */ +function test_tone_change_events(testFunc, toneChanges, desc) { + // Convert to cumulative time + let cumulativeTime = 0; + const cumulativeToneChanges = toneChanges.map(c => { + cumulativeTime += c[2]; + return [c[0], c[1], cumulativeTime]; + }); + + // Wait for same duration as last expected duration + 100ms + // before passing test in case there are new tone events fired, + // in which case the test should fail. + const lastWait = toneChanges.pop()[2] + 100; + + promise_test(async t => { + const pc = new RTCPeerConnection(); + const dtmfSender = await createDtmfSender(pc); + const start = Date.now(); + + const allEventsReceived = new Promise(resolve => { + const onToneChange = t.step_func(ev => { + assert_true(ev instanceof RTCDTMFToneChangeEvent, + 'Expect tone change event object to be an RTCDTMFToneChangeEvent'); + + const { tone } = ev; + assert_equals(typeof tone, 'string', + 'Expect event.tone to be the tone string'); + + assert_greater_than(cumulativeToneChanges.length, 0, + 'More tonechange event is fired than expected'); + + const [ + expectedTone, expectedToneBuffer, expectedTime + ] = cumulativeToneChanges.shift(); + + assert_equals(tone, expectedTone, + `Expect current event.tone to be ${expectedTone}`); + + assert_equals(dtmfSender.toneBuffer, expectedToneBuffer, + `Expect dtmfSender.toneBuffer to be updated to ${expectedToneBuffer}`); + + // We check that the cumulative delay is at least the expected one, but + // system load may cause random delays, so we do not put any + // realistic upper bound on the timing of the events. + assert_between_inclusive(Date.now() - start, expectedTime, + expectedTime + 4000, + `Expect tonechange event for "${tone}" to be fired approximately after ${expectedTime} milliseconds`); + if (cumulativeToneChanges.length === 0) { + resolve(); + } + }); + + dtmfSender.addEventListener('tonechange', onToneChange); + }); + + testFunc(t, dtmfSender, pc); + await allEventsReceived; + const wait = ms => new Promise(resolve => t.step_timeout(resolve, ms)); + await wait(lastWait); + }, desc); +} + +// Get the one and only tranceiver from pc.getTransceivers(). +// Assumes that there is only one tranceiver in pc. +function getTransceiver(pc) { + const transceivers = pc.getTransceivers(); + assert_equals(transceivers.length, 1, + 'Expect there to be only one tranceiver in pc'); + + return transceivers[0]; +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCDataChannel-binaryType.window.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCDataChannel-binaryType.window.js new file mode 100755 index 000000000..c63281bd5 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCDataChannel-binaryType.window.js @@ -0,0 +1,27 @@ +'use strict'; + +const validBinaryTypes = ['blob', 'arraybuffer']; +const invalidBinaryTypes = ['jellyfish', 'arraybuffer ', '', null, undefined]; + +for (const binaryType of validBinaryTypes) { + test((t) => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const dc = pc.createDataChannel('test-binary-type'); + + dc.binaryType = binaryType; + assert_equals(dc.binaryType, binaryType, `dc.binaryType should be '${binaryType}'`); + }, `Setting binaryType to '${binaryType}' should succeed`); +} + +for (const binaryType of invalidBinaryTypes) { + test((t) => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const dc = pc.createDataChannel('test-binary-type'); + + assert_throws_dom('SyntaxError', () => { + dc.binaryType = binaryType; + }); + }, `Setting invalid binaryType '${binaryType}' should throw SyntaxError`); +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCPeerConnection-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCPeerConnection-helper.js new file mode 100755 index 000000000..ac435279b --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCPeerConnection-helper.js @@ -0,0 +1,715 @@ +'use strict' + +/* + * Helper Methods for testing the following methods in RTCPeerConnection: + * createOffer + * createAnswer + * setLocalDescription + * setRemoteDescription + * + * This file offers the following features: + * SDP similarity comparison + * Generating offer/answer using anonymous peer connection + * Test signalingstatechange event + * Test promise that never resolve + */ + +const audioLineRegex = /\r\nm=audio.+\r\n/g; +const videoLineRegex = /\r\nm=video.+\r\n/g; +const applicationLineRegex = /\r\nm=application.+\r\n/g; + +function countLine(sdp, regex) { + const matches = sdp.match(regex); + if(matches === null) { + return 0; + } else { + return matches.length; + } +} + +function countAudioLine(sdp) { + return countLine(sdp, audioLineRegex); +} + +function countVideoLine(sdp) { + return countLine(sdp, videoLineRegex); +} + +function countApplicationLine(sdp) { + return countLine(sdp, applicationLineRegex); +} + +function similarMediaDescriptions(sdp1, sdp2) { + if(sdp1 === sdp2) { + return true; + } else if( + countAudioLine(sdp1) !== countAudioLine(sdp2) || + countVideoLine(sdp1) !== countVideoLine(sdp2) || + countApplicationLine(sdp1) !== countApplicationLine(sdp2)) + { + return false; + } else { + return true; + } +} + +// Assert that given object is either an +// RTCSessionDescription or RTCSessionDescriptionInit +function assert_is_session_description(sessionDesc) { + if(sessionDesc instanceof RTCSessionDescription) { + return; + } + + assert_not_equals(sessionDesc, undefined, + 'Expect session description to be defined'); + + assert_true(typeof(sessionDesc) === 'object', + 'Expect sessionDescription to be either a RTCSessionDescription or an object'); + + assert_true(typeof(sessionDesc.type) === 'string', + 'Expect sessionDescription.type to be a string'); + + assert_true(typeof(sessionDesc.sdp) === 'string', + 'Expect sessionDescription.sdp to be a string'); +} + + +// We can't do string comparison to the SDP content, +// because RTCPeerConnection may return SDP that is +// slightly modified or reordered from what is given +// to it due to ICE candidate events or serialization. +// Instead, we create SDP with different number of media +// lines, and if the SDP strings are not the same, we +// simply count the media description lines and if they +// are the same, we assume it is the same. +function isSimilarSessionDescription(sessionDesc1, sessionDesc2) { + assert_is_session_description(sessionDesc1); + assert_is_session_description(sessionDesc2); + + if(sessionDesc1.type !== sessionDesc2.type) { + return false; + } else { + return similarMediaDescriptions(sessionDesc1.sdp, sessionDesc2.sdp); + } +} + +function assert_session_desc_similar(sessionDesc1, sessionDesc2) { + assert_true(isSimilarSessionDescription(sessionDesc1, sessionDesc2), + 'Expect both session descriptions to have the same count of media lines'); +} + +function assert_session_desc_not_similar(sessionDesc1, sessionDesc2) { + assert_false(isSimilarSessionDescription(sessionDesc1, sessionDesc2), + 'Expect both session descriptions to have different count of media lines'); +} + +async function generateDataChannelOffer(pc) { + pc.createDataChannel('test'); + const offer = await pc.createOffer(); + assert_equals(countApplicationLine(offer.sdp), 1, 'Expect m=application line to be present in generated SDP'); + return offer; +} + +async function generateAudioReceiveOnlyOffer(pc) +{ + try { + pc.addTransceiver('audio', { direction: 'recvonly' }); + return pc.createOffer(); + } catch(e) { + return pc.createOffer({ offerToReceiveAudio: true }); + } +} + +async function generateVideoReceiveOnlyOffer(pc) +{ + try { + pc.addTransceiver('video', { direction: 'recvonly' }); + return pc.createOffer(); + } catch(e) { + return pc.createOffer({ offerToReceiveVideo: true }); + } +} + +// Helper function to generate answer based on given offer using a freshly +// created RTCPeerConnection object +async function generateAnswer(offer) { + const pc = new RTCPeerConnection(); + await pc.setRemoteDescription(offer); + const answer = await pc.createAnswer(); + pc.close(); + return answer; +} + +// Helper function to generate offer using a freshly +// created RTCPeerConnection object +async function generateOffer() { + const pc = new RTCPeerConnection(); + const offer = await pc.createOffer(); + pc.close(); + return offer; +} + +// Run a test function that return a promise that should +// never be resolved. For lack of better options, +// we wait for a time out and pass the test if the +// promise doesn't resolve within that time. +function test_never_resolve(testFunc, testName) { + async_test(t => { + testFunc(t) + .then( + t.step_func(result => { + assert_unreached(`Pending promise should never be resolved. Instead it is fulfilled with: ${result}`); + }), + t.step_func(err => { + assert_unreached(`Pending promise should never be resolved. Instead it is rejected with: ${err}`); + })); + + t.step_timeout(t.step_func_done(), 100) + }, testName); +} + +// Helper function to exchange ice candidates between +// two local peer connections +function exchangeIceCandidates(pc1, pc2) { + // private function + function doExchange(localPc, remotePc) { + localPc.addEventListener('icecandidate', event => { + const { candidate } = event; + + // Guard against already closed peerconnection to + // avoid unrelated exceptions. + if (remotePc.signalingState !== 'closed') { + remotePc.addIceCandidate(candidate); + } + }); + } + + doExchange(pc1, pc2); + doExchange(pc2, pc1); +} + +// Returns a promise that resolves when a |name| event is fired. +function waitUntilEvent(obj, name) { + return new Promise(r => obj.addEventListener(name, r, {once: true})); +} + +// Returns a promise that resolves when the |transport.state| is |state| +// This should work for RTCSctpTransport, RTCDtlsTransport and RTCIceTransport. +async function waitForState(transport, state) { + while (transport.state != state) { + await waitUntilEvent(transport, 'statechange'); + } +} + +// Returns a promise that resolves when |pc.iceConnectionState| is 'connected' +// or 'completed'. +async function listenToIceConnected(pc) { + await waitForIceStateChange(pc, ['connected', 'completed']); +} + +// Returns a promise that resolves when |pc.iceConnectionState| is in one of the +// wanted states. +async function waitForIceStateChange(pc, wantedStates) { + while (!wantedStates.includes(pc.iceConnectionState)) { + await waitUntilEvent(pc, 'iceconnectionstatechange'); + } +} + +// Returns a promise that resolves when |pc.connectionState| is 'connected'. +async function listenToConnected(pc) { + while (pc.connectionState != 'connected') { + await waitUntilEvent(pc, 'connectionstatechange'); + } +} + +// Returns a promise that resolves when |pc.connectionState| is in one of the +// wanted states. +async function waitForConnectionStateChange(pc, wantedStates) { + while (!wantedStates.includes(pc.connectionState)) { + await waitUntilEvent(pc, 'connectionstatechange'); + } +} + +async function waitForIceGatheringState(pc, wantedStates) { + while (!wantedStates.includes(pc.iceGatheringState)) { + await waitUntilEvent(pc, 'icegatheringstatechange'); + } +} + +// Resolves when RTP packets have been received. +async function listenForSSRCs(t, receiver) { + while (true) { + const ssrcs = receiver.getSynchronizationSources(); + if (Array.isArray(ssrcs) && ssrcs.length > 0) { + return ssrcs; + } + await new Promise(r => t.step_timeout(r, 0)); + } +} + +// Helper function to create a pair of connected data channels. +// On success the promise resolves to an array with two data channels. +// It does the heavy lifting of performing signaling handshake, +// ICE candidate exchange, and waiting for data channel at two +// end points to open. Can do both negotiated and non-negotiated setup. +async function createDataChannelPair(t, options, + pc1 = createPeerConnectionWithCleanup(t), + pc2 = createPeerConnectionWithCleanup(t)) { + let pair = [], bothOpen; + try { + if (options.negotiated) { + pair = [pc1, pc2].map(pc => pc.createDataChannel('', options)); + bothOpen = Promise.all(pair.map(dc => new Promise((r, e) => { + dc.onopen = r; + dc.onerror = ({error}) => e(error); + }))); + } else { + pair = [pc1.createDataChannel('', options)]; + bothOpen = Promise.all([ + new Promise((r, e) => { + pair[0].onopen = r; + pair[0].onerror = ({error}) => e(error); + }), + new Promise((r, e) => pc2.ondatachannel = ({channel}) => { + pair[1] = channel; + channel.onopen = r; + channel.onerror = ({error}) => e(error); + }) + ]); + } + exchangeIceCandidates(pc1, pc2); + await exchangeOfferAnswer(pc1, pc2); + await bothOpen; + return pair; + } finally { + for (const dc of pair) { + dc.onopen = dc.onerror = null; + } + } +} + +// Wait for RTP and RTCP stats to arrive +async function waitForRtpAndRtcpStats(pc) { + // If remote stats are never reported, return after 5 seconds. + const startTime = performance.now(); + while (true) { + const report = await pc.getStats(); + const stats = [...report.values()].filter(({type}) => type.endsWith("bound-rtp")); + // Each RTP and RTCP stat has a reference + // to the matching stat in the other direction + if (stats.length && stats.every(({localId, remoteId}) => localId || remoteId)) { + break; + } + if (performance.now() > startTime + 5000) { + break; + } + } +} + +// Wait for a single message event and return +// a promise that resolve when the event fires +function awaitMessage(channel) { + const once = true; + return new Promise((resolve, reject) => { + channel.addEventListener('message', ({data}) => resolve(data), {once}); + channel.addEventListener('error', reject, {once}); + }); +} + +// Helper to convert a blob to array buffer so that +// we can read the content +async function blobToArrayBuffer(blob) { + const reader = new FileReader(); + reader.readAsArrayBuffer(blob); + return new Promise((resolve, reject) => { + reader.addEventListener('load', () => resolve(reader.result), {once: true}); + reader.addEventListener('error', () => reject(reader.error), {once: true}); + }); +} + +// Assert that two TypedArray or ArrayBuffer objects have the same byte values +function assert_equals_typed_array(array1, array2) { + const [view1, view2] = [array1, array2].map((array) => { + if (array instanceof ArrayBuffer) { + return new DataView(array); + } else { + assert_true(array.buffer instanceof ArrayBuffer, + 'Expect buffer to be instance of ArrayBuffer'); + return new DataView(array.buffer, array.byteOffset, array.byteLength); + } + }); + + assert_equals(view1.byteLength, view2.byteLength, + 'Expect both arrays to be of the same byte length'); + + const byteLength = view1.byteLength; + + for (let i = 0; i < byteLength; ++i) { + assert_equals(view1.getUint8(i), view2.getUint8(i), + `Expect byte at buffer position ${i} to be equal`); + } +} + +// These media tracks will be continually updated with deterministic "noise" in +// order to ensure UAs do not cease transmission in response to apparent +// silence. +// +// > Many codecs and systems are capable of detecting "silence" and changing +// > their behavior in this case by doing things such as not transmitting any +// > media. +// +// Source: https://w3c.github.io/webrtc-pc/#offer-answer-options +const trackFactories = { + // Share a single context between tests to avoid exceeding resource limits + // without requiring explicit destruction. + audioContext: null, + + /** + * Given a set of requested media types, determine if the user agent is + * capable of procedurally generating a suitable media stream. + * + * @param {object} requested + * @param {boolean} [requested.audio] - flag indicating whether the desired + * stream should include an audio track + * @param {boolean} [requested.video] - flag indicating whether the desired + * stream should include a video track + * + * @returns {boolean} + */ + canCreate(requested) { + const supported = { + audio: !!window.AudioContext && !!window.MediaStreamAudioDestinationNode, + video: !!HTMLCanvasElement.prototype.captureStream + }; + + return (!requested.audio || supported.audio) && + (!requested.video || supported.video); + }, + + audio() { + const ctx = trackFactories.audioContext = trackFactories.audioContext || + new AudioContext(); + const oscillator = ctx.createOscillator(); + const dst = oscillator.connect(ctx.createMediaStreamDestination()); + oscillator.start(); + return dst.stream.getAudioTracks()[0]; + }, + + video({width = 640, height = 480, signal} = {}) { + const canvas = Object.assign( + document.createElement("canvas"), {width, height} + ); + const ctx = canvas.getContext('2d'); + const stream = canvas.captureStream(); + + let count = 0; + const interval = setInterval(() => { + ctx.fillStyle = `rgb(${count%255}, ${count*count%255}, ${count%255})`; + count += 1; + ctx.fillRect(0, 0, width, height); + // Add some bouncing boxes in contrast color to add a little more noise. + const contrast = count + 128; + ctx.fillStyle = `rgb(${contrast%255}, ${contrast*contrast%255}, ${contrast%255})`; + const xpos = count % (width - 20); + const ypos = count % (height - 20); + ctx.fillRect(xpos, ypos, xpos + 20, ypos + 20); + const xpos2 = (count + width / 2) % (width - 20); + const ypos2 = (count + height / 2) % (height - 20); + ctx.fillRect(xpos2, ypos2, xpos2 + 20, ypos2 + 20); + // If signal is set (0-255), add a constant-color box of that luminance to + // the video frame at coordinates 20 to 60 in both X and Y direction. + // (big enough to avoid color bleed from surrounding video in some codecs, + // for more stable tests). + if (signal != undefined) { + ctx.fillStyle = `rgb(${signal}, ${signal}, ${signal})`; + ctx.fillRect(20, 20, 40, 40); + } + }, 100); + + if (document.body) { + document.body.appendChild(canvas); + } else { + document.addEventListener('DOMContentLoaded', () => { + document.body.appendChild(canvas); + }, {once: true}); + } + + // Implement track.stop() for performance in some tests on some platforms + const track = stream.getVideoTracks()[0]; + const nativeStop = track.stop; + track.stop = function stop() { + clearInterval(interval); + nativeStop.apply(this); + if (document.body && canvas.parentElement == document.body) { + document.body.removeChild(canvas); + } + }; + return track; + } +}; + +// Get the signal from a video element inserted by createNoiseStream +function getVideoSignal(v) { + if (v.videoWidth < 60 || v.videoHeight < 60) { + throw new Error('getVideoSignal: video too small for test'); + } + const canvas = document.createElement("canvas"); + canvas.width = canvas.height = 60; + const context = canvas.getContext('2d'); + context.drawImage(v, 0, 0); + // Extract pixel value at position 40, 40 + const pixel = context.getImageData(40, 40, 1, 1); + // Use luma reconstruction to get back original value according to + // ITU-R rec BT.709 + return (pixel.data[0] * 0.21 + pixel.data[1] * 0.72 + pixel.data[2] * 0.07); +} + +async function detectSignal(t, v, value) { + while (true) { + const signal = getVideoSignal(v).toFixed(); + // allow off-by-two pixel error (observed in some implementations) + if (value - 2 <= signal && signal <= value + 2) { + return; + } + // We would like to wait for each new frame instead here, + // but there seems to be no such callback. + await new Promise(r => t.step_timeout(r, 100)); + } +} + +// Generate a MediaStream bearing the specified tracks. +// +// @param {object} [caps] +// @param {boolean} [caps.audio] - flag indicating whether the generated stream +// should include an audio track +// @param {boolean} [caps.video] - flag indicating whether the generated stream +// should include a video track, or parameters for video +async function getNoiseStream(caps = {}) { + if (!trackFactories.canCreate(caps)) { + return navigator.mediaDevices.getUserMedia(caps); + } + const tracks = []; + + if (caps.audio) { + tracks.push(trackFactories.audio()); + } + + if (caps.video) { + tracks.push(trackFactories.video(caps.video)); + } + + return new MediaStream(tracks); +} + +// Obtain a MediaStreamTrack of kind using procedurally-generated streams (and +// falling back to `getUserMedia` when the user agent cannot generate the +// requested streams). +// Return Promise of pair of track and associated mediaStream. +// Assumes that there is at least one available device +// to generate the track. +function getTrackFromUserMedia(kind) { + return getNoiseStream({ [kind]: true }) + .then(mediaStream => { + const [track] = mediaStream.getTracks(); + return [track, mediaStream]; + }); +} + +// Obtain |count| MediaStreamTracks of type |kind| and MediaStreams. The tracks +// do not belong to any stream and the streams are empty. Returns a Promise +// resolved with a pair of arrays [tracks, streams]. +// Assumes there is at least one available device to generate the tracks and +// streams and that the getUserMedia() calls resolve. +function getUserMediaTracksAndStreams(count, type = 'audio') { + let otherTracksPromise; + if (count > 1) + otherTracksPromise = getUserMediaTracksAndStreams(count - 1, type); + else + otherTracksPromise = Promise.resolve([[], []]); + return otherTracksPromise.then(([tracks, streams]) => { + return getTrackFromUserMedia(type) + .then(([track, stream]) => { + // Remove the default stream-track relationship. + stream.removeTrack(track); + tracks.push(track); + streams.push(stream); + return [tracks, streams]; + }); + }); +} + +// Performs an offer exchange caller -> callee. +async function exchangeOffer(caller, callee) { + await caller.setLocalDescription(await caller.createOffer()); + await callee.setRemoteDescription(caller.localDescription); +} +// Performs an answer exchange caller -> callee. +async function exchangeAnswer(caller, callee) { + // Note that caller's remote description must be set first; if not, + // there's a chance that candidates from callee arrive at caller before + // it has a remote description to apply them to. + const answer = await callee.createAnswer(); + await caller.setRemoteDescription(answer); + await callee.setLocalDescription(answer); +} +async function exchangeOfferAnswer(caller, callee) { + await exchangeOffer(caller, callee); + await exchangeAnswer(caller, callee); +} + +// The returned promise is resolved with caller's ontrack event. +async function exchangeAnswerAndListenToOntrack(t, caller, callee) { + const ontrackPromise = addEventListenerPromise(t, caller, 'track'); + await exchangeAnswer(caller, callee); + return ontrackPromise; +} +// The returned promise is resolved with callee's ontrack event. +async function exchangeOfferAndListenToOntrack(t, caller, callee) { + const ontrackPromise = addEventListenerPromise(t, callee, 'track'); + await exchangeOffer(caller, callee); + return ontrackPromise; +} + +// The resolver extends a |promise| that can be resolved or rejected using |resolve| +// or |reject|. +class Resolver extends Promise { + constructor(executor) { + let resolve, reject; + super((resolve_, reject_) => { + resolve = resolve_; + reject = reject_; + if (executor) { + return executor(resolve_, reject_); + } + }); + + this._done = false; + this._resolve = resolve; + this._reject = reject; + } + + /** + * Return whether the promise is done (resolved or rejected). + */ + get done() { + return this._done; + } + + /** + * Resolve the promise. + */ + resolve(...args) { + this._done = true; + return this._resolve(...args); + } + + /** + * Reject the promise. + */ + reject(...args) { + this._done = true; + return this._reject(...args); + } +} + +function addEventListenerPromise(t, obj, type, listener) { + if (!listener) { + return waitUntilEvent(obj, type); + } + return new Promise(r => obj.addEventListener(type, + t.step_func(e => r(listener(e))), + {once: true})); +} + +function createPeerConnectionWithCleanup(t) { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + return pc; +} + +async function createTrackAndStreamWithCleanup(t, kind = 'audio') { + let constraints = {}; + constraints[kind] = true; + const stream = await getNoiseStream(constraints); + const [track] = stream.getTracks(); + t.add_cleanup(() => track.stop()); + return [track, stream]; +} + +function findTransceiverForSender(pc, sender) { + const transceivers = pc.getTransceivers(); + for (let i = 0; i < transceivers.length; ++i) { + if (transceivers[i].sender == sender) + return transceivers[i]; + } + return null; +} + +function preferCodec(transceiver, mimeType, sdpFmtpLine) { + const {codecs} = RTCRtpSender.getCapabilities(transceiver.receiver.track.kind); + // sdpFmtpLine is optional, pick the first partial match if not given. + const selectedCodecIndex = codecs.findIndex(c => { + return c.mimeType === mimeType && (c.sdpFmtpLine === sdpFmtpLine || !sdpFmtpLine); + }); + const selectedCodec = codecs[selectedCodecIndex]; + codecs.slice(selectedCodecIndex, 1); + codecs.unshift(selectedCodec); + return transceiver.setCodecPreferences(codecs); +} + +// Contains a set of values and will yell at you if you try to add a value twice. +class UniqueSet extends Set { + constructor(items) { + super(); + if (items !== undefined) { + for (const item of items) { + this.add(item); + } + } + } + + add(value, message) { + if (message === undefined) { + message = `Value '${value}' needs to be unique but it is already in the set`; + } + assert_true(!this.has(value), message); + super.add(value); + } +} + +const iceGatheringStateTransitions = async (pc, ...states) => { + for (const state of states) { + await new Promise((resolve, reject) => { + pc.addEventListener('icegatheringstatechange', () => { + if (pc.iceGatheringState == state) { + resolve(); + } else { + reject(`Unexpected gathering state: ${pc.iceGatheringState}, was expecting ${state}`); + } + }, {once: true}); + }); + } +}; + +const initialOfferAnswerWithIceGatheringStateTransitions = + async (pc1, pc2, offerOptions) => { + await pc1.setLocalDescription( + await pc1.createOffer(offerOptions)); + const pc1Transitions = + iceGatheringStateTransitions(pc1, 'gathering', 'complete'); + await pc2.setRemoteDescription(pc1.localDescription); + await pc2.setLocalDescription(await pc2.createAnswer()); + const pc2Transitions = + iceGatheringStateTransitions(pc2, 'gathering', 'complete'); + await pc1.setRemoteDescription(pc2.localDescription); + await pc1Transitions; + await pc2Transitions; + }; + +const expectNoMoreGatheringStateChanges = async (t, pc) => { + pc.onicegatheringstatechange = + t.step_func(() => { + assert_unreached( + 'Should not get an icegatheringstatechange right now!'); + }); +}; diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCPeerConnection-perfect-negotiation-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCPeerConnection-perfect-negotiation-helper.js new file mode 100755 index 000000000..ed647bbe7 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCPeerConnection-perfect-negotiation-helper.js @@ -0,0 +1,153 @@ +'use strict' + +function peer(other, polite, fail = null) { + const send = (tgt, msg) => tgt.postMessage(JSON.parse(JSON.stringify(msg)), + "*"); + if (!fail) fail = e => send(window.parent, {error: `${e.name}: ${e.message}`}); + const pc = new RTCPeerConnection(); + + if (!window.assert_equals) { + window.assert_equals = (a, b, msg) => a === b || + fail(new Error(`${msg} expected ${b} but got ${a}`)); + } + + const commands = { + async addTransceiver() { + const transceiver = pc.addTransceiver("video"); + await new Promise(r => pc.addEventListener("negotiated", r, {once: true})); + if (!transceiver.currentDirection) { + // Might have just missed the negotiation train. Catch next one. + await new Promise(r => pc.addEventListener("negotiated", r, {once: true})); + } + assert_equals(transceiver.currentDirection, "sendonly", "have direction"); + return pc.getTransceivers().length; + }, + async simpleConnect() { + const p = commands.addTransceiver(); + await new Promise(r => pc.oniceconnectionstatechange = + () => pc.iceConnectionState == "connected" && r()); + return await p; + }, + async getNumTransceivers() { + return pc.getTransceivers().length; + }, + }; + + try { + pc.addEventListener("icecandidate", ({candidate}) => send(other, + {candidate})); + let makingOffer = false, ignoreIceCandidateFailures = false; + let srdAnswerPending = false; + pc.addEventListener("negotiationneeded", async () => { + try { + assert_equals(pc.signalingState, "stable", "negotiationneeded always fires in stable state"); + assert_equals(makingOffer, false, "negotiationneeded not already in progress"); + makingOffer = true; + await pc.setLocalDescription(); + assert_equals(pc.signalingState, "have-local-offer", "negotiationneeded not racing with onmessage"); + assert_equals(pc.localDescription.type, "offer", "negotiationneeded SLD worked"); + send(other, {description: pc.localDescription}); + } catch (e) { + fail(e); + } finally { + makingOffer = false; + } + }); + window.onmessage = async ({data: {description, candidate, run}}) => { + try { + if (description) { + // If we have a setRemoteDescription() answer operation pending, then + // we will be "stable" by the time the next setRemoteDescription() is + // executed, so we count this being stable when deciding whether to + // ignore the offer. + let isStable = + pc.signalingState == "stable" || + (pc.signalingState == "have-local-offer" && srdAnswerPending); + const ignoreOffer = description.type == "offer" && !polite && + (makingOffer || !isStable); + if (ignoreOffer) { + ignoreIceCandidateFailures = true; + return; + } + if (description.type == "answer") + srdAnswerPending = true; + await pc.setRemoteDescription(description); + ignoreIceCandidateFailures = false; + srdAnswerPending = false; + if (description.type == "offer") { + assert_equals(pc.signalingState, "have-remote-offer", "Remote offer"); + assert_equals(pc.remoteDescription.type, "offer", "SRD worked"); + await pc.setLocalDescription(); + assert_equals(pc.signalingState, "stable", "onmessage not racing with negotiationneeded"); + assert_equals(pc.localDescription.type, "answer", "onmessage SLD worked"); + send(other, {description: pc.localDescription}); + } else { + assert_equals(pc.remoteDescription.type, "answer", "Answer was set"); + assert_equals(pc.signalingState, "stable", "answered"); + pc.dispatchEvent(new Event("negotiated")); + } + } else if (candidate) { + try { + await pc.addIceCandidate(candidate); + } catch (e) { + if (!ignoreIceCandidateFailures) throw e; + } + } else if (run) { + send(window.parent, {[run.id]: await commands[run.cmd]() || 0}); + } + } catch (e) { + fail(e); + } + }; + } catch (e) { + fail(e); + } + return pc; +} + +async function setupPeerIframe(t, polite) { + const iframe = document.createElement("iframe"); + t.add_cleanup(() => iframe.remove()); + iframe.srcdoc = + `(${peer.toString()})(window.parent, ${polite});`; + document.documentElement.appendChild(iframe); + + const failCatcher = t.step_func(({data}) => + ("error" in data) && assert_unreached(`Error in iframe: ${data.error}`)); + window.addEventListener("message", failCatcher); + t.add_cleanup(() => window.removeEventListener("message", failCatcher)); + await new Promise(r => iframe.onload = r); + return iframe; +} + +function setupPeerTopLevel(t, other, polite) { + const pc = peer(other, polite, t.step_func(e => { throw e; })); + t.add_cleanup(() => { pc.close(); window.onmessage = null; }); +} + +let counter = 0; +async function run(target, cmd) { + const id = `result${counter++}`; + target.postMessage({run: {cmd, id}}, "*"); + return new Promise(r => window.addEventListener("message", + function listen({data}) { + if (!(id in data)) return; + window.removeEventListener("message", listen); + r(data[id]); + })); +} + +let iframe; +async function setupAB(t, politeA, politeB) { + iframe = await setupPeerIframe(t, politeB); + return setupPeerTopLevel(t, iframe.contentWindow, politeA); +} +const runA = cmd => run(window, cmd); +const runB = cmd => run(iframe.contentWindow, cmd); +const runBoth = (cmdA, cmdB = cmdA) => Promise.all([runA(cmdA), runB(cmdB)]); + +async function promise_test_both_roles(f, name) { + promise_test(async t => f(t, await setupAB(t, true, false)), name); + promise_test(async t => f(t, await setupAB(t, false, true)), + `${name} with roles reversed`); +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCRtpCapabilities-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCRtpCapabilities-helper.js new file mode 100755 index 000000000..fb297c35f --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCRtpCapabilities-helper.js @@ -0,0 +1,52 @@ +'use strict' + +// Test is based on the following editor draft: +// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + +// This file depends on dictionary-helper.js which should +// be loaded from the main HTML file. + +/* + 5.2. RTCRtpSender Interface + dictionary RTCRtpCapabilities { + sequence codecs; + sequence headerExtensions; + }; + + dictionary RTCRtpCodecCapability { + DOMString mimeType; + unsigned long clockRate; + unsigned short channels; + DOMString sdpFmtpLine; + }; + + dictionary RTCRtpHeaderExtensionCapability { + DOMString uri; + }; + */ + +function validateRtpCapabilities(capabilities) { + assert_array_field(capabilities, 'codecs'); + for(const codec of capabilities.codecs) { + validateCodecCapability(codec); + } + + assert_greater_than(capabilities.codecs.length, 0, + 'Expect at least one codec capability available'); + + assert_array_field(capabilities, 'headerExtensions'); + for(const headerExt of capabilities.headerExtensions) { + validateHeaderExtensionCapability(headerExt); + } +} + +function validateCodecCapability(codec) { + assert_optional_string_field(codec, 'mimeType'); + assert_optional_unsigned_int_field(codec, 'clockRate'); + assert_optional_unsigned_int_field(codec, 'channels'); + assert_optional_string_field(codec, 'sdpFmtpLine'); +} + +function validateHeaderExtensionCapability(headerExt) { + assert_optional_string_field(headerExt, 'uri'); +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCRtpParameters-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCRtpParameters-helper.js new file mode 100755 index 000000000..d7653c3a8 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCRtpParameters-helper.js @@ -0,0 +1,269 @@ +'use strict'; + +// Test is based on the following editor draft: +// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + +// Helper function for testing RTCRtpParameters dictionary fields + +// This file depends on dictionary-helper.js which should +// be loaded from the main HTML file. + +// An offer/answer exchange is necessary for getParameters() to have any +// negotiated parameters to return. +async function doOfferAnswerExchange(t, caller) { + const callee = new RTCPeerConnection(); + t.add_cleanup(() => callee.close()); + const offer = await caller.createOffer(); + await caller.setLocalDescription(offer); + await callee.setRemoteDescription(offer); + const answer = await callee.createAnswer(); + await callee.setLocalDescription(answer); + await caller.setRemoteDescription(answer); + + return callee; +} + +/* + Validates the RTCRtpParameters returned from RTCRtpSender.prototype.getParameters + + 5.2. RTCRtpSender Interface + getParameters + - transactionId is set to a new unique identifier, used to match this getParameters + call to a setParameters call that may occur later. + + - encodings is set to the value of the [[SendEncodings]] internal slot. + + - The headerExtensions sequence is populated based on the header extensions that + have been negotiated for sending. + + - The codecs sequence is populated based on the codecs that have been negotiated + for sending, and which the user agent is currently capable of sending. If + setParameters has removed or reordered codecs, getParameters MUST return the + shortened/reordered list. However, every time codecs are renegotiated by a + new offer/answer exchange, the list of codecs MUST be restored to the full + negotiated set, in the priority order indicated by the remote description, + in effect discarding the effects of setParameters. + + - rtcp.cname is set to the CNAME of the associated RTCPeerConnection. rtcp.reducedSize + is set to true if reduced-size RTCP has been negotiated for sending, and false otherwise. + */ +function validateSenderRtpParameters(param) { + validateRtpParameters(param); + + assert_array_field(param, 'encodings'); + for(const encoding of param.encodings) { + validateEncodingParameters(encoding); + } + + assert_not_equals(param.transactionId, undefined, + 'Expect sender param.transactionId to be set'); + + assert_not_equals(param.rtcp.cname, undefined, + 'Expect sender param.rtcp.cname to be set'); + + assert_not_equals(param.rtcp.reducedSize, undefined, + 'Expect sender param.rtcp.reducedSize to be set to either true or false'); +} + +/* + Validates the RTCRtpParameters returned from RTCRtpReceiver.prototype.getParameters + + 5.3. RTCRtpReceiver Interface + getParameters + When getParameters is called, the RTCRtpParameters dictionary is constructed + as follows: + + - The headerExtensions sequence is populated based on the header extensions that + the receiver is currently prepared to receive. + + - The codecs sequence is populated based on the codecs that the receiver is currently + prepared to receive. + + - rtcp.reducedSize is set to true if the receiver is currently prepared to receive + reduced-size RTCP packets, and false otherwise. rtcp.cname is left undefined. + + - transactionId is left undefined. + */ +function validateReceiverRtpParameters(param) { + validateRtpParameters(param); + + assert_equals(param.transactionId, undefined, + 'Expect receiver param.transactionId to be unset'); + + assert_not_equals(param.rtcp.reducedSize, undefined, + 'Expect receiver param.rtcp.reducedSize to be set'); + + assert_equals(param.rtcp.cname, undefined, + 'Expect receiver param.rtcp.cname to be unset'); +} + +/* + dictionary RTCRtpParameters { + DOMString transactionId; + sequence encodings; + sequence headerExtensions; + RTCRtcpParameters rtcp; + sequence codecs; + }; + + */ +function validateRtpParameters(param) { + assert_optional_string_field(param, 'transactionId'); + + assert_array_field(param, 'headerExtensions'); + for(const headerExt of param.headerExtensions) { + validateHeaderExtensionParameters(headerExt); + } + + assert_dict_field(param, 'rtcp'); + validateRtcpParameters(param.rtcp); + + assert_array_field(param, 'codecs'); + for(const codec of param.codecs) { + validateCodecParameters(codec); + } +} + +/* + dictionary RTCRtpEncodingParameters { + boolean active; + unsigned long maxBitrate; + + [readonly] + DOMString rid; + + double scaleResolutionDownBy; + }; + + */ +function validateEncodingParameters(encoding) { + assert_optional_boolean_field(encoding, 'active'); + assert_optional_unsigned_int_field(encoding, 'maxBitrate'); + + assert_optional_string_field(encoding, 'rid'); + assert_optional_number_field(encoding, 'scaleResolutionDownBy'); +} + +/* + dictionary RTCRtcpParameters { + [readonly] + DOMString cname; + + [readonly] + boolean reducedSize; + }; + */ +function validateRtcpParameters(rtcp) { + assert_optional_string_field(rtcp, 'cname'); + assert_optional_boolean_field(rtcp, 'reducedSize'); +} + +/* + dictionary RTCRtpHeaderExtensionParameters { + [readonly] + DOMString uri; + + [readonly] + unsigned short id; + + [readonly] + boolean encrypted; + }; + */ +function validateHeaderExtensionParameters(headerExt) { + assert_optional_string_field(headerExt, 'uri'); + assert_optional_unsigned_int_field(headerExt, 'id'); + assert_optional_boolean_field(headerExt, 'encrypted'); +} + +/* + dictionary RTCRtpCodecParameters { + [readonly] + unsigned short payloadType; + + [readonly] + DOMString mimeType; + + [readonly] + unsigned long clockRate; + + [readonly] + unsigned short channels; + + [readonly] + DOMString sdpFmtpLine; + }; + */ +function validateCodecParameters(codec) { + assert_optional_unsigned_int_field(codec, 'payloadType'); + assert_optional_string_field(codec, 'mimeType'); + assert_optional_unsigned_int_field(codec, 'clockRate'); + assert_optional_unsigned_int_field(codec, 'channels'); + assert_optional_string_field(codec, 'sdpFmtpLine'); +} + +// Get the first encoding in param.encodings. +// Asserts that param.encodings has at least one element. +function getFirstEncoding(param) { + const { + encodings + } = param; + assert_equals(encodings.length, 1); + return encodings[0]; +} + +// Helper function to test that modifying an encoding field should succeed +function test_modified_encoding(kind, field, value1, value2, desc) { + promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const { + sender + } = pc.addTransceiver(kind, { + sendEncodings: [{ + [field]: value1 + }] + }); + await doOfferAnswerExchange(t, pc); + + const param1 = sender.getParameters(); + validateSenderRtpParameters(param1); + const encoding1 = getFirstEncoding(param1); + + assert_equals(encoding1[field], value1); + encoding1[field] = value2; + + await sender.setParameters(param1); + const param2 = sender.getParameters(); + validateSenderRtpParameters(param2); + const encoding2 = getFirstEncoding(param2); + assert_equals(encoding2[field], value2); + }, desc + ' with RTCRtpTransceiverInit'); + + promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const { + sender + } = pc.addTransceiver(kind); + await doOfferAnswerExchange(t, pc); + + const initParam = sender.getParameters(); + validateSenderRtpParameters(initParam); + initParam.encodings[0][field] = value1; + await sender.setParameters(initParam); + + const param1 = sender.getParameters(); + validateSenderRtpParameters(param1); + const encoding1 = getFirstEncoding(param1); + + assert_equals(encoding1[field], value1); + encoding1[field] = value2; + + await sender.setParameters(param1); + const param2 = sender.getParameters(); + validateSenderRtpParameters(param2); + const encoding2 = getFirstEncoding(param2); + assert_equals(encoding2[field], value2); + }, desc + ' without RTCRtpTransceiverInit'); +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCStats-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCStats-helper.js new file mode 100755 index 000000000..33cbf4a93 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/RTCStats-helper.js @@ -0,0 +1,1073 @@ +'use strict'; + +// Test is based on the following editor draft: +// webrtc-pc 20171130 +// webrtc-stats 20171122 + +// This file depends on dictionary-helper.js which should +// be loaded from the main HTML file. + +/* + [webrtc-stats] + 6.1. RTCStatsType enum + enum RTCStatsType { + "codec", + "inbound-rtp", + "outbound-rtp", + "remote-inbound-rtp", + "remote-outbound-rtp", + "csrc", + "peer-connection", + "data-channel", + "stream", + "track", + "transport", + "candidate-pair", + "local-candidate", + "remote-candidate", + "certificate", + "ice-server" + }; + */ +const statsValidatorTable = { + 'codec': validateCodecStats, + 'inbound-rtp': validateInboundRtpStreamStats, + 'outbound-rtp': validateOutboundRtpStreamStats, + 'remote-inbound-rtp': validateRemoteInboundRtpStreamStats, + 'remote-outbound-rtp': validateRemoteOutboundRtpStreamStats, + 'media-source': validateMediaSourceStats, + 'csrc': validateContributingSourceStats, + 'peer-connection': validatePeerConnectionStats, + 'data-channel': validateDataChannelStats, + 'transceiver': validateTransceiverStats, + 'sender': validateSenderStats, + 'receiver': validateReceiverStats, + 'transport': validateTransportStats, + 'candidate-pair': validateIceCandidatePairStats, + 'local-candidate': validateIceCandidateStats, + 'remote-candidate': validateIceCandidateStats, + 'certificate': validateCertificateStats, + 'ice-server': validateIceServerStats +}; + +// Validate that the stats objects in a stats report +// follows the respective definitions. +// Stats objects with unknown type are ignored and +// only basic validation is done. +function validateStatsReport(statsReport) { + for(const [id, stats] of statsReport.entries()) { + assert_equals(stats.id, id, + 'expect stats.id to be the same as the key in statsReport'); + + const validator = statsValidatorTable[stats.type]; + if(validator) { + validator(statsReport, stats); + } else { + validateRtcStats(statsReport, stats); + } + } +} + +// Assert that the stats report have stats objects of +// given types +function assert_stats_report_has_stats(statsReport, statsTypes) { + const hasTypes = new Set([...statsReport.values()] + .map(stats => stats.type)); + + for(const type of statsTypes) { + assert_true(hasTypes.has(type), + `Expect statsReport to contain stats object of type ${type}`); + } +} + +function findStatsFromReport(statsReport, predicate, message) { + for (const stats of statsReport.values()) { + if (predicate(stats)) { + return stats; + } + } + + assert_unreached(message || 'none of stats in statsReport satisfy given condition') +} + +// Get stats object of type that is expected to be +// found in the statsReport +function getRequiredStats(statsReport, type) { + for(const stats of statsReport.values()) { + if(stats.type === type) { + return stats; + } + } + + assert_unreached(`required stats of type ${type} is not found in stats report`); +} + +// Get stats object by the stats ID. +// This is used to retreive other stats objects +// linked to a stats object +function getStatsById(statsReport, statsId) { + assert_true(statsReport.has(statsId), + `Expect stats report to have stats object with id ${statsId}`); + + return statsReport.get(statsId); +} + +// Validate an ID field in a stats object by making sure +// that the linked stats object is found in the stats report +// and have the type field value same as expected type +// It doesn't validate the other fields of the linked stats +// as validateStatsReport already does all validations +function validateIdField(statsReport, stats, field, type) { + assert_string_field(stats, field); + const linkedStats = getStatsById(statsReport, stats[field]); + assert_equals(linkedStats.type, type, + `Expect linked stats object to have type ${type}`); +} + +function validateOptionalIdField(statsReport, stats, field, type) { + if(stats[field] !== undefined) { + validateIdField(statsReport, stats, field, type); + } +} + +/* + [webrtc-pc] + 8.4. RTCStats Dictionary + dictionary RTCStats { + required DOMHighResTimeStamp timestamp; + required RTCStatsType type; + required DOMString id; + }; + */ +function validateRtcStats(statsReport, stats) { + assert_number_field(stats, 'timestamp'); + assert_string_field(stats, 'type'); + assert_string_field(stats, 'id'); +} + +/* + [webrtc-stats] + 7.1. RTCRtpStreamStats dictionary + dictionary RTCRtpStreamStats : RTCStats { + unsigned long ssrc; + DOMString kind; + DOMString transportId; + DOMString codecId; + }; + + kind of type DOMString + Either "audio" or "video". + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCRtpStreamStats, with attributes ssrc, kind, transportId, codecId + */ +function validateRtpStreamStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + assert_unsigned_int_field(stats, 'ssrc'); + assert_string_field(stats, 'kind'); + assert_enum_field(stats, 'kind', ['audio', 'video']) + + validateIdField(statsReport, stats, 'transportId', 'transport'); + validateIdField(statsReport, stats, 'codecId', 'codec'); + +} + +/* + [webrtc-stats] + 7.2. RTCCodecStats dictionary + dictionary RTCCodecStats : RTCStats { + required unsigned long payloadType; + RTCCodecType codecType; + required DOMString transportId; + required DOMString mimeType; + unsigned long clockRate; + unsigned long channels; + DOMString sdpFmtpLine; + }; + + enum RTCCodecType { + "encode", + "decode", + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCCodecStats, with attributes payloadType, codecType, mimeType, clockRate, channels, sdpFmtpLine + */ + +function validateCodecStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + assert_unsigned_int_field(stats, 'payloadType'); + assert_optional_enum_field(stats, 'codecType', ['encode', 'decode']); + + validateOptionalIdField(statsReport, stats, 'transportId', 'transport'); + + assert_string_field(stats, 'mimeType'); + assert_unsigned_int_field(stats, 'clockRate'); + if (stats.kind === 'audio') { + assert_unsigned_int_field(stats, 'channels'); + } + assert_string_field(stats, 'sdpFmtpLine'); +} + +/* + [webrtc-stats] + 7.3. RTCReceivedRtpStreamStats dictionary + dictionary RTCReceivedRtpStreamStats : RTCRtpStreamStats { + unsigned long long packetsReceived; + long long packetsLost; + double jitter; + unsigned long long packetsDiscarded; + unsigned long long packetsRepaired; + unsigned long long burstPacketsLost; + unsigned long long burstPacketsDiscarded; + unsigned long burstLossCount; + unsigned long burstDiscardCount; + double burstLossRate; + double burstDiscardRate; + double gapLossRate; + double gapDiscardRate; + unsigned long framesDropped; + unsigned long partialFramesLost; + unsigned long fullFramesLost; + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCReceivedRtpStreamStats, with all required attributes from its + inherited dictionaries, and also attributes packetsReceived, + packetsLost, jitter, packetsDiscarded, framesDropped + */ +function validateReceivedRtpStreamStats(statsReport, stats) { + validateRtpStreamStats(statsReport, stats); + + assert_unsigned_int_field(stats, 'packetsReceived'); + assert_unsigned_int_field(stats, 'packetsLost'); + + assert_number_field(stats, 'jitter'); + + assert_unsigned_int_field(stats, 'packetsDiscarded'); + assert_unsigned_int_field(stats, 'framesDropped'); + + assert_optional_unsigned_int_field(stats, 'packetsRepaired'); + assert_optional_unsigned_int_field(stats, 'burstPacketsLost'); + assert_optional_unsigned_int_field(stats, 'burstPacketsDiscarded'); + assert_optional_unsigned_int_field(stats, 'burstLossCount'); + assert_optional_unsigned_int_field(stats, 'burstDiscardCount'); + + assert_optional_number_field(stats, 'burstLossRate'); + assert_optional_number_field(stats, 'burstDiscardRate'); + assert_optional_number_field(stats, 'gapLossRate'); + assert_optional_number_field(stats, 'gapDiscardRate'); + + assert_optional_unsigned_int_field(stats, 'partialFramesLost'); + assert_optional_unsigned_int_field(stats, 'fullFramesLost'); +} + +/* + [webrtc-stats] + 7.4. RTCInboundRtpStreamStats dictionary + dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats { + DOMString trackId; + DOMString receiverId; + DOMString remoteId; + unsigned long framesDecoded; + unsigned long keyFramesDecoded; + unsigned long frameWidth; + unsigned long frameHeight; + unsigned long frameBitDepth; + double framesPerSecond; + unsigned long long qpSum; + double totalDecodeTime; + double totalInterFrameDelay; + double totalSquaredInterFrameDelay; + boolean voiceActivityFlag; + DOMHighResTimeStamp lastPacketReceivedTimestamp; + double averageRtcpInterval; + unsigned long long headerBytesReceived; + unsigned long long fecPacketsReceived; + unsigned long long fecPacketsDiscarded; + unsigned long long bytesReceived; + unsigned long long packetsFailedDecryption; + unsigned long long packetsDuplicated; + record perDscpPacketsReceived; + unsigned long nackCount; + unsigned long firCount; + unsigned long pliCount; + unsigned long sliCount; + DOMHighResTimeStamp estimatedPlayoutTimestamp; + double jitterBufferDelay; + unsigned long long jitterBufferEmittedCount; + unsigned long long totalSamplesReceived; + unsigned long long samplesDecodedWithSilk; + unsigned long long samplesDecodedWithCelt; + unsigned long long concealedSamples; + unsigned long long silentConcealedSamples; + unsigned long long concealmentEvents; + unsigned long long insertedSamplesForDeceleration; + unsigned long long removedSamplesForAcceleration; + double audioLevel; + double totalAudioEnergy; + double totalSamplesDuration; + unsigned long framesReceived; + DOMString decoderImplementation; + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCInboundRtpStreamStats, with all required attributes from its inherited + dictionaries, and also attributes receiverId, remoteId, framesDecoded, nackCount, framesReceived, bytesReceived, totalAudioEnergy, totalSampleDuration + */ +function validateInboundRtpStreamStats(statsReport, stats) { + validateReceivedRtpStreamStats(statsReport, stats); + validateOptionalIdField(statsReport, stats, 'trackId', 'track'); + validateIdField(statsReport, stats, 'receiverId', 'receiver'); + validateIdField(statsReport, stats, 'remoteId', 'remote-outbound-rtp'); + assert_unsigned_int_field(stats, 'framesDecoded'); + assert_optional_unsigned_int_field(stats, 'keyFramesDecoded'); + assert_optional_unsigned_int_field(stats, 'frameWidth'); + assert_optional_unsigned_int_field(stats, 'frameHeight'); + assert_optional_unsigned_int_field(stats, 'frameBitDepth'); + assert_optional_number_field(stats, 'framesPerSecond'); + assert_optional_unsigned_int_field(stats, 'qpSum'); + assert_optional_number_field(stats, 'totalDecodeTime'); + assert_optional_number_field(stats, 'totalInterFrameDelay'); + assert_optional_number_field(stats, 'totalSquaredInterFrameDelay'); + + assert_optional_boolean_field(stats, 'voiceActivityFlag'); + + assert_optional_number_field(stats, 'lastPacketReceivedTimeStamp'); + assert_optional_number_field(stats, 'averageRtcpInterval'); + + assert_optional_unsigned_int_field(stats, 'fecPacketsReceived'); + assert_optional_unsigned_int_field(stats, 'fecPacketsDiscarded'); + assert_unsigned_int_field(stats, 'bytesReceived'); + assert_optional_unsigned_int_field(stats, 'packetsFailedDecryption'); + assert_optional_unsigned_int_field(stats, 'packetsDuplicated'); + + assert_optional_dict_field(stats, 'perDscpPacketsReceived'); + if (stats['perDscpPacketsReceived']) { + Object.keys(stats['perDscpPacketsReceived']) + .forEach(k => + assert_equals(typeof k, 'string', 'Expect keys of perDscpPacketsReceived to be strings') + ); + Object.values(stats['perDscpPacketsReceived']) + .forEach(v => + assert_true(Number.isInteger(v) && (v >= 0), 'Expect values of perDscpPacketsReceived to be strings') + ); + } + + assert_unsigned_int_field(stats, 'nackCount'); + + assert_optional_unsigned_int_field(stats, 'firCount'); + assert_optional_unsigned_int_field(stats, 'pliCount'); + assert_optional_unsigned_int_field(stats, 'sliCount'); + + assert_optional_number_field(stats, 'estimatedPlayoutTimestamp'); + assert_optional_number_field(stats, 'jitterBufferDelay'); + assert_optional_unsigned_int_field(stats, 'jitterBufferEmittedCount'); + assert_optional_unsigned_int_field(stats, 'totalSamplesReceived'); + assert_optional_unsigned_int_field(stats, 'samplesDecodedWithSilk'); + assert_optional_unsigned_int_field(stats, 'samplesDecodedWithCelt'); + assert_optional_unsigned_int_field(stats, 'concealedSamples'); + assert_optional_unsigned_int_field(stats, 'silentConcealedSamples'); + assert_optional_unsigned_int_field(stats, 'concealmentEvents'); + assert_optional_unsigned_int_field(stats, 'insertedSamplesForDeceleration'); + assert_optional_unsigned_int_field(stats, 'removedSamplesForAcceleration'); + assert_optional_number_field(stats, 'audioLevel'); + assert_optional_number_field(stats, 'totalAudioEnergy'); + assert_optional_number_field(stats, 'totalSamplesDuration'); + assert_unsigned_int_field(stats, 'framesReceived'); + assert_optional_string_field(stats, 'decoderImplementation'); +} + +/* + [webrtc-stats] + 7.5. RTCRemoteInboundRtpStreamStats dictionary + dictionary RTCRemoteInboundRtpStreamStats : RTCReceivedRtpStreamStats { + DOMString localId; + double roundTripTime; + double totalRoundTripTime; + double fractionLost; + unsigned long long reportsReceived; + unsigned long long roundTripTimeMeasurements; + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCRemoteInboundRtpStreamStats, with all required attributes from its + inherited dictionaries, and also attributes localId, roundTripTime + */ +function validateRemoteInboundRtpStreamStats(statsReport, stats) { + validateReceivedRtpStreamStats(statsReport, stats); + + validateIdField(statsReport, stats, 'localId', 'outbound-rtp'); + assert_number_field(stats, 'roundTripTime'); + assert_optional_number_field(stats, 'totalRoundTripTime'); + assert_optional_number_field(stats, 'fractionLost'); + assert_optional_unsigned_int_field(stats, 'reportsReceived'); + assert_optional_unsigned_int_field(stats, 'roundTripTimeMeasurements'); +} + +/* + [webrtc-stats] + 7.6. RTCSentRtpStreamStats dictionary + dictionary RTCSentRtpStreamStats : RTCRtpStreamStats { + unsigned long packetsSent; + unsigned long long bytesSent; + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCSentRtpStreamStats, with all required attributes from its inherited + dictionaries, and also attributes packetsSent, bytesSent + */ +function validateSentRtpStreamStats(statsReport, stats) { + validateRtpStreamStats(statsReport, stats); + + assert_unsigned_int_field(stats, 'packetsSent'); + assert_unsigned_int_field(stats, 'bytesSent'); +} + +/* + [webrtc-stats] + 7.7. RTCOutboundRtpStreamStats dictionary + dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats { + DOMString mediaSourceId; + DOMString senderId; + DOMString remoteId; + DOMString rid; + DOMHighResTimeStamp lastPacketSentTimestamp; + unsigned long long headerBytesSent; + unsigned long packetsDiscardedOnSend; + unsigned long long bytesDiscardedOnSend; + unsigned long fecPacketsSent; + unsigned long long retransmittedPacketsSent; + unsigned long long retransmittedBytesSent; + double targetBitrate; + unsigned long long totalEncodedBytesTarget; + unsigned long frameWidth; + unsigned long frameHeight; + unsigned long frameBitDepth; + double framesPerSecond; + unsigned long framesSent; + unsigned long hugeFramesSent; + unsigned long framesEncoded; + unsigned long keyFramesEncoded; + unsigned long framesDiscardedOnSend; + unsigned long long qpSum; + unsigned long long totalSamplesSent; + unsigned long long samplesEncodedWithSilk; + unsigned long long samplesEncodedWithCelt; + boolean voiceActivityFlag; + double totalEncodeTime; + double totalPacketSendDelay; + double averageRtcpInterval; + RTCQualityLimitationReason qualityLimitationReason; + record qualityLimitationDurations; + unsigned long qualityLimitationResolutionChanges; + record perDscpPacketsSent; + unsigned long nackCount; + unsigned long firCount; + unsigned long pliCount; + unsigned long sliCount; + DOMString encoderImplementation; + }; + Obsolete members: + partial dictionary RTCOutboundStreamStats { + DOMString trackId; + }; + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCOutboundRtpStreamStats, with all required attributes from its + inherited dictionaries, and also attributes senderId, remoteId, framesEncoded, nackCount, framesSent + */ +function validateOutboundRtpStreamStats(statsReport, stats) { + validateSentRtpStreamStats(statsReport, stats) + + validateOptionalIdField(statsReport, stats, 'mediaSourceId', 'media-source'); + validateIdField(statsReport, stats, 'senderId', 'sender'); + validateIdField(statsReport, stats, 'remoteId', 'remote-inbound-rtp'); + + assert_optional_string_field(stats, 'rid'); + + assert_optional_number_field(stats, 'lastPacketSentTimestamp'); + assert_optional_unsigned_int_field(stats, 'headerBytesSent'); + assert_optional_unsigned_int_field(stats, 'packetsDiscardedOnSend'); + assert_optional_unsigned_int_field(stats, 'bytesDiscardedOnSend'); + assert_optional_unsigned_int_field(stats, 'fecPacketsSent'); + assert_optional_unsigned_int_field(stats, 'retransmittedPacketsSent'); + assert_optional_unsigned_int_field(stats, 'retransmittedBytesSent'); + assert_optional_number_field(stats, 'targetBitrate'); + assert_optional_unsigned_int_field(stats, 'totalEncodedBytesTarget'); + if (stats['kind'] === 'video') { + assert_optional_unsigned_int_field(stats, 'frameWidth'); + assert_optional_unsigned_int_field(stats, 'frameHeight'); + assert_optional_unsigned_int_field(stats, 'frameBitDepth'); + assert_optional_number_field(stats, 'framesPerSecond'); + assert_unsigned_int_field(stats, 'framesSent'); + assert_optional_unsigned_int_field(stats, 'hugeFramesSent'); + assert_unsigned_int_field(stats, 'framesEncoded'); + assert_optional_unsigned_int_field(stats, 'keyFramesEncoded'); + assert_optional_unsigned_int_field(stats, 'framesDiscardedOnSend'); + assert_optional_unsigned_int_field(stats, 'qpSum'); + } else if (stats['kind'] === 'audio') { + assert_optional_unsigned_int_field(stats, 'totalSamplesSent'); + assert_optional_unsigned_int_field(stats, 'samplesEncodedWithSilk'); + assert_optional_unsigned_int_field(stats, 'samplesEncodedWithCelt'); + assert_optional_boolean_field(stats, 'voiceActivityFlag'); + } + assert_optional_number_field(stats, 'totalEncodeTime'); + assert_optional_number_field(stats, 'totalPacketSendDelay'); + assert_optional_number_field(stats, 'averageRTCPInterval'); + + if (stats['kind'] === 'video') { + assert_optional_enum_field(stats, 'qualityLimitationReason', ['none', 'cpu', 'bandwidth', 'other']); + + assert_optional_dict_field(stats, 'qualityLimitationDurations'); + if (stats['qualityLimitationDurations']) { + Object.keys(stats['qualityLimitationDurations']) + .forEach(k => + assert_equals(typeof k, 'string', 'Expect keys of qualityLimitationDurations to be strings') + ); + Object.values(stats['qualityLimitationDurations']) + .forEach(v => + assert_equals(typeof num, 'number', 'Expect values of qualityLimitationDurations to be numbers') + ); + } + + assert_optional_unsigned_int_field(stats, 'qualityLimitationResolutionChanges'); + } + assert_unsigned_int_field(stats, 'nackCount'); + assert_optional_dict_field(stats, 'perDscpPacketsSent'); + if (stats['perDscpPacketsSent']) { + Object.keys(stats['perDscpPacketsSent']) + .forEach(k => + assert_equals(typeof k, 'string', 'Expect keys of perDscpPacketsSent to be strings') + ); + Object.values(stats['perDscpPacketsSent']) + .forEach(v => + assert_true(Number.isInteger(v) && (v >= 0), 'Expect values of perDscpPacketsSent to be strings') + ); + } + + assert_optional_unsigned_int_field(stats, 'firCount'); + assert_optional_unsigned_int_field(stats, 'pliCount'); + assert_optional_unsigned_int_field(stats, 'sliCount'); + assert_optional_string_field(stats, 'encoderImplementation'); + // Obsolete stats + validateOptionalIdField(statsReport, stats, 'trackId', 'track'); +} + +/* + [webrtc-stats] + 7.8. RTCRemoteOutboundRtpStreamStats dictionary + dictionary RTCRemoteOutboundRtpStreamStats : RTCSentRtpStreamStats { + DOMString localId; + DOMHighResTimeStamp remoteTimestamp; + unsigned long long reportsSent; + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCRemoteOutboundRtpStreamStats, with all required attributes from its + inherited dictionaries, and also attributes localId, remoteTimestamp + */ +function validateRemoteOutboundRtpStreamStats(statsReport, stats) { + validateSentRtpStreamStats(statsReport, stats); + + validateIdField(statsReport, stats, 'localId', 'inbound-rtp'); + assert_number_field(stats, 'remoteTimeStamp'); + assert_optional_unsigned_int_field(stats, 'reportsSent'); +} + +/* + [webrtc-stats] + 7.11 RTCMediaSourceStats dictionary + dictionary RTCMediaSourceStats : RTCStats { + DOMString trackIdentifier; + DOMString kind; + }; + + dictionary RTCAudioSourceStats : RTCMediaSourceStats { + double audioLevel; + double totalAudioEnergy; + double totalSamplesDuration; + double echoReturnLoss; + double echoReturnLossEnhancement; + }; + + dictionary RTCVideoSourceStats : RTCMediaSourceStats { + unsigned long width; + unsigned long height; + unsigned long bitDepth; + unsigned long frames; + // see https://github.com/w3c/webrtc-stats/issues/540 + double framesPerSecond; + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + RTCMediaSourceStats with attributes trackIdentifier, kind + RTCAudioSourceStats, with all required attributes from its inherited dictionaries and totalAudioEnergy, totalSamplesDuration + RTCVideoSourceStats, with all required attributes from its inherited dictionaries and width, height, framesPerSecond +*/ +function validateMediaSourceStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + assert_string_field(stats, 'trackIdentifier'); + assert_enum_field(stats, 'kind', ['audio', 'video']); + + if (stats.kind === 'audio') { + assert_optional_number_field(stats, 'audioLevel'); + assert_number_field(stats, 'totalAudioEnergy'); + assert_number_field(stats, 'totalSamplesDuration'); + assert_optional_number_field(stats, 'echoReturnLoss'); + assert_optional_number_field(stats, 'echoReturnLossEnhancement'); + } else if (stats.kind === 'video') { + assert_unsigned_int_field(stats, 'width'); + assert_unsigned_int_field(stats, 'height'); + assert_optional_unsigned_int_field(stats, 'bitDpeth'); + assert_optional_unsigned_int_field(stats, 'frames'); + assert_number_field(stats, 'framesPerSecond'); + } +} + +/* + [webrtc-stats] + 7.9. RTCRTPContributingSourceStats + dictionary RTCRTPContributingSourceStats : RTCStats { + unsigned long contributorSsrc; + DOMString inboundRtpStreamId; + unsigned long packetsContributedTo; + double audioLevel; + }; + */ +function validateContributingSourceStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + assert_optional_unsigned_int_field(stats, 'contributorSsrc'); + + validateOptionalIdField(statsReport, stats, 'inboundRtpStreamId', 'inbound-rtp'); + assert_optional_unsigned_int_field(stats, 'packetsContributedTo'); + assert_optional_number_field(stats, 'audioLevel'); +} + +/* + [webrtc-stats] + 7.10. RTCPeerConnectionStats dictionary + dictionary RTCPeerConnectionStats : RTCStats { + unsigned long dataChannelsOpened; + unsigned long dataChannelsClosed; + unsigned long dataChannelsRequested; + unsigned long dataChannelsAccepted; + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCPeerConnectionStats, with attributes dataChannelsOpened, dataChannelsClosed + */ +function validatePeerConnectionStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + assert_unsigned_int_field(stats, 'dataChannelsOpened'); + assert_unsigned_int_field(stats, 'dataChannelsClosed'); + assert_optional_unsigned_int_field(stats, 'dataChannelsRequested'); + assert_optional_unsigned_int_field(stats, 'dataChannelsAccepted'); +} + +/* [webrtc-stats] + 7.16 RTCRtpTransceiverStats dictionary + dictionary RTCRtpTransceiverStats { + DOMString senderId; + DOMString receiverId; + DOMString mid; + }; +*/ +function validateTransceiverStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + validateOptionalIdField(statsReport, stats, 'senderId', 'sender'); + validateOptionalIdField(statsReport, stats, 'receiverId', 'sender'); + assert_optional_string_field(stats, 'mid'); +} + +/* + [webrtc-stats] + dictionary RTCMediaHandlerStats : RTCStats { + DOMString trackIdentifier; + boolean remoteSource; + boolean ended; + DOMString kind; + RTCPriorityType priority; + }; + dictionary RTCVideoHandlerStats : RTCMediaHandlerStats { + }; + dictionary RTCAudioHandlerStats : RTCMediaHandlerStats { + }; + Used from validateSenderStats and validateReceiverStats + + [webrtc-priority] + enum RTCPriorityType { + "very-low", + "low", + "medium", + "high" + }; + + [webrtc-pc] + MTI: + RTCMediaHandlerStats with attributes trackIdentifier + RTCAudioHandlerStats, with all required attributes from its inherited dictionaries + RTCVideoHandlerStats, with all required attributes from its inherited dictionaries + +*/ +function validateMediaHandlerStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + assert_string_field(stats, 'trackIdentifier'); + assert_optional_boolean_field(stats, 'remoteSource'); + assert_optional_boolean_field(stats, 'ended'); + assert_optional_string_field(stats, 'kind'); + assert_enum_field(stats, 'priority', ['very-low', 'low', 'medium', 'high']); +} + +/* + [webrtc-stats] + dictionary RTCAudioSenderStats : RTCAudioHandlerStats { + DOMString mediaSourceId; + }; + dictionary RTCVideoSenderStats : RTCVideoHandlerStats { + DOMString mediaSourceId; + }; + + [webrtc-pc] + MTI: + RTCVideoSenderStats, with all required attributes from its inherited dictionaries +*/ +function validateSenderStats(statsReport, stats) { + validateMediaHandlerStats(statsReport, stats); + validateOptionalIdField(statsReport, stats, 'mediaSourceId', 'media-source'); +} + +/* + [webrtc-stats] + dictionary RTCAudioReceiverStats : RTCAudioHandlerStats { + }; + dictionary RTCVideoReceiverStats : RTCVideoHandlerStats { + }; + + [webrtc-pc] + MTI: + RTCVideoReceiverStats, with all required attributes from its inherited dictionaries +*/ +function validateReceiverStats(statsReport, stats) { + validateMediaHandlerStats(statsReport, stats); +} + + +/* + [webrtc-stats] + 7.13. RTCDataChannelStats dictionary + dictionary RTCDataChannelStats : RTCStats { + DOMString label; + DOMString protocol; + // see https://github.com/w3c/webrtc-stats/issues/541 + unsigned short dataChannelIdentifier; + DOMString transportId; + RTCDataChannelState state; + unsigned long messagesSent; + unsigned long long bytesSent; + unsigned long messagesReceived; + unsigned long long bytesReceived; + }; + + [webrtc-pc] + 6.2. RTCDataChannel + enum RTCDataChannelState { + "connecting", + "open", + "closing", + "closed" + }; + + 8.6. Mandatory To Implement Stats + - RTCDataChannelStats, with attributes label, protocol, datachannelIdentifier, state, + messagesSent, bytesSent, messagesReceived, bytesReceived + */ +function validateDataChannelStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + assert_string_field(stats, 'label'); + assert_string_field(stats, 'protocol'); + assert_unsigned_int_field(stats, 'dataChannelIdentifier'); + + validateOptionalIdField(statsReport, stats, 'transportId', 'transport'); + + assert_enum_field(stats, 'state', + ['connecting', 'open', 'closing', 'closed']); + + assert_unsigned_int_field(stats, 'messagesSent'); + assert_unsigned_int_field(stats, 'bytesSent'); + assert_unsigned_int_field(stats, 'messagesReceived'); + assert_unsigned_int_field(stats, 'bytesReceived'); +} + +/* + [webrtc-stats] + 7.14. RTCTransportStats dictionary + dictionary RTCTransportStats : RTCStats { + unsigned long long packetsSent; + unsigned long long packetsReceived; + unsigned long long bytesSent; + unsigned long long bytesReceived; + DOMString rtcpTransportStatsId; + RTCIceRole iceRole; + RTCDtlsTransportState dtlsState; + DOMString selectedCandidatePairId; + DOMString localCertificateId; + DOMString remoteCertificateId; + DOMString tlsVersion; + DOMString dtlsCipher; + DOMString srtpCipher; + DOMString tlsGroup; + unsigned long selectedCandidatePairChanges; + }; + + [webrtc-pc] + 5.5. RTCDtlsTransportState Enum + enum RTCDtlsTransportState { + "new", + "connecting", + "connected", + "closed", + "failed" + }; + + 5.6. RTCIceRole Enum + enum RTCIceRole { + "unknown", + "controlling", + "controlled" + }; + + 8.6. Mandatory To Implement Stats + - RTCTransportStats, with attributes bytesSent, bytesReceived, + selectedCandidatePairId, localCertificateId, + remoteCertificateId + */ +function validateTransportStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + assert_optional_unsigned_int_field(stats, 'packetsSent'); + assert_optional_unsigned_int_field(stats, 'packetsReceived'); + assert_unsigned_int_field(stats, 'bytesSent'); + assert_unsigned_int_field(stats, 'bytesReceived'); + + validateOptionalIdField(statsReport, stats, 'rtcpTransportStatsId', + 'transport'); + + assert_optional_enum_field(stats, 'iceRole', + ['unknown', 'controlling', 'controlled']); + + assert_optional_enum_field(stats, 'dtlsState', + ['new', 'connecting', 'connected', 'closed', 'failed']); + + validateIdField(statsReport, stats, 'selectedCandidatePairId', 'candidate-pair'); + validateIdField(statsReport, stats, 'localCertificateId', 'certificate'); + validateIdField(statsReport, stats, 'remoteCertificateId', 'certificate'); + assert_optional_string_field(stats, 'tlsVersion'); + assert_optional_string_field(stats, 'dtlsCipher'); + assert_optional_string_field(stats, 'srtpCipher'); + assert_optional_string_field(stats, 'tlsGroup'); + assert_optional_unsigned_int_field(stats, 'selectedCandidatePairChanges'); +} + +/* + [webrtc-stats] + 7.15. RTCIceCandidateStats dictionary + dictionary RTCIceCandidateStats : RTCStats { + required DOMString transportId; + DOMString? address; + long port; + DOMString protocol; + RTCIceCandidateType candidateType; + long priority; + DOMString url; + DOMString relayProtocol; + }; + + [webrtc-pc] + 4.8.1.3. RTCIceCandidateType Enum + enum RTCIceCandidateType { + "host", + "srflx", + "prflx", + "relay" + }; + + 8.6. Mandatory To Implement Stats + - RTCIceCandidateStats, with attributes address, port, protocol, candidateType, url + */ +function validateIceCandidateStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + validateIdField(statsReport, stats, 'transportId', 'transport'); + // The address is mandatory to implement, but is allowed to be null + // when hidden for privacy reasons. + if (stats.address != null) { + // Departure from strict spec reading: + // This field is populated in a racy manner in Chrome. + // We allow it to be present or not present for the time being. + // TODO(https://bugs.chromium.org/1092721): Become consistent. + assert_optional_string_field(stats, 'address'); + } + assert_unsigned_int_field(stats, 'port'); + assert_string_field(stats, 'protocol'); + + assert_enum_field(stats, 'candidateType', + ['host', 'srflx', 'prflx', 'relay']); + + assert_optional_int_field(stats, 'priority'); + // The url field is mandatory for local candidates gathered from + // a STUN or TURN server, and MUST NOT be present otherwise. + // TODO(hta): Improve checking. + assert_optional_string_field(stats, 'url'); + assert_optional_string_field(stats, 'relayProtocol'); +} + +/* + [webrtc-stats] + 7.16. RTCIceCandidatePairStats dictionary + dictionary RTCIceCandidatePairStats : RTCStats { + DOMString transportId; + DOMString localCandidateId; + DOMString remoteCandidateId; + RTCStatsIceCandidatePairState state; + boolean nominated; + unsigned long packetsSent; + unsigned long packetsReceived; + unsigned long long bytesSent; + unsigned long long bytesReceived; + DOMHighResTimeStamp lastPacketSentTimestamp; + DOMHighResTimeStamp lastPacketReceivedTimestamp; + DOMHighResTimeStamp firstRequestTimestamp; + DOMHighResTimeStamp lastRequestTimestamp; + DOMHighResTimeStamp lastResponseTimestamp; + double totalRoundTripTime; + double currentRoundTripTime; + double availableOutgoingBitrate; + double availableIncomingBitrate; + unsigned long circuitBreakerTriggerCount; + unsigned long long requestsReceived; + unsigned long long requestsSent; + unsigned long long responsesReceived; + unsigned long long responsesSent; + unsigned long long retransmissionsReceived; + unsigned long long retransmissionsSent; + unsigned long long consentRequestsSent; + DOMHighResTimeStamp consentExpiredTimestamp; + unsigned long packetsDiscardedOnSend; + unsigned long long bytesDiscardedOnSend; }; + + enum RTCStatsIceCandidatePairState { + "frozen", + "waiting", + "in-progress", + "failed", + "succeeded" + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCIceCandidatePairStats, with attributes transportId, localCandidateId, + remoteCandidateId, state, nominated, bytesSent, bytesReceived, totalRoundTripTime, currentRoundTripTime + // not including priority per https://github.com/w3c/webrtc-pc/issues/2457 + */ +function validateIceCandidatePairStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + validateIdField(statsReport, stats, 'transportId', 'transport'); + validateIdField(statsReport, stats, 'localCandidateId', 'local-candidate'); + validateIdField(statsReport, stats, 'remoteCandidateId', 'remote-candidate'); + + assert_enum_field(stats, 'state', + ['frozen', 'waiting', 'in-progress', 'failed', 'succeeded']); + + assert_boolean_field(stats, 'nominated'); + assert_optional_unsigned_int_field(stats, 'packetsSent'); + assert_optional_unsigned_int_field(stats, 'packetsReceived'); + assert_unsigned_int_field(stats, 'bytesSent'); + assert_unsigned_int_field(stats, 'bytesReceived'); + + assert_optional_number_field(stats, 'lastPacketSentTimestamp'); + assert_optional_number_field(stats, 'lastPacketReceivedTimestamp'); + assert_optional_number_field(stats, 'firstRequestTimestamp'); + assert_optional_number_field(stats, 'lastRequestTimestamp'); + assert_optional_number_field(stats, 'lastResponseTimestamp'); + + assert_number_field(stats, 'totalRoundTripTime'); + assert_number_field(stats, 'currentRoundTripTime'); + + assert_optional_number_field(stats, 'availableOutgoingBitrate'); + assert_optional_number_field(stats, 'availableIncomingBitrate'); + + assert_optional_unsigned_int_field(stats, 'circuitBreakerTriggerCount'); + assert_optional_unsigned_int_field(stats, 'requestsReceived'); + assert_optional_unsigned_int_field(stats, 'requestsSent'); + assert_optional_unsigned_int_field(stats, 'responsesReceived'); + assert_optional_unsigned_int_field(stats, 'responsesSent'); + assert_optional_unsigned_int_field(stats, 'retransmissionsReceived'); + assert_optional_unsigned_int_field(stats, 'retransmissionsSent'); + assert_optional_unsigned_int_field(stats, 'consentRequestsSent'); + assert_optional_number_field(stats, 'consentExpiredTimestamp'); + assert_optional_unsigned_int_field(stats, 'packetsDiscardedOnSend'); + assert_optional_unsigned_int_field(stats, 'bytesDiscardedOnSend'); +} + +/* + [webrtc-stats] + 7.17. RTCCertificateStats dictionary + dictionary RTCCertificateStats : RTCStats { + DOMString fingerprint; + DOMString fingerprintAlgorithm; + DOMString base64Certificate; + DOMString issuerCertificateId; + }; + + [webrtc-pc] + 8.6. Mandatory To Implement Stats + - RTCCertificateStats, with attributes fingerprint, fingerprintAlgorithm, + base64Certificate, issuerCertificateId + */ +function validateCertificateStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + assert_string_field(stats, 'fingerprint'); + assert_string_field(stats, 'fingerprintAlgorithm'); + assert_string_field(stats, 'base64Certificate'); + assert_optional_string_field(stats, 'issuerCertificateId'); +} + +/* + [webrtc-stats] + 7.30. RTCIceServerStats dictionary + dictionary RTCIceServerStats : RTCStats { + DOMString url; + long port; + DOMString protocol; + unsigned long totalRequestsSent; + unsigned long totalResponsesReceived; + double totalRoundTripTime; + }; +*/ +function validateIceServerStats(statsReport, stats) { + validateRtcStats(statsReport, stats); + + assert_optional_string_field(stats, 'url'); + assert_optional_int_field(stats, 'port'); + assert_optional_string_field(stats, 'protocol'); + assert_optional_unsigned_int_field(stats, 'totalRequestsSent'); + assert_optional_unsigned_int_field(stats, 'totalResponsesReceived'); + assert_optional_number_field(stats, 'totalRoundTripTime'); +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/dictionary-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/dictionary-helper.js new file mode 100755 index 000000000..dab7e49fa --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/dictionary-helper.js @@ -0,0 +1,101 @@ +'use strict'; + +// Helper assertion functions to validate dictionary fields +// on dictionary objects returned from APIs + +function assert_unsigned_int_field(object, field) { + const num = object[field]; + assert_true(Number.isInteger(num) && (num >= 0), + `Expect dictionary.${field} to be unsigned integer`); +} + +function assert_int_field(object, field) { + const num = object[field]; + assert_true(Number.isInteger(num), + `Expect dictionary.${field} to be integer`); +} + +function assert_string_field(object, field) { + const str = object[field]; + assert_equals(typeof str, 'string', + `Expect dictionary.${field} to be string`); +} + +function assert_number_field(object, field) { + const num = object[field]; + assert_equals(typeof num, 'number', + `Expect dictionary.${field} to be number`); +} + +function assert_boolean_field(object, field) { + const bool = object[field]; + assert_equals(typeof bool, 'boolean', + `Expect dictionary.${field} to be boolean`); +} + +function assert_array_field(object, field) { + assert_true(Array.isArray(object[field]), + `Expect dictionary.${field} to be array`); +} + +function assert_dict_field(object, field) { + assert_equals(typeof object[field], 'object', + `Expect dictionary.${field} to be plain object`); + + assert_not_equals(object[field], null, + `Expect dictionary.${field} to not be null`); +} + +function assert_enum_field(object, field, validValues) { + assert_string_field(object, field); + assert_true(validValues.includes(object[field]), + `Expect dictionary.${field} to have one of the valid enum values: ${validValues}`); +} + +function assert_optional_unsigned_int_field(object, field) { + if(object[field] !== undefined) { + assert_unsigned_int_field(object, field); + } +} + +function assert_optional_int_field(object, field) { + if(object[field] !== undefined) { + assert_int_field(object, field); + } +} + +function assert_optional_string_field(object, field) { + if(object[field] !== undefined) { + assert_string_field(object, field); + } +} + +function assert_optional_number_field(object, field) { + if(object[field] !== undefined) { + assert_number_field(object, field); + } +} + +function assert_optional_boolean_field(object, field) { + if(object[field] !== undefined) { + assert_boolean_field(object, field); + } +} + +function assert_optional_array_field(object, field) { + if(object[field] !== undefined) { + assert_array_field(object, field); + } +} + +function assert_optional_dict_field(object, field) { + if(object[field] !== undefined) { + assert_dict_field(object, field); + } +} + +function assert_optional_enum_field(object, field, validValues) { + if(object[field] !== undefined) { + assert_enum_field(object, field, validValues); + } +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/get-host-info.sub.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/get-host-info.sub.js new file mode 100755 index 000000000..fd3255363 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/get-host-info.sub.js @@ -0,0 +1,63 @@ +/** + * Host information for cross-origin tests. + * @returns {Object} with properties for different host information. + */ +function get_host_info() { + + var HTTP_PORT = '8000'; + var HTTP_PORT2 = '81'; + var HTTPS_PORT = '443'; + var HTTPS_PORT2 = '444'; + var PROTOCOL = self.location.protocol; + var IS_HTTPS = (PROTOCOL == "https:"); + var PORT = IS_HTTPS ? HTTPS_PORT : HTTP_PORT; + var PORT2 = IS_HTTPS ? HTTPS_PORT2 : HTTP_PORT2; + var HTTP_PORT_ELIDED = HTTP_PORT == "80" ? "" : (":" + HTTP_PORT); + var HTTP_PORT2_ELIDED = HTTP_PORT2 == "80" ? "" : (":" + HTTP_PORT2); + var HTTPS_PORT_ELIDED = HTTPS_PORT == "443" ? "" : (":" + HTTPS_PORT); + var PORT_ELIDED = IS_HTTPS ? HTTPS_PORT_ELIDED : HTTP_PORT_ELIDED; + var ORIGINAL_HOST = 'w3c-test.org'; + var REMOTE_HOST = (ORIGINAL_HOST === 'localhost') ? '127.0.0.1' : ('www.' + ORIGINAL_HOST); + var OTHER_HOST = 'www2.w3c-test.org'; + var NOTSAMESITE_HOST = (ORIGINAL_HOST === 'localhost') ? '127.0.0.1' : ('not-web-platform.test'); + + return { + HTTP_PORT: HTTP_PORT, + HTTP_PORT2: HTTP_PORT2, + HTTPS_PORT: HTTPS_PORT, + HTTPS_PORT2: HTTPS_PORT2, + PORT: PORT, + PORT2: PORT2, + ORIGINAL_HOST: ORIGINAL_HOST, + REMOTE_HOST: REMOTE_HOST, + + ORIGIN: PROTOCOL + "//" + ORIGINAL_HOST + PORT_ELIDED, + HTTP_ORIGIN: 'http://' + ORIGINAL_HOST + HTTP_PORT_ELIDED, + HTTPS_ORIGIN: 'https://' + ORIGINAL_HOST + HTTPS_PORT_ELIDED, + HTTPS_ORIGIN_WITH_CREDS: 'https://foo:bar@' + ORIGINAL_HOST + HTTPS_PORT_ELIDED, + HTTP_ORIGIN_WITH_DIFFERENT_PORT: 'http://' + ORIGINAL_HOST + HTTP_PORT2_ELIDED, + REMOTE_ORIGIN: PROTOCOL + "//" + REMOTE_HOST + PORT_ELIDED, + OTHER_ORIGIN: PROTOCOL + "//" + OTHER_HOST + PORT_ELIDED, + HTTP_REMOTE_ORIGIN: 'http://' + REMOTE_HOST + HTTP_PORT_ELIDED, + HTTP_NOTSAMESITE_ORIGIN: 'http://' + NOTSAMESITE_HOST + HTTP_PORT_ELIDED, + HTTP_REMOTE_ORIGIN_WITH_DIFFERENT_PORT: 'http://' + REMOTE_HOST + HTTP_PORT2_ELIDED, + HTTPS_REMOTE_ORIGIN: 'https://' + REMOTE_HOST + HTTPS_PORT_ELIDED, + HTTPS_REMOTE_ORIGIN_WITH_CREDS: 'https://foo:bar@' + REMOTE_HOST + HTTPS_PORT_ELIDED, + HTTPS_NOTSAMESITE_ORIGIN: 'https://' + NOTSAMESITE_HOST + HTTPS_PORT_ELIDED, + UNAUTHENTICATED_ORIGIN: 'http://' + OTHER_HOST + HTTP_PORT_ELIDED, + AUTHENTICATED_ORIGIN: 'https://' + OTHER_HOST + HTTPS_PORT_ELIDED + }; +} + +/** + * When a default port is used, location.port returns the empty string. + * This function attempts to provide an exact port, assuming we are running under wptserve. + * @param {*} loc - can be Location///URL, but assumes http/https only. + * @returns {string} The port number. + */ +function get_port(loc) { + if (loc.port) { + return loc.port; + } + return loc.protocol === 'https:' ? '443' : '80'; +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/idlharness.https.window.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/idlharness.https.window.js new file mode 100755 index 000000000..98685f1cd --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/idlharness.https.window.js @@ -0,0 +1,146 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js +// META: script=./RTCPeerConnection-helper.js +// META: timeout=long + +'use strict'; + +// The following helper functions are called from RTCPeerConnection-helper.js: +// generateAnswer() +// getNoiseStream() + +// Put the global IDL test objects under a parent object. +// This allows easier search for the test cases when +// viewing the web page +const idlTestObjects = {}; + +// Helper function to create RTCTrackEvent object +function initTrackEvent() { + const pc = new RTCPeerConnection(); + const transceiver = pc.addTransceiver('audio'); + const { sender, receiver } = transceiver; + const { track } = receiver; + return new RTCTrackEvent('track', { + receiver, track, transceiver + }); +} + +// List of async test driver functions +const asyncInitTasks = [ + asyncInitCertificate, + asyncInitTransports, + asyncInitMediaStreamTrack, +]; + +// Asynchronously generate an RTCCertificate +function asyncInitCertificate() { + return RTCPeerConnection.generateCertificate({ + name: 'RSASSA-PKCS1-v1_5', + modulusLength: 2048, + publicExponent: new Uint8Array([1, 0, 1]), + hash: 'SHA-256' + }).then(cert => { + idlTestObjects.certificate = cert; + }); +} + +// Asynchronously generate instances of +// RTCSctpTransport, RTCDtlsTransport, +// and RTCIceTransport +function asyncInitTransports() { + const pc = new RTCPeerConnection(); + pc.createDataChannel('test'); + + // setting answer description initializes pc.sctp + return pc.createOffer() + .then(offer => + pc.setLocalDescription(offer) + .then(() => generateAnswer(offer))) + .then(answer => pc.setRemoteDescription(answer)) + .then(() => { + const sctpTransport = pc.sctp; + assert_true(sctpTransport instanceof RTCSctpTransport, + 'Expect pc.sctp to be instance of RTCSctpTransport'); + idlTestObjects.sctpTransport = sctpTransport; + + const dtlsTransport = sctpTransport.transport; + assert_true(dtlsTransport instanceof RTCDtlsTransport, + 'Expect sctpTransport.transport to be instance of RTCDtlsTransport'); + idlTestObjects.dtlsTransport = dtlsTransport; + + const iceTransport = dtlsTransport.iceTransport; + assert_true(iceTransport instanceof RTCIceTransport, + 'Expect sctpTransport.transport to be instance of RTCDtlsTransport'); + idlTestObjects.iceTransport = iceTransport; + }); +} + +// Asynchoronously generate MediaStreamTrack from getUserMedia +function asyncInitMediaStreamTrack() { + return getNoiseStream({ audio: true }) + .then(mediaStream => { + idlTestObjects.mediaStreamTrack = mediaStream.getTracks()[0]; + }); +} + +// Run all async test drivers, report and swallow any error +// thrown/rejected. Proper test for correct initialization +// of the objects are done in their respective test files. +function asyncInit() { + return Promise.all(asyncInitTasks.map( + task => { + const t = async_test(`Test driver for ${task.name}`); + let promise; + t.step(() => { + promise = task().then( + t.step_func_done(), + t.step_func(err => + assert_unreached(`Failed to run ${task.name}: ${err}`))); + }); + return promise; + })); +} + +idl_test( + ['webrtc'], + ['webidl', 'mediacapture-streams', 'hr-time', 'dom', 'html'], + async idlArray => { + idlArray.add_objects({ + RTCPeerConnection: [`new RTCPeerConnection()`], + RTCSessionDescription: [`new RTCSessionDescription({ type: 'offer' })`], + RTCIceCandidate: [`new RTCIceCandidate({ sdpMid: 1 })`], + RTCDataChannel: [`new RTCPeerConnection().createDataChannel('')`], + RTCRtpTransceiver: [`new RTCPeerConnection().addTransceiver('audio')`], + RTCRtpSender: [`new RTCPeerConnection().addTransceiver('audio').sender`], + RTCRtpReceiver: [`new RTCPeerConnection().addTransceiver('audio').receiver`], + RTCPeerConnectionIceEvent: [`new RTCPeerConnectionIceEvent('ice')`], + RTCPeerConnectionIceErrorEvent: [ + `new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 });` + ], + RTCTrackEvent: [`initTrackEvent()`], + RTCErrorEvent: [`new RTCErrorEvent('error')`], + RTCDataChannelEvent: [ + `new RTCDataChannelEvent('channel', { + channel: new RTCPeerConnection().createDataChannel('') + })` + ], + // Async initialized objects below + RTCCertificate: ['idlTestObjects.certificate'], + RTCSctpTransport: ['idlTestObjects.sctpTransport'], + RTCDtlsTransport: ['idlTestObjects.dtlsTransport'], + RTCIceTransport: ['idlTestObjects.iceTransport'], + MediaStreamTrack: ['idlTestObjects.mediaStreamTrack'], + }); + /* + TODO + RTCRtpContributingSource + RTCRtpSynchronizationSource + RTCDTMFSender + RTCDTMFToneChangeEvent + RTCIdentityProviderRegistrar + RTCIdentityAssertion + */ + + await asyncInit(); + } +); diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/support/permission-helper.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/permission-helper.js new file mode 100755 index 000000000..769f3ee24 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/support/permission-helper.js @@ -0,0 +1,24 @@ +// Set permissions for camera and microphone using Web Driver +// Status can be one of "granted" or "denied" +// Scope take values from permission names +async function setMediaPermission(status="granted", scope=["camera", "microphone"]) { + try { + for (let s of scope) { + await test_driver.set_permission({ name: s }, status, true); + } + } catch (e) { + const noSetPermissionSupport = typeof e === "string" && e.match(/set_permission not implemented/); + if (!(noSetPermissionSupport || + (e instanceof Error && e.message.match("unimplemented")) )) { + throw e; + } + // Web Driver not implemented action + // FF: https://bugzilla.mozilla.org/show_bug.cgi?id=1524074 + + // with current WPT runners, will default to granted state for FF and Safari + // throw if status!="granted" to invalidate test results + if (status === "denied") { + assert_implements_optional(!noSetPermissionSupport, "Unable to set permission to denied for this test"); + } + } +} diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/README.md b/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/README.md new file mode 100755 index 000000000..56a2295dd --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/README.md @@ -0,0 +1,5 @@ +## sdp +Third-party SDP module from + https://www.npmjs.com/package/sdp +without tests or dependencies. See the commit message for version +and commit information diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/LICENSE b/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/LICENSE new file mode 100755 index 000000000..09502ec0a --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2017 Philipp Hancke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/index.html b/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/index.html new file mode 100755 index 000000000..474d42171 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/index.html @@ -0,0 +1,9 @@ + + +Directory listing for /webrtc/third_party/sdp/ +

Directory listing for /webrtc/third_party/sdp/

+
diff --git a/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/sdp.js b/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/sdp.js new file mode 100755 index 000000000..d2a287061 --- /dev/null +++ b/common/tct-webrtc-w3c-tests/webrtc/w3c/third_party/sdp/sdp.js @@ -0,0 +1,825 @@ +/* eslint-env node */ +'use strict'; + +// SDP helpers. +var SDPUtils = {}; + +// Generate an alphanumeric identifier for cname or mids. +// TODO: use UUIDs instead? https://gist.github.com/jed/982883 +SDPUtils.generateIdentifier = function() { + return Math.random().toString(36).substr(2, 10); +}; + +// The RTCP CNAME used by all peerconnections from the same JS. +SDPUtils.localCName = SDPUtils.generateIdentifier(); + +// Splits SDP into lines, dealing with both CRLF and LF. +SDPUtils.splitLines = function(blob) { + return blob.trim().split('\n').map(function(line) { + return line.trim(); + }); +}; +// Splits SDP into sessionpart and mediasections. Ensures CRLF. +SDPUtils.splitSections = function(blob) { + var parts = blob.split('\nm='); + return parts.map(function(part, index) { + return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; + }); +}; + +// returns the session description. +SDPUtils.getDescription = function(blob) { + var sections = SDPUtils.splitSections(blob); + return sections && sections[0]; +}; + +// returns the individual media sections. +SDPUtils.getMediaSections = function(blob) { + var sections = SDPUtils.splitSections(blob); + sections.shift(); + return sections; +}; + +// Returns lines that start with a certain prefix. +SDPUtils.matchPrefix = function(blob, prefix) { + return SDPUtils.splitLines(blob).filter(function(line) { + return line.indexOf(prefix) === 0; + }); +}; + +// Parses an ICE candidate line. Sample input: +// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 +// rport 55996" +SDPUtils.parseCandidate = function(line) { + var parts; + // Parse both variants. + if (line.indexOf('a=candidate:') === 0) { + parts = line.substring(12).split(' '); + } else { + parts = line.substring(10).split(' '); + } + + var candidate = { + foundation: parts[0], + component: parseInt(parts[1], 10), + protocol: parts[2].toLowerCase(), + priority: parseInt(parts[3], 10), + ip: parts[4], + address: parts[4], // address is an alias for ip. + port: parseInt(parts[5], 10), + // skip parts[6] == 'typ' + type: parts[7] + }; + + for (var i = 8; i < parts.length; i += 2) { + switch (parts[i]) { + case 'raddr': + candidate.relatedAddress = parts[i + 1]; + break; + case 'rport': + candidate.relatedPort = parseInt(parts[i + 1], 10); + break; + case 'tcptype': + candidate.tcpType = parts[i + 1]; + break; + case 'ufrag': + candidate.ufrag = parts[i + 1]; // for backward compability. + candidate.usernameFragment = parts[i + 1]; + break; + default: // extension handling, in particular ufrag + candidate[parts[i]] = parts[i + 1]; + break; + } + } + return candidate; +}; + +// Translates a candidate object into SDP candidate attribute. +SDPUtils.writeCandidate = function(candidate) { + var sdp = []; + sdp.push(candidate.foundation); + sdp.push(candidate.component); + sdp.push(candidate.protocol.toUpperCase()); + sdp.push(candidate.priority); + sdp.push(candidate.address || candidate.ip); + sdp.push(candidate.port); + + var type = candidate.type; + sdp.push('typ'); + sdp.push(type); + if (type !== 'host' && candidate.relatedAddress && + candidate.relatedPort) { + sdp.push('raddr'); + sdp.push(candidate.relatedAddress); + sdp.push('rport'); + sdp.push(candidate.relatedPort); + } + if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') { + sdp.push('tcptype'); + sdp.push(candidate.tcpType); + } + if (candidate.usernameFragment || candidate.ufrag) { + sdp.push('ufrag'); + sdp.push(candidate.usernameFragment || candidate.ufrag); + } + return 'candidate:' + sdp.join(' '); +}; + +// Parses an ice-options line, returns an array of option tags. +// a=ice-options:foo bar +SDPUtils.parseIceOptions = function(line) { + return line.substr(14).split(' '); +}; + +// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input: +// a=rtpmap:111 opus/48000/2 +SDPUtils.parseRtpMap = function(line) { + var parts = line.substr(9).split(' '); + var parsed = { + payloadType: parseInt(parts.shift(), 10) // was: id + }; + + parts = parts[0].split('/'); + + parsed.name = parts[0]; + parsed.clockRate = parseInt(parts[1], 10); // was: clockrate + parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1; + // legacy alias, got renamed back to channels in ORTC. + parsed.numChannels = parsed.channels; + return parsed; +}; + +// Generate an a=rtpmap line from RTCRtpCodecCapability or +// RTCRtpCodecParameters. +SDPUtils.writeRtpMap = function(codec) { + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + var channels = codec.channels || codec.numChannels || 1; + return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + + (channels !== 1 ? '/' + channels : '') + '\r\n'; +}; + +// Parses an a=extmap line (headerextension from RFC 5285). Sample input: +// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset +// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset +SDPUtils.parseExtmap = function(line) { + var parts = line.substr(9).split(' '); + return { + id: parseInt(parts[0], 10), + direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv', + uri: parts[1] + }; +}; + +// Generates a=extmap line from RTCRtpHeaderExtensionParameters or +// RTCRtpHeaderExtension. +SDPUtils.writeExtmap = function(headerExtension) { + return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + + (headerExtension.direction && headerExtension.direction !== 'sendrecv' + ? '/' + headerExtension.direction + : '') + + ' ' + headerExtension.uri + '\r\n'; +}; + +// Parses an ftmp line, returns dictionary. Sample input: +// a=fmtp:96 vbr=on;cng=on +// Also deals with vbr=on; cng=on +SDPUtils.parseFmtp = function(line) { + var parsed = {}; + var kv; + var parts = line.substr(line.indexOf(' ') + 1).split(';'); + for (var j = 0; j < parts.length; j++) { + kv = parts[j].trim().split('='); + parsed[kv[0].trim()] = kv[1]; + } + return parsed; +}; + +// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeFmtp = function(codec) { + var line = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.parameters && Object.keys(codec.parameters).length) { + var params = []; + Object.keys(codec.parameters).forEach(function(param) { + if (codec.parameters[param]) { + params.push(param + '=' + codec.parameters[param]); + } else { + params.push(param); + } + }); + line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; + } + return line; +}; + +// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: +// a=rtcp-fb:98 nack rpsi +SDPUtils.parseRtcpFb = function(line) { + var parts = line.substr(line.indexOf(' ') + 1).split(' '); + return { + type: parts.shift(), + parameter: parts.join(' ') + }; +}; +// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeRtcpFb = function(codec) { + var lines = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.rtcpFeedback && codec.rtcpFeedback.length) { + // FIXME: special handling for trr-int? + codec.rtcpFeedback.forEach(function(fb) { + lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + + '\r\n'; + }); + } + return lines; +}; + +// Parses an RFC 5576 ssrc media attribute. Sample input: +// a=ssrc:3735928559 cname:something +SDPUtils.parseSsrcMedia = function(line) { + var sp = line.indexOf(' '); + var parts = { + ssrc: parseInt(line.substr(7, sp - 7), 10) + }; + var colon = line.indexOf(':', sp); + if (colon > -1) { + parts.attribute = line.substr(sp + 1, colon - sp - 1); + parts.value = line.substr(colon + 1); + } else { + parts.attribute = line.substr(sp + 1); + } + return parts; +}; + +SDPUtils.parseSsrcGroup = function(line) { + var parts = line.substr(13).split(' '); + return { + semantics: parts.shift(), + ssrcs: parts.map(function(ssrc) { + return parseInt(ssrc, 10); + }) + }; +}; + +// Extracts the MID (RFC 5888) from a media section. +// returns the MID or undefined if no mid line was found. +SDPUtils.getMid = function(mediaSection) { + var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; + if (mid) { + return mid.substr(6); + } +}; + +SDPUtils.parseFingerprint = function(line) { + var parts = line.substr(14).split(' '); + return { + algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. + value: parts[1] + }; +}; + +// Extracts DTLS parameters from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the fingerprint line as input. See also getIceParameters. +SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=fingerprint:'); + // Note: a=setup line is ignored since we use the 'auto' role. + // Note2: 'algorithm' is not case sensitive except in Edge. + return { + role: 'auto', + fingerprints: lines.map(SDPUtils.parseFingerprint) + }; +}; + +// Serializes DTLS parameters to SDP. +SDPUtils.writeDtlsParameters = function(params, setupType) { + var sdp = 'a=setup:' + setupType + '\r\n'; + params.fingerprints.forEach(function(fp) { + sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; + }); + return sdp; +}; + +// Parses a=crypto lines into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members +SDPUtils.parseCryptoLine = function(line) { + var parts = line.substr(9).split(' '); + return { + tag: parseInt(parts[0], 10), + cryptoSuite: parts[1], + keyParams: parts[2], + sessionParams: parts.slice(3), + }; +}; + +SDPUtils.writeCryptoLine = function(parameters) { + return 'a=crypto:' + parameters.tag + ' ' + + parameters.cryptoSuite + ' ' + + (typeof parameters.keyParams === 'object' + ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) + : parameters.keyParams) + + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + + '\r\n'; +}; + +// Parses the crypto key parameters into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam* +SDPUtils.parseCryptoKeyParams = function(keyParams) { + if (keyParams.indexOf('inline:') !== 0) { + return null; + } + var parts = keyParams.substr(7).split('|'); + return { + keyMethod: 'inline', + keySalt: parts[0], + lifeTime: parts[1], + mkiValue: parts[2] ? parts[2].split(':')[0] : undefined, + mkiLength: parts[2] ? parts[2].split(':')[1] : undefined, + }; +}; + +SDPUtils.writeCryptoKeyParams = function(keyParams) { + return keyParams.keyMethod + ':' + + keyParams.keySalt + + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + + (keyParams.mkiValue && keyParams.mkiLength + ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength + : ''); +}; + +// Extracts all SDES paramters. +SDPUtils.getCryptoParameters = function(mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=crypto:'); + return lines.map(SDPUtils.parseCryptoLine); +}; + +// Parses ICE information from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the ice-ufrag and ice-pwd lines as input. +SDPUtils.getIceParameters = function(mediaSection, sessionpart) { + var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=ice-ufrag:')[0]; + var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=ice-pwd:')[0]; + if (!(ufrag && pwd)) { + return null; + } + return { + usernameFragment: ufrag.substr(12), + password: pwd.substr(10), + }; +}; + +// Serializes ICE parameters to SDP. +SDPUtils.writeIceParameters = function(params) { + return 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + + 'a=ice-pwd:' + params.password + '\r\n'; +}; + +// Parses the SDP media section and returns RTCRtpParameters. +SDPUtils.parseRtpParameters = function(mediaSection) { + var description = { + codecs: [], + headerExtensions: [], + fecMechanisms: [], + rtcp: [] + }; + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..] + var pt = mline[i]; + var rtpmapline = SDPUtils.matchPrefix( + mediaSection, 'a=rtpmap:' + pt + ' ')[0]; + if (rtpmapline) { + var codec = SDPUtils.parseRtpMap(rtpmapline); + var fmtps = SDPUtils.matchPrefix( + mediaSection, 'a=fmtp:' + pt + ' '); + // Only the first a=fmtp: is considered. + codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; + codec.rtcpFeedback = SDPUtils.matchPrefix( + mediaSection, 'a=rtcp-fb:' + pt + ' ') + .map(SDPUtils.parseRtcpFb); + description.codecs.push(codec); + // parse FEC mechanisms from rtpmap lines. + switch (codec.name.toUpperCase()) { + case 'RED': + case 'ULPFEC': + description.fecMechanisms.push(codec.name.toUpperCase()); + break; + default: // only RED and ULPFEC are recognized as FEC mechanisms. + break; + } + } + } + SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) { + description.headerExtensions.push(SDPUtils.parseExtmap(line)); + }); + // FIXME: parse rtcp. + return description; +}; + +// Generates parts of the SDP media section describing the capabilities / +// parameters. +SDPUtils.writeRtpDescription = function(kind, caps) { + var sdp = ''; + + // Build the mline. + sdp += 'm=' + kind + ' '; + sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. + sdp += ' UDP/TLS/RTP/SAVPF '; + sdp += caps.codecs.map(function(codec) { + if (codec.preferredPayloadType !== undefined) { + return codec.preferredPayloadType; + } + return codec.payloadType; + }).join(' ') + '\r\n'; + + sdp += 'c=IN IP4 0.0.0.0\r\n'; + sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; + + // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. + caps.codecs.forEach(function(codec) { + sdp += SDPUtils.writeRtpMap(codec); + sdp += SDPUtils.writeFmtp(codec); + sdp += SDPUtils.writeRtcpFb(codec); + }); + var maxptime = 0; + caps.codecs.forEach(function(codec) { + if (codec.maxptime > maxptime) { + maxptime = codec.maxptime; + } + }); + if (maxptime > 0) { + sdp += 'a=maxptime:' + maxptime + '\r\n'; + } + sdp += 'a=rtcp-mux\r\n'; + + if (caps.headerExtensions) { + caps.headerExtensions.forEach(function(extension) { + sdp += SDPUtils.writeExtmap(extension); + }); + } + // FIXME: write fecMechanisms. + return sdp; +}; + +// Parses the SDP media section and returns an array of +// RTCRtpEncodingParameters. +SDPUtils.parseRtpEncodingParameters = function(mediaSection) { + var encodingParameters = []; + var description = SDPUtils.parseRtpParameters(mediaSection); + var hasRed = description.fecMechanisms.indexOf('RED') !== -1; + var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; + + // filter a=ssrc:... cname:, ignore PlanB-msid + var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(parts) { + return parts.attribute === 'cname'; + }); + var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; + var secondarySsrc; + + var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID') + .map(function(line) { + var parts = line.substr(17).split(' '); + return parts.map(function(part) { + return parseInt(part, 10); + }); + }); + if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { + secondarySsrc = flows[0][1]; + } + + description.codecs.forEach(function(codec) { + if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { + var encParam = { + ssrc: primarySsrc, + codecPayloadType: parseInt(codec.parameters.apt, 10) + }; + if (primarySsrc && secondarySsrc) { + encParam.rtx = {ssrc: secondarySsrc}; + } + encodingParameters.push(encParam); + if (hasRed) { + encParam = JSON.parse(JSON.stringify(encParam)); + encParam.fec = { + ssrc: primarySsrc, + mechanism: hasUlpfec ? 'red+ulpfec' : 'red' + }; + encodingParameters.push(encParam); + } + } + }); + if (encodingParameters.length === 0 && primarySsrc) { + encodingParameters.push({ + ssrc: primarySsrc + }); + } + + // we support both b=AS and b=TIAS but interpret AS as TIAS. + var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); + if (bandwidth.length) { + if (bandwidth[0].indexOf('b=TIAS:') === 0) { + bandwidth = parseInt(bandwidth[0].substr(7), 10); + } else if (bandwidth[0].indexOf('b=AS:') === 0) { + // use formula from JSEP to convert b=AS to TIAS value. + bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 + - (50 * 40 * 8); + } else { + bandwidth = undefined; + } + encodingParameters.forEach(function(params) { + params.maxBitrate = bandwidth; + }); + } + return encodingParameters; +}; + +// parses http://draft.ortc.org/#rtcrtcpparameters* +SDPUtils.parseRtcpParameters = function(mediaSection) { + var rtcpParameters = {}; + + // Gets the first SSRC. Note tha with RTX there might be multiple + // SSRCs. + var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(obj) { + return obj.attribute === 'cname'; + })[0]; + if (remoteSsrc) { + rtcpParameters.cname = remoteSsrc.value; + rtcpParameters.ssrc = remoteSsrc.ssrc; + } + + // Edge uses the compound attribute instead of reducedSize + // compound is !reducedSize + var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); + rtcpParameters.reducedSize = rsize.length > 0; + rtcpParameters.compound = rsize.length === 0; + + // parses the rtcp-mux attrіbute. + // Note that Edge does not support unmuxed RTCP. + var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); + rtcpParameters.mux = mux.length > 0; + + return rtcpParameters; +}; + +// parses either a=msid: or a=ssrc:... msid lines and returns +// the id of the MediaStream and MediaStreamTrack. +SDPUtils.parseMsid = function(mediaSection) { + var parts; + var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); + if (spec.length === 1) { + parts = spec[0].substr(7).split(' '); + return {stream: parts[0], track: parts[1]}; + } + var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(msidParts) { + return msidParts.attribute === 'msid'; + }); + if (planB.length > 0) { + parts = planB[0].value.split(' '); + return {stream: parts[0], track: parts[1]}; + } +}; + +// SCTP +// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back +// to draft-ietf-mmusic-sctp-sdp-05 +SDPUtils.parseSctpDescription = function(mediaSection) { + var mline = SDPUtils.parseMLine(mediaSection); + var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:'); + var maxMessageSize; + if (maxSizeLine.length > 0) { + maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10); + } + if (isNaN(maxMessageSize)) { + maxMessageSize = 65536; + } + var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:'); + if (sctpPort.length > 0) { + return { + port: parseInt(sctpPort[0].substr(12), 10), + protocol: mline.fmt, + maxMessageSize: maxMessageSize + }; + } + var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:'); + if (sctpMapLines.length > 0) { + var parts = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:')[0] + .substr(10) + .split(' '); + return { + port: parseInt(parts[0], 10), + protocol: parts[1], + maxMessageSize: maxMessageSize + }; + } +}; + +// SCTP +// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers +// support by now receiving in this format, unless we originally parsed +// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line +// protocol of DTLS/SCTP -- without UDP/ or TCP/) +SDPUtils.writeSctpDescription = function(media, sctp) { + var output = []; + if (media.protocol !== 'DTLS/SCTP') { + output = [ + 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', + 'c=IN IP4 0.0.0.0\r\n', + 'a=sctp-port:' + sctp.port + '\r\n' + ]; + } else { + output = [ + 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', + 'c=IN IP4 0.0.0.0\r\n', + 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n' + ]; + } + if (sctp.maxMessageSize !== undefined) { + output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n'); + } + return output.join(''); +}; + +// Generate a session ID for SDP. +// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1 +// recommends using a cryptographically random +ve 64-bit value +// but right now this should be acceptable and within the right range +SDPUtils.generateSessionId = function() { + return Math.random().toString().substr(2, 21); +}; + +// Write boilder plate for start of SDP +// sessId argument is optional - if not supplied it will +// be generated randomly +// sessVersion is optional and defaults to 2 +// sessUser is optional and defaults to 'thisisadapterortc' +SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) { + var sessionId; + var version = sessVer !== undefined ? sessVer : 2; + if (sessId) { + sessionId = sessId; + } else { + sessionId = SDPUtils.generateSessionId(); + } + var user = sessUser || 'thisisadapterortc'; + // FIXME: sess-id should be an NTP timestamp. + return 'v=0\r\n' + + 'o=' + user + ' ' + sessionId + ' ' + version + + ' IN IP4 127.0.0.1\r\n' + + 's=-\r\n' + + 't=0 0\r\n'; +}; + +SDPUtils.writeMediaSection = function(transceiver, caps, type, stream) { + var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps); + + // Map ICE parameters (ufrag, pwd) to SDP. + sdp += SDPUtils.writeIceParameters( + transceiver.iceGatherer.getLocalParameters()); + + // Map DTLS parameters to SDP. + sdp += SDPUtils.writeDtlsParameters( + transceiver.dtlsTransport.getLocalParameters(), + type === 'offer' ? 'actpass' : 'active'); + + sdp += 'a=mid:' + transceiver.mid + '\r\n'; + + if (transceiver.direction) { + sdp += 'a=' + transceiver.direction + '\r\n'; + } else if (transceiver.rtpSender && transceiver.rtpReceiver) { + sdp += 'a=sendrecv\r\n'; + } else if (transceiver.rtpSender) { + sdp += 'a=sendonly\r\n'; + } else if (transceiver.rtpReceiver) { + sdp += 'a=recvonly\r\n'; + } else { + sdp += 'a=inactive\r\n'; + } + + if (transceiver.rtpSender) { + // spec. + var msid = 'msid:' + stream.id + ' ' + + transceiver.rtpSender.track.id + '\r\n'; + sdp += 'a=' + msid; + + // for Chrome. + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + + ' ' + msid; + if (transceiver.sendEncodingParameters[0].rtx) { + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + + ' ' + msid; + sdp += 'a=ssrc-group:FID ' + + transceiver.sendEncodingParameters[0].ssrc + ' ' + + transceiver.sendEncodingParameters[0].rtx.ssrc + + '\r\n'; + } + } + // FIXME: this should be written by writeRtpDescription. + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + + ' cname:' + SDPUtils.localCName + '\r\n'; + if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) { + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + + ' cname:' + SDPUtils.localCName + '\r\n'; + } + return sdp; +}; + +// Gets the direction from the mediaSection or the sessionpart. +SDPUtils.getDirection = function(mediaSection, sessionpart) { + // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. + var lines = SDPUtils.splitLines(mediaSection); + for (var i = 0; i < lines.length; i++) { + switch (lines[i]) { + case 'a=sendrecv': + case 'a=sendonly': + case 'a=recvonly': + case 'a=inactive': + return lines[i].substr(2); + default: + // FIXME: What should happen here? + } + } + if (sessionpart) { + return SDPUtils.getDirection(sessionpart); + } + return 'sendrecv'; +}; + +SDPUtils.getKind = function(mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + return mline[0].substr(2); +}; + +SDPUtils.isRejected = function(mediaSection) { + return mediaSection.split(' ', 2)[1] === '0'; +}; + +SDPUtils.parseMLine = function(mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var parts = lines[0].substr(2).split(' '); + return { + kind: parts[0], + port: parseInt(parts[1], 10), + protocol: parts[2], + fmt: parts.slice(3).join(' ') + }; +}; + +SDPUtils.parseOLine = function(mediaSection) { + var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; + var parts = line.substr(2).split(' '); + return { + username: parts[0], + sessionId: parts[1], + sessionVersion: parseInt(parts[2], 10), + netType: parts[3], + addressType: parts[4], + address: parts[5] + }; +}; + +// a very naive interpretation of a valid SDP. +SDPUtils.isValidSDP = function(blob) { + if (typeof blob !== 'string' || blob.length === 0) { + return false; + } + var lines = SDPUtils.splitLines(blob); + for (var i = 0; i < lines.length; i++) { + if (lines[i].length < 2 || lines[i].charAt(1) !== '=') { + return false; + } + // TODO: check the modifier a bit more. + } + return true; +}; + +// Expose public methods. +if (typeof module === 'object') { + module.exports = SDPUtils; +}