New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 836871 link

Starred by 4 users

Issue metadata

Status: Fixed
Owner:
Closed: Jul 27
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Feature



Sign in to add a comment

WebRTC tests are leaking heavy resources

Project Member Reported by hbos@chromium.org, Apr 25 2018

Issue description

In both external/wpt/webrtc/ and fast/peerconnection/ we are consistently leaking RTCPeerConnection and MediaStreamTrack resources.

PCs need to be closed with close() and tracks need to stopped with stop() or else they leak, even if there is no reference to them.
These resources may not be GC'd even if we navigate to another test page, I think?

In Chrome we can hit the RTCPeerConnection limit and tests flakily fail due to constructor throwing an exception. Other flakes may or may not be possible.

According to fippo, the external/wpt/webrtc/ leakages causes problems on Travis, and is even worse when running WPT on Edge.

We could wrap promise_test, RTCPeerConnection creation and getUserMedia calls in something that attaches test cleanup logic.
Here's an example: https://github.com/webrtc/adapter/blob/master/test/getusermedia-mocha.js
 
actually talking to hbos made me try to adapt the approach from the mocha stuff:
https://github.com/fippo/web-platform-tests/commit/235da921f2cf21edc5e754921636849e2b684f0d
Basically this creates a function webrtc_test which wraps async_test and does a t.add_cleanup that releases all the GUM streams.

https://github.com/fippo/web-platform-tests/commit/235da921f2cf21edc5e754921636849e2b684f0d#diff-634634d73ca5b5f5994a9e2c79e22808R62
shows a very simple test that executes this and magically releases the GUM stream as shown by the console.log.

I think wrapping RTCPeerConnection in a similar is just as easy -- we already know how to do that safely from adapter.

I would greatly reduce the boilerplate of the tests to do so. If we can pull this off the 
  promise_test(async t => {
    const {sender} = await addTrackFromGetUserMedia(t);
    assert_true(sender instanceof RTCRtpSender,
      'Expect sender to be instance of RTCRtpSender');
  }, 'addTrack returns an RTCRtpSender');
from https://github.com/w3c/web-platform-tests/pull/10566 becomes much easier:
  webrtc_test(async_t => {
    const pc = new RTCPeerConnection();
    const stream = await navigator.mediaDevices.getUserMedia({audio: true});
    const sender = pc.addTrack(stream.getTracks()[0], stream);
    assert_true(sender instanceof RTCRtpSender,
      'Expect sender to be instance of RTCRtpSender');
  });

This would need no helper functions which generally increase the hurdle when trying to understand a test. Also this reduces the risk of forgetting to close a peerconnection or release a getUserMedia stream -- this has been an issue in the past, Nils @ mozilla filed an issue.
Labels: -Type-Bug Type-Feature
ok, done:
https://github.com/fippo/web-platform-tests/blob/wip/webrtc/RTCPeerConnection-addTrack.https.html

i got a bit confused as apparently mixing test() and promise_test() was showing unexpected peerconnections. If we want to move forward on this we need to make sure that we talk to someone who understands testharness about whether it makes guarantees that only a single test will be executed at a time.

Comment 3 by hta@chromium.org, Apr 25 2018

I found a statement in the testharness.js documentation some time ago that asserted that async_test would be executed overlapping with other tests, while promise_test would not. And the crash I was working around (caused by the overlap of tests) disappeared when I changed to promise_test, so I think it was true.

from foolip: test is synchronous, async_test as asynchronous and run in parallel, promise_test is asynchronous and runs serially
-- for webrtc we probably want promise_test.

Note for me: the current wrapper might end up executing the setup code sequentially. Needs to be checked if that is ok.
idea from jib: use this wrapper to just assert that clean up happens.

the main argument against doing a magic cleanup is that magic is bad when people try to copy the magic without understanding it. (cargo cult anyone?)

Comment 6 by hta@chromium.org, Apr 26 2018

Cc: soares.c...@cosmosoftware.io
that would be a framework that does a test of the test?

how meta.

The spec doesn't require that non-closed PCs or tracks are left lying around forever, so it would be appropriate to test that they're gone, not that "close" had been called.

It would also require that we fix all the tests when switching to the wrapper.

Adding soareschen@ to CC on bug.
Agree that this need to be fixed. The biggest challenge is that this is a significant refactoring as it touches almost every test out there, and we need to make sure that the test results remain the same after refactoring. Dealing with rebases on new commits during refactoring is also problematic. I did a pull request back in December here: https://github.com/w3c/web-platform-tests/pull/8542, but it quickly accumulate conflicts and I lost it after getting occupied with some other matters. :(

To fix this we need to first agree on a convention for cleaning up, e.g.:
- webrtc_test wrapper on promise_test
- makePeerConnection(t, options) wrapper on PeerConnection constructor
- Manual cleanup with t.add_cleanup
- etc

Next we need a transition plan on how refactor existing tests.
- Many small PRs vs one big PR?
- This could cause conflicts on the other unmerged PRs out there.
- The convention need to be documented so that new tests will use the same pattern.

Would be great if someone can lead the refactoring effort.
I think we need to decide whether this is a good test:

  promise_test(async () => {
    const caller = new RTCPeerConnection();
    const callee = new RTCPeerConnection();
    const stream = await navigator.mediaDevices.getUserMedia({audio:true});
    const [track] = stream.getTracks();
    const sender = caller.addTrack(track, stream);
    await doSignalingHandshake(caller, callee);
    const statsReport = await sender.getStats();
    validateStatsReport(statsReport);
    assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
  }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats');
(from https://github.com/w3c/web-platform-tests/blob/master/webrtc/RTCRtpSender-getStats.https.html#L53)

it lacks cleanup but is very readable. And without looking at the CL I doubt any of the reviewers wanted cleanup.

I would prefer this style over
  promise_test(async (t) => {
    const caller = new RTCPeerConnection();    
    const callee = new RTCPeerConnection();
    const stream = await navigator.mediaDevices.getUserMedia({audio:true});
    const [track] = stream.getTracks();
    t.add_cleanup(() => {
      caller.close();
      callee.close();
      track.stop();
    });

    const sender = caller.addTrack(track, stream);
    await doSignalingHandshake(caller, callee);
    const statsReport = await sender.getStats();
    validateStatsReport(statsReport);
    assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
  }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats');

I think its possible to do a jscodeshift codemod that would add cleanup like this:
  promise_test(async (t) => {
    const caller = new RTCPeerConnection();    
    t.add_cleanup(() => caller.close());
    const callee = new RTCPeerConnection();
    t.add_cleanup(() => callee.close());
    const stream = await navigator.mediaDevices.getUserMedia({audio:true});
    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
    const [track] = stream.getTracks();

    const sender = caller.addTrack(track, stream);
    await doSignalingHandshake(caller, callee);
    const statsReport = await sender.getStats();
    validateStatsReport(statsReport);
    assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
  }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats');
but that is quite ugly.

I don't think this would work:
  promise_test(async (t) => {

    const caller = new RTCPeerConnection();
    const callee = new RTCPeerConnection();
    const stream = await navigator.mediaDevices.getUserMedia({audio:true});
    const [track] = stream.getTracks();
    const sender = caller.addTrack(track, stream);
    await doSignalingHandshake(caller, callee);
    const statsReport = await sender.getStats();
    validateStatsReport(statsReport);
    assert_stats_report_has_stats(statsReport, ['outbound-rtp']);

    caller.close();
    callee.close();
    track.stop();
  }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats');

as this would leak resources if the assertion fails.

Comment 9 by hbos@chromium.org, Apr 26 2018

Owner: hbos@chromium.org
Status: Assigned (was: Available)
I will be adding a lot of new tests for transceivers very soon. I could try to come up with a suggestion for how to do cleanup related to that and if we're in agreement it could be treated as a canonical example of how to do it for other tests.

I would prefer explicit "clean this up" such as...
  const caller = new RTCPeerConnection();
  t.add_cleanup(() => caller.close());
... or light weight helper methods to more heavy APIs obscuring what happens behind the scenes. What a test does should be as explicit as possible without being bloated.

I do not like the fact that if you forget to clean something up, there is nothing that fails. "Tests for the tests", huh...
I wonder if it would be possible to run these tests with a flag that made it crash if WebRTC resources are leaked without introducing new JS APIs.

Comment 10 by hbos@chromium.org, Apr 26 2018

I suggest converting one or a few tests per PR once we've figured out what we want to do.

Comment 11 by hbos@chromium.org, Apr 26 2018

There is code inside of the RTCPeerConnection that is called when GC attempts to clean it up that says "no, I'm not ready to be cleaned up because I'm not closed yet". The case should be similar for MediaStreamTrack and stop().

If we're lucky, this code is triggered between every test page (don't know, have to check), and it would be trivial to say "if ensurePCsAreClosedOnGC flag is on, CHECK that we are closed". And we run webrtc tests with this otherwise false flag. What do you think about this crazy idea, hta@?

Comment 12 by hta@chromium.org, Apr 26 2018

RTCPeerConnection-many would break, it does GC internally :-)
I was thinking of fixing the underlying problem .... "if there are no references to me, and I'm asked if I'm closed, reply "yes" and close myself".

Comment 13 by hbos@chromium.org, Apr 26 2018

Even if there are no references to the PC, there could be event listeners wired up to it. The event listeners cannot be cleared, and if an event fires that would "revive" the PC: Something happens (event fires), and the event carries with it a reference to it. Perhaps ontrack, ondatachannel or oniceconnectionstatechange will happen.

Nothing referencing the PC is not sufficient to say that the application is done with it. Perhaps we only want to close the PC if oniceconnectionstatechange fires with state "disconnected"?

let pc = new RTCPeerConnection();
pc.oniceconnectionstatechange = e => {
  let targetPc = e.target;
  if (targetPc.iceconnnectionstate == 'disconnected')
    targetPc.close();
}
/* set up other event listeners that might be interesting */
/* set up a connection with pc */
// Only do stuff in response to events so we don't need the pc reference anymore
// despite not being done with the PC.
pc = null;

Comment 14 by hbos@chromium.org, Apr 26 2018

Well ontrack etc won't fire without setRemoteDescription, but we can always monitor if the connection gets disconnected, and until that happens we may be sending/receiving audio/video and don't need to have any explicit reference to the PC in the application.

Comment 15 by hbos@chromium.org, Apr 26 2018

Hmh, sending/receiving audio/video might mean that there is still a reference to the PC (e.g. <video> -> track -> PC), but you might set up a connection that doesn't do anything interesting except for monitoring when the connection breaks. We could say that we don't care about such uses, but I'm not sure what the spec says?

Comment 16 by hta@webrtc.org, Apr 27 2018

I would count attached handlers as "references" for this purpose.

If we're sending / receiving audio/video, there's attached tracks, which should also count as "references"; if there's none, the audio/video isn't doing anything useful anyway, so why not close?

Of course a group of handlers & tracks & PCs with internal references need to be collected - that's what mark-and-sweep garbage collectors are good at, but it's hard for any single object to make decisions on that basis.

Comment 17 by hbos@chromium.org, Apr 27 2018

If event handlers count as references then clearing all handlers suddenly become part of cleanup logic, just close() wouldn't cut it, that would be a regression.

// This would leak.
let pc = new RTCPeerConnection();
pc.ontrack = e => {};  // Handler has reference.
pc.close();
pc = null;

I think we need to either...
1. Be able to tell the difference between "forgot to call close" and legitimate cases where events might fire and we do want to listen for them (e.g. waiting for iceconnectionstatechange).
2. Ensure that tests don't leak.

If we solve 1) we ensure no web page leaks and 2) would not be needed, but I don't think there is a spec-compliant way to do this (except for edge cases, i.e. we know ontrack won't fire if nothing can call setRemoteDescription, etc).

Short of solving 1), my suggestion for 2) is still to have a flag that makes the layout test crash if unable to GC the PC.

Comment 18 by hta@webrtc.org, Apr 27 2018

ou're right. Handlers can't be considered to have references to the PC, or Bad Things Happen.
So we can't auto-close a PC unless it can't cause legitimate events on its existing handlers.

And the pc even has an onclose handler, so closing in gc would be observable gc, which is not considered legitimate.

Comment 19 by hta@webrtc.org, May 2 2018

Back to the issue's subject:
My favorite solution is to do something like this:

Define webrtc_test as a subclass of promise_test (ok, it's not a class, but let's imagine...). The test would allow the following code:

webrtc_test(async t => {
   pc = t.getPeerConnection();
   track = t.getTrack();
   // do stuff
}, 'Test that doesn't test constructors for RTCPeerConnection or MediaStreamTrack');


and "pc" would close and "track" would be stopped, but objects created by direct operations under "do stuff" would not be affected, and the APIs for "pc" and "track" would remain unchanged.

I think that's the least invasive way of rewriting the tests, even though it requires us to rewrite all of them a bit.

Comment 20 by hbos@chromium.org, May 2 2018

Considering this only works with objects created initially, so there still is a need for an API to mark something to be cleaned up, and different tests have different number of PCs and this obscures what's going on, how about a method that is called?

let pc1 = t.needsCleanup(new RTCPeerConnection());
let pc2 = t.needsCleanup(new RTCPeerConnection());
let stream = await t.needsCleanup(navigator.mediaDevices.getUserMedia({audio:true});
pc1.addTrack(stream.getTracks()[0]);
pc2.ontrack = e => {
  let remoteTrack = t.needsCleanup(e.track);
  ...
};
... O/A exchange ...

This does not obscure what the test is doing, does not assume how many PCs or tracks we want, and makes the logic the same whether it's a local or remote track.

t.needsCleanup(arg) can be defined as follows:
  - If arg instanceof RTCPeerConnection, add cleanup for closing it.
  - If arg instanceof MediaStream, add cleanup for looping through tracks and stopping them.
  - If arg instanceof MediaStreamTrack, add cleanup for stopping it.
  - If arg is a promise, run the steps above for the value that the promise is resolved with.

Comment 21 by hbos@chromium.org, May 2 2018

t.getBlah() would not work for remote tracks is why we still need an explicit "clean this up" method.

Comment 22 by fi...@appear.in, May 7 2018

so I have codemods to do transform
promise_test(async t => {
  const pc = new RTCPeerConnection(opts);
  // do something
}, '...);

to either https://github.com/fippo/webrtc-codemods/blob/wpt/wpt-rtcpeerconnection-no-helpers:
promise_test(async t => {
  const pc = new RTCPeerConnection(opts);
  t.add_cleanup(() => pc.stop());
  // do something
}, '...');

or using a helper (https://github.com/fippo/webrtc-codemods/blob/wpt/wpt-rtcpeerconnection) 
promise_test(async t => {
   pc = t.getRTCPeerConnection(opts);
}, '...');


We have a minor issue because some of the tests don't pass t but we can have another codemod to fix that (find all promise_test or async tests which have an empty list of arguments)
Project Member

Comment 23 by bugdroid1@chromium.org, May 8 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ae6a05c5388e96c3e430d385c38e53e8bd61760d

commit ae6a05c5388e96c3e430d385c38e53e8bd61760d
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Tue May 08 06:47:32 2018

webrtc wpt: pass test in promise_test and async_test

passes the test argument in promise_test and async_test
so it can be used to add cleanup.
Change done with a jscodeshift codemod that detects
there were no arguments to promise_test (or async_test):

export default function transformer(file, api) {
  const j = api.jscodeshift;
  return j(file.source)
    // .find(j.CallExpression)
    .find(j.CallExpression, {callee: {type: 'Identifier', name: 'promise_test'}})
    .forEach(path => {
        if (path.value.arguments[0].params.length === 0) {
          path.value.arguments[0].params.push(j.identifier('t'));
        }
    })
    .toSource();
};

BUG= 836871 

Change-Id: Ie7dd7fb0dd8a4da6c4c00f3616fd41d1d47854ef
Reviewed-on: https://chromium-review.googlesource.com/1047674
Reviewed-by: Harald Alvestrand <hta@chromium.org>
Commit-Queue: Harald Alvestrand <hta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556711}
[modify] https://crrev.com/ae6a05c5388e96c3e430d385c38e53e8bd61760d/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getIdentityAssertion.html
[modify] https://crrev.com/ae6a05c5388e96c3e430d385c38e53e8bd61760d/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpReceiver-getContributingSources.https.html
[modify] https://crrev.com/ae6a05c5388e96c3e430d385c38e53e8bd61760d/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpReceiver-getStats.https.html

Project Member

Comment 24 by bugdroid1@chromium.org, May 8 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/3055ddf805d4bd4923d9702a698a8556a91874f9

commit 3055ddf805d4bd4923d9702a698a8556a91874f9
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Tue May 08 14:43:46 2018

webrtc wpt: pass test function in more tests

passes the test argument in promise_test and async_test
so it can be used to add cleanup.

followup on
  https://chromium-review.googlesource.com/c/chromium/src/+/1047674
using the same codemod but a better, non-regexp way to extract the
script tag content.

BUG= 836871 

Change-Id: I41905ce25e22121a6e8b53d37af86b073e020b5c
Reviewed-on: https://chromium-review.googlesource.com/1049865
Reviewed-by: Harald Alvestrand <hta@chromium.org>
Commit-Queue: Harald Alvestrand <hta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556795}
[modify] https://crrev.com/3055ddf805d4bd4923d9702a698a8556a91874f9/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCDTMFSender-insertDTMF.https.html
[modify] https://crrev.com/3055ddf805d4bd4923d9702a698a8556a91874f9/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCIceTransport.html
[modify] https://crrev.com/3055ddf805d4bd4923d9702a698a8556a91874f9/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-canTrickleIceCandidates.html
[modify] https://crrev.com/3055ddf805d4bd4923d9702a698a8556a91874f9/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https.html
[modify] https://crrev.com/3055ddf805d4bd4923d9702a698a8556a91874f9/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-peerIdentity.html
[modify] https://crrev.com/3055ddf805d4bd4923d9702a698a8556a91874f9/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html
[modify] https://crrev.com/3055ddf805d4bd4923d9702a698a8556a91874f9/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html
[modify] https://crrev.com/3055ddf805d4bd4923d9702a698a8556a91874f9/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpSender-getStats.https.html

CL for the t.add_cleanup(() => pc.close()) way:
https://chromium-review.googlesource.com/#/c/chromium/src/+/1049983
Leaving it as WIP until we agree this is the direction we want to move, this will likely require a rebase due to its size (51 files changed, 395 insertions(+), 45 deletions(-))

This sometimes adds an extra blank line between the new RTCPeerConnection and the add_cleanup. This happens when the new statement is the last in a block, I haven't found a way around this yet. Can do manual replace before merging.
Also this sometimes eats dangling blank lines at the end of functions but that seems ok.

The codemod can be run repeatedly and will ignore any functions that already have a t.add_cleanup. I should probably change this to "does not call pc.close" but this seems good enough.
Great. Thanks fippo! This looks good to me.

Comment 27 by hbos@chromium.org, May 14 2018

The CL adds "t.add_cleanup(() => pc.close());" after PC creations.
That approach looks good to me too. I'll formally review the CL in a bit.

Comment 28 by hbos@chromium.org, May 14 2018

Thanks fippo :) cool tool to be able to replace all of them like that
the failures are pretty odd, for example from https://logs.chromium.org/v/?s=chromium%2Fbuildbucket%2Fcr-buildbucket.appspot.com%2F8946565084924971648%2F%2B%2Fsteps%2Fwebkit_layout_tests_on_Intel_GPU_on_Mac__with_patch__on_Mac-10.12.6%2F0%2Flogs%2Foutdir_json%2F0

  "8/layout-test-results/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-actual.txt": {
    "contents[ :512]": "This is a testharness.js-based test.\nPASS setRemoteDescription with invalid type and invalid SDP should reject with TypeError\nFAIL setRemoteDescription() with invalid SDP and stable state should reject with InvalidStateError assert_throws: function \"function() { throw e }\" threw object \"OperationError: Failed to parse SessionDescription. invalid Expect line: v=\" that is not a DOMException InvalidStateError: property \"code\" is equal to 0, expected 11\nFAIL Calling setRemoteDescription() again after one round ",
    "contents[-512:]": "nalingstatechange event for Calling setRemoteDescription() again after one round of remote-offer/local-answer should succeed assert_equals: New signaling state is different from expected. expected \"have-remote-offer\" but got \"closed\"\nFAIL Test onsignalingstatechange event for Switching role from offerer to answerer after going back to stable state should succeed assert_equals: New signaling state is different from expected. expected \"have-remote-offer\" but got \"closed\"\nHarness: the test ran to completion.\n\n",
    "sha1": "2619ef49a1580be2cce0bff35e6678a5e3946c9f",
    "size": 1459,
    "type": "text"
  },

In particular this is odd:
New signaling state is different from expected. expected \"have-remote-offer\" but got \"closed\"\nHarness: the test ran to completion.

I could reproduce this locally and the backtrace was interesting:

    at Test.pc.onsignalingstatechange.t.step_func (http://localhost:8000/webrtc/RTCPeerConnection-helper.js:192:7)
    at Test.pc.onsignalingstatechange.t.step_func (http://localhost:8000/webrtc/RTCPeerConnection-helper.js:

https://github.com/w3c/web-platform-tests/blob/master/webrtc/RTCPeerConnection-setRemoteDescription.html#L103

The timing behaviour of executing an async test inside a promise_test is probably quite undefined. AFAICS the async test continues to run after the promise test.

Without closing the peerconnection it times out because the test itself throws inside generateOffer since in pre-transceiver behaviour createOffer is stateless and does not permanently create an m-line.

I suspect the other SLD/SRD failures are because of this too. I can not see where the 
 harness_status.message = The RTCPeerConnection's signalingState is 'closed'.
for RTCPeerConnection-iceGatheringState.html comes from.

drive-by: it does (incorrectly) assert_equals(iceTransport.gatheringState, 'complete' -- the iceTransports gatheringstate will go to complete*d*.

I don't believe this is sufficient. Preventing to leak resources requires converting all `async_test` to `promise_test`. Otherwise, all `async_test` will run at the same time which means that if there are 100 test cases, there will be 100 RTCPeerConnection instances active at the same time. I've been through that process (see https://github.com/w3c/web-platform-tests/pull/10468) and it not only requires porting from `async_test` to `promise_test` but also some changes to testharness.js (PR: https://github.com/w3c/web-platform-tests/pull/10933) and the timeout handling.

1. Convert `async_test` to `promise_test` by awaiting the "done" promise at the end: `await t.done_promise`. This fixes the problem mentioned by fippo in comment #29.
2. Add `setup({ explicit_timeout: true });` to the top of each test file to disable global timeouts. Instead, add an explicit local timeout to each test case. This is required because a `promise_test` with no explicit local timeout prevents other tests from running once the global timeout fires.

If you agree, be aware of the concerns raised in https://github.com/w3c/web-platform-tests/pull/10933 and please take part in the discussion. Furthermore, you can omit data channel related files since I've changed all of them in a pending PR: https://github.com/w3c/web-platform-tests/pull/10468 (review welcome!)
so what do we do about #29? Remove the async subtests? They test the signalingstatechange behaviour so should be in a file with that name.

Comment 33 by hta@webrtc.org, May 16 2018

The helper shouldn't be executing a test, period.
There needs to be tests that test the sequence of states (we have known bugs here), but they shouldn't be done by nesting tests.

looks like jib is taking care of this at least in one case: https://bugzilla.mozilla.org/show_bug.cgi?id=1461563
https://github.com/w3c/web-platform-tests/pull/11031

\o/
Cc: j...@mozilla.com
Project Member

Comment 37 by bugdroid1@chromium.org, May 30 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e8832df8791991c9d462bd6eac1647a2be6fba55

commit e8832df8791991c9d462bd6eac1647a2be6fba55
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Wed May 30 15:43:04 2018

webrtc wpt: remove test_state_change_event

removes test_state_change_event which initiates a "subtest" using
a shared peerconnection resource.

BUG= 836871 

Change-Id: I692bb5826c83d0d36d4169858ab2872d41c03b30
Reviewed-on: https://chromium-review.googlesource.com/1074696
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#562844}
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/TestExpectations
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-helper.js
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-answer-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-answer.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-offer-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-offer.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-pranswer-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-rollback-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-rollback.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-answer-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-answer.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-offer-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-offer.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-pranswer-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-rollback-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/virtual/webrtc-wpt-unified-plan/external/wpt/webrtc/RTCPeerConnection-createOffer-expected.txt
[modify] https://crrev.com/e8832df8791991c9d462bd6eac1647a2be6fba55/third_party/WebKit/LayoutTests/virtual/webrtc-wpt-unified-plan/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-answer-expected.txt

Comment 38 by fi...@appear.in, May 30 2018

so the remaining failure for add_cleanup is an intermittent harness failure:
https://isolateserver.appspot.com/browse?namespace=default-gzip&digest=228019b77b830c024c70bc9584576f7591ee4ce3&as=RTCPeerConnection-iceGatheringState-diff.txt

Uncaught (in promise) DOMException: The RTCPeerConnection's signalingState is 'closed'.
localPc.addEventListener.event @ RTCPeerConnection-helper.js:233
which is a in-flight addIceCandidate.

From jgrahams comment in https://github.com/web-platform-tests/wpt/pull/11031#discussion_r188749618 I think the helper would need to run in a step function to catch this and avoid flakyness.

Since I want to avoid rewriting this helper *everywhere* right now I'd suggest adding a pc.signalingState !== closed check to the helper.
Project Member

Comment 39 by bugdroid1@chromium.org, May 31 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d1b660a741bcaa40d2500bcc2bafa2f644f3f742

commit d1b660a741bcaa40d2500bcc2bafa2f644f3f742
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Thu May 31 11:54:02 2018

webrtc wpt: check signalingState before addIceCandidate

in order to avoid issues with calling addIceCandidate
when the peerconnection is closed

BUG= 836871 

Change-Id: I698f5365a4e1b72a812fbc5e3adf5e51586718a6
Reviewed-on: https://chromium-review.googlesource.com/1079550
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#563196}
[modify] https://crrev.com/d1b660a741bcaa40d2500bcc2bafa2f644f3f742/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-helper.js

replicating discussion from the big CL here. hbos found a case where the codemod added pc.close() even when the peerconnection was explicitly closed.


This is a weakness of the codemod. This happens in a couple of other places as well where the explicitly close -- easy to find by grepping for .close() | grep -v add_cleanup.

We should still have the add_cleanup for consistency as well as catching the case where an exception is thrown.

Comment 41 by hta@chromium.org, May 31 2018

pc.close is supposed to be harmless if you call it multiple times, so that shouldn't be a Big Deal.
Only issue is if the cleanup's pc.close is called before the pc.close in the test itself, but that shouldn't happen now that we're not spawning subtests, right?

all those subtests were... terminated :-)

Comment 43 by hbos@chromium.org, May 31 2018

Cleanup should always happen after the test so it should be fine.
We should always assume that some unexpected exception is thrown and aborts the test, even for operations that shouldn't fail, so adding cleanup-close is the way to go.
Project Member

Comment 44 by bugdroid1@chromium.org, Jun 8 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/69af6f380cae26764e8c82a58c145fcf3aff89d3

commit 69af6f380cae26764e8c82a58c145fcf3aff89d3
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Fri Jun 08 09:06:46 2018

webrtc wpt: add cleanup to close peerconnections

adds a pc.close() to all RTCPeerConnections in promise_test
and async_test. This is codemod-powered by this:
https://github.com/fippo/webrtc-codemods/blob/e844b2467cbb76a231c113366b2451cf248f53bc/wpt-rtcpeerconnection-no-helpers

BUG= 836871 

Change-Id: Iee84ef938bf477a55612b6012c6de464c6aea55b
Reviewed-on: https://chromium-review.googlesource.com/1049983
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#565591}
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCDTMFSender-insertDTMF.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCDataChannel-id.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCDtlsTransport-getRemoteCertificates.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCIceTransport.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-addIceCandidate.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-addTrack.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-canTrickleIceCandidates.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-connectionState.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createAnswer.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createDataChannel.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer-offerToReceive.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-iceConnectionState.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-iceGatheringState.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-ondatachannel.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-onnegotiationneeded.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-ontrack.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-peerIdentity.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-answer.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-offer.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription-rollback.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setLocalDescription.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-answer.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-offer.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-track-stats.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpParameters-codecs.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpParameters-degradationPreference.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpParameters-encodings.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpParameters-headerExtensions.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpParameters-rtcp.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpParameters-transactionId.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpReceiver-getContributingSources.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpReceiver-getStats.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpSender-getStats.https.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpSender-replaceTrack.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpSender-setParameters.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpTransceiver-setDirection.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCSctpTransport-constructor.html
[modify] https://crrev.com/69af6f380cae26764e8c82a58c145fcf3aff89d3/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCSctpTransport-maxMessageSize.html

Comment 45 by hbos@chromium.org, Jun 8 2018

Wooohooo! \o/

Comment 46 by hbos@chromium.org, Jun 8 2018

Let's do the same for track.stop()? :)
yes, GUM and track.stop is next!

Comment 48 by hbos@chromium.org, Jun 8 2018

Owner: philipp....@googlemail.com
Status: Started (was: Assigned)
^ recognition
Project Member

Comment 50 by bugdroid1@chromium.org, Jun 25 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/01de4ac266a53eaecd44565a35f8b582a4929868

commit 01de4ac266a53eaecd44565a35f8b582a4929868
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Mon Jun 25 11:16:44 2018

webrtc wpt: make getUserMedia calls await

removes the last directly promise-based usage of getUserMedia

BUG= 836871 

Change-Id: Ib0ef41b58c2fc3930d068d915cb569064db4542d
Reviewed-on: https://chromium-review.googlesource.com/1106618
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570005}
[modify] https://crrev.com/01de4ac266a53eaecd44565a35f8b582a4929868/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html

Project Member

Comment 51 by bugdroid1@chromium.org, Jun 27 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ce98f56501ffbd7258eafd0451bbcd57a5eb2092

commit ce98f56501ffbd7258eafd0451bbcd57a5eb2092
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Wed Jun 27 11:07:30 2018

webrtc wpt: stop tracks returned from getUserMedia

stops tracks acquired from getUserMedia

BUG= 836871 

Change-Id: I828189da35b0c842078cdd4c1b4b38f7e7fbf355
Reviewed-on: https://chromium-review.googlesource.com/1113450
Reviewed-by: Henrik Boström <hbos@chromium.org>
Commit-Queue: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570727}
[modify] https://crrev.com/ce98f56501ffbd7258eafd0451bbcd57a5eb2092/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html
[modify] https://crrev.com/ce98f56501ffbd7258eafd0451bbcd57a5eb2092/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-addTrack.https.html
[modify] https://crrev.com/ce98f56501ffbd7258eafd0451bbcd57a5eb2092/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html
[modify] https://crrev.com/ce98f56501ffbd7258eafd0451bbcd57a5eb2092/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html
[modify] https://crrev.com/ce98f56501ffbd7258eafd0451bbcd57a5eb2092/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpReceiver-getStats.https.html
[modify] https://crrev.com/ce98f56501ffbd7258eafd0451bbcd57a5eb2092/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpSender-getStats.https.html

Comment 52 by hbos@chromium.org, Jun 27 2018

\o/

Anything else that needs to be done before this bug is Fixed?
there is a pending CL and there are still tests doing this:

const localStreams = await Promise.all([
  navigator.mediaDevices.getUserMedia({audio: true})
  navigator.mediaDevices.getUserMedia({audio: true})
]);
(or soon getNoiseStream... leaking captureStream is going to be fun...)
Project Member

Comment 54 by bugdroid1@chromium.org, Jul 13

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/bb69a6a24a7af33d40a0956a12942538d28d993a

commit bb69a6a24a7af33d40a0956a12942538d28d993a
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Fri Jul 13 07:46:00 2018

webrtc wpt: remove generateMediaStreamTrack usage

removes most usage of generateMediaStreamTrack in favor of
await-ing tracks from getUserMedia and stopping them)

BUG= 836871 

Change-Id: Id84f6cb6b3537faf2bb83332c5d7993550246581
Reviewed-on: https://chromium-review.googlesource.com/1117069
Reviewed-by: Henrik Boström <hbos@chromium.org>
Commit-Queue: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#574855}
[modify] https://crrev.com/bb69a6a24a7af33d40a0956a12942538d28d993a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCDTMFSender-insertDTMF.https.html
[modify] https://crrev.com/bb69a6a24a7af33d40a0956a12942538d28d993a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-addTrack.https-expected.txt
[modify] https://crrev.com/bb69a6a24a7af33d40a0956a12942538d28d993a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-addTrack.https.html
[modify] https://crrev.com/bb69a6a24a7af33d40a0956a12942538d28d993a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https-expected.txt
[modify] https://crrev.com/bb69a6a24a7af33d40a0956a12942538d28d993a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.https.html
[modify] https://crrev.com/bb69a6a24a7af33d40a0956a12942538d28d993a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https-expected.txt
[modify] https://crrev.com/bb69a6a24a7af33d40a0956a12942538d28d993a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html
[modify] https://crrev.com/bb69a6a24a7af33d40a0956a12942538d28d993a/third_party/WebKit/LayoutTests/virtual/webrtc-wpt-unified-plan/external/wpt/webrtc/RTCPeerConnection-addTrack.https-expected.txt

What's left to do here?
Project Member

Comment 56 by bugdroid1@chromium.org, Jul 17

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ec87d1ca1b51645100ee98b73cc38600d6d71447

commit ec87d1ca1b51645100ee98b73cc38600d6d71447
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Tue Jul 17 17:12:50 2018

webrtc wpt: rename RTCRtpSender-replaceTrack.html to RTCRtpSender-replaceTrack.https.html

BUG= 836871 

Change-Id: If259500c8f226ff198586f56a3d711565791b488
Reviewed-on: https://chromium-review.googlesource.com/1140433
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575695}
[rename] https://crrev.com/ec87d1ca1b51645100ee98b73cc38600d6d71447/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpSender-replaceTrack.https-expected.txt
[rename] https://crrev.com/ec87d1ca1b51645100ee98b73cc38600d6d71447/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html

Project Member

Comment 57 by bugdroid1@chromium.org, Jul 24

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4bd63c298d4a3933606c6ecdf2c2e1245747d8c6

commit 4bd63c298d4a3933606c6ecdf2c2e1245747d8c6
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Tue Jul 24 08:14:00 2018

webrtc wpt: close RTCPeerConnection in generateAnswer helper

BUG= 836871 

Change-Id: Idd0495f538777469043fec30993f5e9399d62c68
Reviewed-on: https://chromium-review.googlesource.com/1140676
Reviewed-by: Henrik Boström <hbos@chromium.org>
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Cr-Commit-Position: refs/heads/master@{#577457}
[modify] https://crrev.com/4bd63c298d4a3933606c6ecdf2c2e1245747d8c6/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-helper.js

Project Member

Comment 60 by bugdroid1@chromium.org, Jul 27

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2fd35dd9772161d8e232d486afe551941a252698

commit 2fd35dd9772161d8e232d486afe551941a252698
Author: Philipp Hancke <philipp.hancke@googlemail.com>
Date: Fri Jul 27 12:25:55 2018

webrtc wpt: remove generateMediaStreamTrack, add cleanup after getNoiseStream

BUG= 836871 

Change-Id: I278b34cb305a13a029e84eaaeec57144e2858678
Reviewed-on: https://chromium-review.googlesource.com/1149364
Reviewed-by: Henrik Boström <hbos@chromium.org>
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Cr-Commit-Position: refs/heads/master@{#578611}
[modify] https://crrev.com/2fd35dd9772161d8e232d486afe551941a252698/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-addTransceiver.https-expected.txt
[modify] https://crrev.com/2fd35dd9772161d8e232d486afe551941a252698/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-addTransceiver.https.html
[modify] https://crrev.com/2fd35dd9772161d8e232d486afe551941a252698/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-helper.js
[modify] https://crrev.com/2fd35dd9772161d8e232d486afe551941a252698/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html
[modify] https://crrev.com/2fd35dd9772161d8e232d486afe551941a252698/third_party/WebKit/LayoutTests/external/wpt/webrtc/interfaces.https-expected.txt
[modify] https://crrev.com/2fd35dd9772161d8e232d486afe551941a252698/third_party/WebKit/LayoutTests/external/wpt/webrtc/interfaces.https.html
[modify] https://crrev.com/2fd35dd9772161d8e232d486afe551941a252698/third_party/WebKit/LayoutTests/virtual/webrtc-wpt-unified-plan/external/wpt/webrtc/interfaces.https-expected.txt

Status: Fixed (was: Started)
marking this as fixed. I think we got most usage.

In case anatoli stops by: h/t, this is just changes to the tests, doesn't need to be mentioned in any release notes.
Hurray! Good work, fippo.
Labels: M-70

Sign in to add a comment