Remove testRunner.setWebRTCUnifiedPlanEnabled
https://bugs.webkit.org/show_bug.cgi?id=202700

Reviewed by Eric Carlson.

Source/WebKit:

* WebProcess/InjectedBundle/InjectedBundle.cpp:
(WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

Tools:

* WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
* WebKitTestRunner/InjectedBundle/TestRunner.h:

LayoutTests:

Remove legacy tests and migrate simulcast test to unified plan.

* fast/mediastream/RTCPeerConnection-media-setup-two-dialogs.html:
* platform/gtk/TestExpectations:
* webrtc/simulcast-h264.html:
* webrtc/video-addLegacyTransceiver.html: Removed.
* webrtc/video-with-receiver.html: Removed.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@250904 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 343ed9c..2826de1 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,18 @@
+2019-10-09  youenn fablet  <youenn@apple.com>
+
+        Remove testRunner.setWebRTCUnifiedPlanEnabled
+        https://bugs.webkit.org/show_bug.cgi?id=202700
+
+        Reviewed by Eric Carlson.
+
+        Remove legacy tests and migrate simulcast test to unified plan.
+
+        * fast/mediastream/RTCPeerConnection-media-setup-two-dialogs.html:
+        * platform/gtk/TestExpectations:
+        * webrtc/simulcast-h264.html:
+        * webrtc/video-addLegacyTransceiver.html: Removed.
+        * webrtc/video-with-receiver.html: Removed.
+
 2019-10-09  Antti Koivisto  <antti@apple.com>
 
         [CSS Shadow Parts] Allow exporting single part with multiple names using exportparts attribute
diff --git a/LayoutTests/fast/mediastream/RTCPeerConnection-media-setup-two-dialogs.html b/LayoutTests/fast/mediastream/RTCPeerConnection-media-setup-two-dialogs.html
index 79e6865..1540823 100644
--- a/LayoutTests/fast/mediastream/RTCPeerConnection-media-setup-two-dialogs.html
+++ b/LayoutTests/fast/mediastream/RTCPeerConnection-media-setup-two-dialogs.html
@@ -11,10 +11,7 @@
 
             description("Test setting up media between two RTCPeerConnection instances with a single SDP dialog.");
 
-            if (window.testRunner) {
-                testRunner.setWebRTCUnifiedPlanEnabled(false);
-                testRunner.setUserMediaPermission(true);
-            } else {
+            if (!window.testRunner) {
                 debug("This test can not be run without the testRunner");
                 finishJSTest();
             }
diff --git a/LayoutTests/platform/gtk/TestExpectations b/LayoutTests/platform/gtk/TestExpectations
index 2982099..1692f8b 100644
--- a/LayoutTests/platform/gtk/TestExpectations
+++ b/LayoutTests/platform/gtk/TestExpectations
@@ -541,7 +541,6 @@
 webkit.org/b/85212 ietestcenter/css3/flexbox/flexbox-layout-002.htm [ ImageOnlyFailure ]
 
 webkit.org/b/187064 webrtc/audio-peer-connection-g722.html
-webkit.org/b/187064 webrtc/video-with-receiver.html
 webkit.org/b/187064 webrtc/captureCanvas-webrtc.html
 webkit.org/b/187064 webrtc/video-remote-mute.html
 webkit.org/b/187064 webrtc/video-addTransceiver.html
@@ -3562,8 +3561,6 @@
 
 webkit.org/b/189345 http/tests/media/clearkey/collect-webkit-media-session.html [ Timeout ]
 
-webkit.org/b/189567 webrtc/video-addLegacyTransceiver.html [ Failure ]
-
 webkit.org/b/189564 http/tests/xmlhttprequest/url-with-credentials.html [ Failure ]
 
 webkit.org/b/189737 editing/pasteboard/4930986-1-paste-as-quotation.html [ Failure ]
diff --git a/LayoutTests/webrtc/simulcast-h264.html b/LayoutTests/webrtc/simulcast-h264.html
index 16f2f84..4564f15 100644
--- a/LayoutTests/webrtc/simulcast-h264.html
+++ b/LayoutTests/webrtc/simulcast-h264.html
@@ -11,11 +11,201 @@
     <video id="high" playsinline autoplay width="320"></video>
 </div>
 <script>
-if (window.testRunner)
-    testRunner.setWebRTCUnifiedPlanEnabled(false);
+// Code taken from Chrome/Firefox tests and/or simulcast playground.
+function splitUnifiedPlanOffer(offer) {
+  let sdpLines = offer.sdp.split("\r\n");
+
+  mSectionStart = sdpLines.findIndex(line => line.startsWith("m="));
+  mSection = sdpLines.splice(mSectionStart);
+
+  let ssrcs = mSection.filter((line) => {
+    return line.startsWith("a=ssrc");
+  });
+
+  let layerRIDS = mSection.filter(line => line.startsWith("a=simulcast:")).map(
+      line => line.replace("a=simulcast:send ", "").split(";")
+    )[0];
+
+  let midExtmapId = mSection.filter(line => line.includes("urn:ietf:params:rtp-hdrext:sdes:mid")).map(line =>
+    line.replace("a=extmap:", "").split(" ")[0]
+  )[0];
+
+  let ridExtmapId = mSection.filter(line => line.includes("urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")).map(line =>
+    line.replace("a=extmap:", "").split(" ")[0]
+  )[0];
+
+  mSection = mSection.filter((line) => {
+    return !line.startsWith("a=ssrc") && !line.startsWith("a=simulcast");
+  });
+
+  sdpLines = sdpLines.map(line => {
+    if (line.startsWith("a=group:BUNDLE"))
+      return "a=group:BUNDLE " + layerRIDS.join(" ");
+
+    return line;
+  });
+
+  let counter = 0;
+  for (let layerName of layerRIDS) {
+    sdpLines = sdpLines.concat(mSection.map(line => {
+      if (line.match(/a=msid:/)) {
+        return "a=msid:" + layerName + " " + layerName;
+      }
+
+      if (line.startsWith("a=mid:"))
+        return "a=mid:" + layerName;
+
+      if (line.startsWith("a=extmap:" + midExtmapId + " "))
+        return "a=extmap:" + midExtmapId + " urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id";
+
+      if (line.startsWith("a=extmap:" + ridExtmapId + " "))
+        return "a=extmap:" + ridExtmapId + " urn:ietf:params:rtp-hdrext:sdes:mid";
+
+      if (line.startsWith("a=rid:") || line.startsWith("a=simulcast:"))
+        return null;
+
+      return line;
+    }));
+    sdpLines = sdpLines.concat([ssrcs[counter]]);
+    sdpLines = sdpLines.concat([ssrcs[8 * counter + 4]]);
+    sdpLines = sdpLines.concat([ssrcs[8 * counter + 4 + 1]]);
+    sdpLines = sdpLines.concat([ssrcs[8 * counter + 4 + 2]]);
+    sdpLines = sdpLines.concat([ssrcs[8 * counter + 4 + 3]]);
+    sdpLines = sdpLines.concat([ssrcs[8 * counter + 4 + 4]]);
+    sdpLines = sdpLines.concat([ssrcs[8 * counter + 4 + 5]]);
+    sdpLines = sdpLines.concat([ssrcs[8 * counter + 4 + 6]]);
+    sdpLines = sdpLines.concat([ssrcs[8 * counter + 4 + 7]]);
+    counter = counter + 1;
+  }
+
+  offer.sdp = sdpLines
+    .filter(line => line && line.length > 0)
+    .join("\r\n") + "\r\n";
+}
+
+function splitUnifiedPlanAnswer(answer) {
+  let sdpLines = answer.sdp.split("\r\n");
+
+  let mSectionStart = sdpLines.findIndex(line => line.startsWith("m="));
+  let mSection = sdpLines.splice(mSectionStart);
+
+  // Remove extra m= sections
+  mSectionStart = mSection.slice(1).findIndex(line => line.startsWith("m="));
+  if (mSectionStart != -1)
+    mSection.splice(mSectionStart);
+
+  let midExtmapId = mSection.filter(line => line.includes("urn:ietf:params:rtp-hdrext:sdes:mid")).map(line =>
+    line.replace("a=extmap:", "").split(" ")[0]
+  )[0];
+
+  let ridExtmapId = mSection.filter(line => line.includes("urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")).map(line =>
+    line.replace("a=extmap:", "").split(" ")[0]
+  )[0];
+
+  sdpLines = sdpLines.map(line => {
+    if (line.startsWith("a=group:BUNDLE"))
+      return "a=group:BUNDLE 0";
+
+    return line;
+  });
+
+  mSection = mSection.map(line => {
+    if (line.startsWith("a=mid:"))
+      return "a=mid:0";
+
+    if (line.startsWith("a=extmap:" + midExtmapId + " "))
+      return "a=extmap:" + midExtmapId + " urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id";
+
+    if (line.startsWith("a=extmap:" + ridExtmapId + " "))
+      return "a=extmap:" + ridExtmapId + " urn:ietf:params:rtp-hdrext:sdes:mid";
+
+    return line;
+  });
+
+  let params = ["0", "1", "2"];
+  for(let r in params) {
+    mSection.push("a=rid:" + r + " recv");
+  }
+  mSection.push("a=simulcast:recv " + params.join(";"));
+
+  answer.sdp = sdpLines.concat(mSection)
+    .filter(line => line && line.length > 0).join("\r\n") + "\r\n";
+}
+
+function enableSimulcastThroughSDP(offer)
+{
+  match = offer.sdp.match(/a=ssrc:(\d+) cname:(.*)\r\n/);
+  msid = offer.sdp.match(/a=ssrc:(\d+) msid:(.*)\r\n/);
+  var lines = offer.sdp.trim().split('\r\n');
+  var removed = lines.splice(lines.length - 4, 4);
+  var videoSSRC1 = parseInt(match[1]);
+  rtxSSRC1 = offer.sdp.split('\r\n').filter((line) => { return line.startsWith('a=ssrc-group:FID ')})[0].split(' ')[2];
+  var videoSSRC2 = videoSSRC1 + 1;
+  var rtxSSRC2 = videoSSRC1 + 2;
+  var videoSSRC3 = videoSSRC1 + 3;
+  var rtxSSRC3 = videoSSRC1 + 4;
+  lines.push(removed[0]);
+  lines.push(removed[1]);
+  lines.push('a=ssrc:' + videoSSRC2 + ' cname:' + match[2]);
+  lines.push('a=ssrc:' + videoSSRC2 + ' msid:' + msid[2]);
+  lines.push('a=ssrc:' + rtxSSRC2 + ' cname:' + match[2]);
+  lines.push('a=ssrc:' + rtxSSRC2 + ' msid:' + msid[2]);
+
+  lines.push('a=ssrc:' + videoSSRC3 + ' cname:' + match[2]);
+  lines.push('a=ssrc:' + videoSSRC3 + ' msid:' + msid[2]);
+  lines.push('a=ssrc:' + rtxSSRC3 + ' cname:' + match[2]);
+  lines.push('a=ssrc:' + rtxSSRC3 + ' msid:' + msid[2]);
+
+  lines.push('a=ssrc-group:FID ' + videoSSRC2 + ' ' + rtxSSRC2);
+  lines.push('a=ssrc-group:FID ' + videoSSRC3 + ' ' + rtxSSRC3);
+  lines.push('a=ssrc-group:SIM ' + videoSSRC1 + ' ' + videoSSRC2 + ' ' + videoSSRC3);
+
+  offer.sdp = lines.join('\r\n') + '\r\n';
+}
+
+function enableSimulcastThroughSDP2(offer)
+{
+  var lines = offer.sdp.trim().split('\r\n');
+
+  lines.push('a=simulcast:send 0;1;2');
+
+  offer.sdp = lines.join('\r\n') + '\r\n';
+}
+
+</script>
+<script>
+async function setupCall(pc1, pc2)
+{
+    let pc1Offer = await pc1.createOffer();
+    enableSimulcastThroughSDP(pc1Offer);
+    await pc1.setLocalDescription(pc1Offer);
+
+    let pc2Offer = {
+      type: 'offer',
+      sdp: pc1.localDescription.sdp,
+    };
+    enableSimulcastThroughSDP2(pc2Offer);
+
+    splitUnifiedPlanOffer(pc2Offer);
+    await pc2.setRemoteDescription(pc2Offer);
+
+    let answer = await pc2.createAnswer();
+    await pc2.setLocalDescription(answer);
+    let pc1Answer = {
+      type: "answer",
+      sdp: pc2.localDescription.sdp,
+    }
+    splitUnifiedPlanAnswer(pc1Answer);
+
+    await pc1.setRemoteDescription(pc1Answer).then(() => {}, (e) => console.log(e));
+}
+
 var state;
 var finished = false;
-// This test is largely inspired from Chrome/Firefox/Simulcast playground tests.
+
+const pc1 = new RTCPeerConnection();
+const pc2 = new RTCPeerConnection();
+
 promise_test(async (test) => {
     if (window.testRunner && testRunner.timeout) {
         setTimeout(() => {
@@ -26,10 +216,33 @@
 
     state = "start";
 
-    const pc1 = new RTCPeerConnection();
-    const pc2 = new RTCPeerConnection();
-    pc1.onicecandidate = (e) => pc2.addIceCandidate(e.candidate);
-    pc2.onicecandidate = (e) => pc1.addIceCandidate(e.candidate);
+    pc1.onicecandidate = e => {
+        if (e.candidate) {
+            for(let layerIndex in ["0", "1", "2"]) {
+                let newCandidate = new RTCIceCandidate({
+                    candidate: e.candidate.candidate,
+                    sdpMid: layerIndex,
+                    sdpMLineIndex: layerIndex,
+                    usernameFragment: e.candidate.usernameFragment,
+                });
+                setTimeout(() => pc2.addIceCandidate(newCandidate), 5);
+            }
+        } else
+            setTimeout(() => pc1.addIceCandidate(e.candidate), 5);
+    };
+
+    pc2.onicecandidate = e => {
+        if (e.candidate) {
+            let newCandidate = new RTCIceCandidate({
+                candidate: e.candidate.candidate,
+                sdpMid: "0", //e.candidate.sdpMid,
+                sdpMLineIndex: e.candidate.sdpMLineIndex,
+                usernameFragment: e.candidate.usernameFragment,
+            });
+            setTimeout(() => pc1.addIceCandidate(newCandidate), 5);
+        } else
+            setTimeout(() => pc1.addIceCandidate(e.candidate), 5);
+    };
 
     let counter = 0;
     pc2.ontrack = (e) => {
@@ -44,68 +257,8 @@
 
     const localStream = await navigator.mediaDevices.getUserMedia({ video: { width: 640, height: 480 } });
     pc1.addTrack(localStream.getVideoTracks()[0], localStream);
-    const offer = await pc1.createOffer();
 
-    state = "got offer";
-
-    match = offer.sdp.match(/a=ssrc:(\d+) cname:(.*)\r\n/);
-    msid = offer.sdp.match(/a=ssrc:(\d+) msid:(.*)\r\n/);
-    var lines = offer.sdp.trim().split('\r\n');
-    var removed = lines.splice(lines.length - 4, 4);
-    var videoSSRC1 = parseInt(match[1]);
-    rtxSSRC1 = offer.sdp.split('\r\n').filter((line) => { return line.startsWith('a=ssrc-group:FID ')})[0].split(' ')[2];
-    var videoSSRC2 = videoSSRC1 + 1;
-    var rtxSSRC2 = videoSSRC1 + 2;
-    var videoSSRC3 = videoSSRC1 + 3;
-    var rtxSSRC3 = videoSSRC1 + 4;
-    lines.push(removed[0]);
-    lines.push(removed[1]);
-    lines.push('a=ssrc:' + videoSSRC2 + ' cname:' + match[2]);
-    lines.push('a=ssrc:' + videoSSRC2 + ' msid:' + msid[2]);
-    lines.push('a=ssrc:' + rtxSSRC2 + ' cname:' + match[2]);
-    lines.push('a=ssrc:' + rtxSSRC2 + ' msid:' + msid[2]);
-
-    lines.push('a=ssrc:' + videoSSRC3 + ' cname:' + match[2]);
-    lines.push('a=ssrc:' + videoSSRC3 + ' msid:' + msid[2]);
-    lines.push('a=ssrc:' + rtxSSRC3 + ' cname:' + match[2]);
-    lines.push('a=ssrc:' + rtxSSRC3 + ' msid:' + msid[2]);
-
-    lines.push('a=ssrc-group:FID ' + videoSSRC2 + ' ' + rtxSSRC2);
-    lines.push('a=ssrc-group:FID ' + videoSSRC3 + ' ' + rtxSSRC3);
-    lines.push('a=ssrc-group:SIM ' + videoSSRC1 + ' ' + videoSSRC2 + ' ' + videoSSRC3);
-    offer.sdp = lines.join('\r\n') + '\r\n';
-
-    var offer2 = {
-        type: 'offer',
-        sdp: offer.sdp,
-    };
-    offer2.sdp = offer2.sdp.replace('a=ssrc-group:SIM ' + videoSSRC1 + ' ' + videoSSRC2 + ' ' + videoSSRC3 + '\r\n', '');
-
-    offer2.sdp = offer2.sdp.replace('a=ssrc:' + videoSSRC1 + ' msid:' + msid[2], 'a=ssrc:' + videoSSRC1 + ' msid:low low');
-    offer2.sdp = offer2.sdp.replace('a=ssrc:' + rtxSSRC1 + ' msid:' + msid[2], 'a=ssrc:' + rtxSSRC1 + ' msid:low low');
-
-    offer2.sdp = offer2.sdp.replace('a=ssrc:' + videoSSRC2 + ' msid:' + msid[2], 'a=ssrc:' + videoSSRC2 + ' msid:mid mid');
-    offer2.sdp = offer2.sdp.replace('a=ssrc:' + rtxSSRC2 + ' msid:' + msid[2], 'a=ssrc:' + rtxSSRC2 + ' msid:mid mid');
-
-    offer2.sdp = offer2.sdp.replace('a=ssrc:' + videoSSRC3 + ' msid:' + msid[2], 'a=ssrc:' + videoSSRC3 + ' msid:hi hi');
-    offer2.sdp = offer2.sdp.replace('a=ssrc:' + rtxSSRC3 + ' msid:' + msid[2], 'a=ssrc:' + rtxSSRC3 + ' msid:hi hi');
-    await Promise.all([
-        pc1.setLocalDescription(offer),
-        pc2.setRemoteDescription(offer2),
-    ]);
-
-    state = "set description";
-
-    const answer = await pc2.createAnswer();
-
-    state = "got answer";
-
-    await Promise.all([
-        pc2.setLocalDescription(answer),
-        pc1.setRemoteDescription(answer),
-    ]);
-
-    state = "set description 2";
+    await setupCall(pc1, pc2);
 
     await low.play();
     state = "video low plays";
diff --git a/LayoutTests/webrtc/video-addLegacyTransceiver.html b/LayoutTests/webrtc/video-addLegacyTransceiver.html
deleted file mode 100644
index e1c227c..0000000
--- a/LayoutTests/webrtc/video-addLegacyTransceiver.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!doctype html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>Testing basic video exchange from offerer to receiver</title>
-        <script src="../resources/testharness.js"></script>
-        <script src="../resources/testharnessreport.js"></script>
-    </head>
-    <body>
-        <video id="video" autoplay=""></video>
-        <canvas id="canvas" width="640" height="480"></canvas>
-        <script src ="routines.js"></script>
-        <script>
-if (window.testRunner)
-    testRunner.setWebRTCUnifiedPlanEnabled(false);
-
-test(() => {
-    assert_equals(Object.keys(RTCRtpTransceiver.prototype).indexOf("currentDirection"), -1, "No currentDirection if unified plan is off");
-}, "Expose currentDirection only for unified plan");
-
-promise_test((test) => {
-    var pc = new RTCPeerConnection();
-    pc.addTransceiver("video");
-
-    return pc.createOffer().then((offer) => {
-        assert_true(offer.sdp.indexOf("mid:video") !== -1);
-        assert_true(offer.sdp.indexOf("a=recvonly") !== -1);
-
-        pc.addTransceiver("audio");
-        return pc.createOffer();
-    }).then((offer) => {
-        assert_true(offer.sdp.indexOf("mid:audio") !== -1);
-    });
-}, "Setting up calls with addTransceiver but with no track");
-
-promise_test((test) => {
-    if (window.testRunner)
-        testRunner.setUserMediaPermission(true);
-
-    return navigator.mediaDevices.getUserMedia({ video: true }).then((stream) => {
-        var pc = new RTCPeerConnection();
-        pc.addTransceiver("video");
-        pc.getSenders()[0].replaceTrack(stream.getVideoTracks()[0]);
-
-        return pc.createOffer().then((offer) => {
-            assert_true(offer.sdp.indexOf("mid:video") !== -1);
-            // Replacing the track is not done yet so we still set it as a recvonly.
-            assert_true(offer.sdp.indexOf("a=recvonly") !== -1);
-        });
-    });
-}, "Setting up calls with addTransceiver with a track");
-
-function testImage()
-{
-    canvas.width = video.videoWidth;
-    canvas.height = video.videoHeight;
-    canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
-
-    imageData = canvas.getContext('2d').getImageData(10, 325, 250, 1);
-    data = imageData.data;
-
-    var index = 20;
-    assert_true(data[index] < 100);
-    assert_true(data[index + 1] < 100);
-    assert_true(data[index + 2] < 100);
-
-    index = 80;
-    assert_true(data[index] > 200);
-    assert_true(data[index + 1] > 200);
-    assert_true(data[index + 2] > 200);
-
-    index += 80;
-    assert_true(data[index] > 200);
-    assert_true(data[index + 1] > 200);
-    assert_true(data[index + 2] < 100);
-}
-
-promise_test((test) => {
-    if (window.testRunner)
-        testRunner.setUserMediaPermission(true);
-
-    return navigator.mediaDevices.getUserMedia({ video: true}).then((stream) => {
-        return new Promise((resolve, reject) => {
-            createConnections((firstConnection) => {
-                var track = stream.getVideoTracks()[0];
-                firstConnection.addTransceiver("video");
-                return firstConnection.getSenders()[0].replaceTrack(stream.getVideoTracks()[0]);
-            }, (secondConnection) => {
-                secondConnection.ontrack = (trackEvent) => {
-                    resolve(trackEvent.streams[0]);
-                };
-            });
-            setTimeout(() => reject("Test timed out"), 5000);
-        });
-    }).then((stream) => {
-        video.srcObject = stream;
-        return video.play();
-    }).then(() => {
-        testImage();
-    });
-}, "Basic video exchange set up with addTransceiver");
-
-        </script>
-    </body>
-</html>
diff --git a/LayoutTests/webrtc/video-with-receiver.html b/LayoutTests/webrtc/video-with-receiver.html
deleted file mode 100644
index 63bceef..0000000
--- a/LayoutTests/webrtc/video-with-receiver.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!doctype html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>Testing basic video exchange from offerer to receiver</title>
-        <script src="../resources/testharness.js"></script>
-        <script src="../resources/testharnessreport.js"></script>
-    </head>
-    <body>
-        <video id="video" autoplay=""></video>
-        <canvas id="canvas" width="640" height="480"></canvas>
-        <script src ="routines.js"></script>
-        <script>
-video = document.getElementById("video");
-canvas = document.getElementById("canvas");
-
-if (window.testRunner)
-    testRunner.setWebRTCUnifiedPlanEnabled(false);
-
-function testImage()
-{
-    canvas.width = video.videoWidth;
-    canvas.height = video.videoHeight;
-    canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
-
-    imageData = canvas.getContext('2d').getImageData(10, 325, 250, 1);
-    data = imageData.data;
-
-    var index = 20;
-    assert_true(data[index] < 100);
-    assert_true(data[index + 1] < 100);
-    assert_true(data[index + 2] < 100);
-
-    index = 80;
-    assert_true(data[index] > 200);
-    assert_true(data[index + 1] > 200);
-    assert_true(data[index + 2] > 200);
-
-    index += 80;
-    assert_true(data[index] > 200);
-    assert_true(data[index + 1] > 200);
-    assert_true(data[index + 2] < 100);
-}
-
-promise_test((test) => {
-    if (window.testRunner)
-        testRunner.setUserMediaPermission(true);
-
-    return navigator.mediaDevices.getUserMedia({ video: true}).then((stream) => {
-        return new Promise((resolve, reject) => {
-            createConnections((firstConnection) => {
-                firstConnection.addTrack(stream.getVideoTracks()[0], stream);
-            }, (secondConnection) => {
-                resolve(secondConnection.addTransceiver("video").receiver.track);
-            });
-            setTimeout(() => reject("Test timed out"), 5000);
-        });
-    }).then((track) => {
-        video.srcObject = new MediaStream([track]);
-        return waitFor(500);
-    }).then(() => {
-        return video.play();
-    }).then(() => {
-        testImage();
-    });
-}, "Basic video exchange");
-        </script>
-    </body>
-</html>
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 2f5efc1..b28fcb6 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,13 @@
+2019-10-09  youenn fablet  <youenn@apple.com>
+
+        Remove testRunner.setWebRTCUnifiedPlanEnabled
+        https://bugs.webkit.org/show_bug.cgi?id=202700
+
+        Reviewed by Eric Carlson.
+
+        * WebProcess/InjectedBundle/InjectedBundle.cpp:
+        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
+
 2019-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         REGRESSION(r250597): [GTK][WPE] 2.27.1 shows HTML content as text/plain in custom protocols when passing a charset in content type
diff --git a/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp b/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp
index 691f1aa..31bdd5e 100644
--- a/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp
+++ b/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp
@@ -235,8 +235,6 @@
 #if ENABLE(WEB_RTC)
     if (preference == "WebKitWebRTCMDNSICECandidatesEnabled")
         RuntimeEnabledFeatures::sharedFeatures().setWebRTCMDNSICECandidatesEnabled(enabled);
-    if (preference == "WebKitWebRTCUnifiedPlanEnabled")
-        RuntimeEnabledFeatures::sharedFeatures().setWebRTCUnifiedPlanEnabled(enabled);
 #endif
 
     if (preference == "WebKitIsSecureContextAttributeEnabled") {
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index e6402a7..2c07f7a 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,14 @@
+2019-10-09  youenn fablet  <youenn@apple.com>
+
+        Remove testRunner.setWebRTCUnifiedPlanEnabled
+        https://bugs.webkit.org/show_bug.cgi?id=202700
+
+        Reviewed by Eric Carlson.
+
+        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+        * WebKitTestRunner/InjectedBundle/TestRunner.h:
+
 2019-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         REGRESSION(r250597): [GTK][WPE] 2.27.1 shows HTML content as text/plain in custom protocols when passing a charset in content type
diff --git a/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl b/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
index 09ea97a..8c97c7b 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
+++ b/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
@@ -360,7 +360,6 @@
     void abortModal();
 
     void setWebRTCMDNSICECandidatesEnabled(boolean value);
-    void setWebRTCUnifiedPlanEnabled(boolean value);
     void setCustomUserAgent(DOMString userAgent);
 
     void setWebAPIStatisticsEnabled(boolean value);
diff --git a/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp b/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
index 46131cc..5fea83d 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
+++ b/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
@@ -435,13 +435,6 @@
     WKBundleOverrideBoolPreferenceForTestRunner(injectedBundle.bundle(), injectedBundle.pageGroup(), key.get(), enabled);
 }
 
-void TestRunner::setWebRTCUnifiedPlanEnabled(bool enabled)
-{
-    WKRetainPtr<WKStringRef> key = adoptWK(WKStringCreateWithUTF8CString("WebKitWebRTCUnifiedPlanEnabled"));
-    auto& injectedBundle = InjectedBundle::singleton();
-    WKBundleOverrideBoolPreferenceForTestRunner(injectedBundle.bundle(), injectedBundle.pageGroup(), key.get(), enabled);
-}
-
 void TestRunner::setCustomUserAgent(JSStringRef userAgent)
 {
     WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("SetCustomUserAgent"));
diff --git a/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h b/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
index ff9f972..5f23a80 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
+++ b/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
@@ -131,7 +131,6 @@
     void setEncryptedMediaAPIEnabled(bool);
     void setMediaDevicesEnabled(bool);
     void setWebRTCMDNSICECandidatesEnabled(bool);
-    void setWebRTCUnifiedPlanEnabled(bool);
     void setCustomUserAgent(JSStringRef);
     void setWebAPIStatisticsEnabled(bool);