[webrtc-pc] Explicit rollbacks (#2306)

henbos has just created a new issue for https://github.com/w3c/webrtc-pc:

== Explicit rollbacks ==
JSEP [says](https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-25#section-5.7) "The effect of rollback MUST be the same regardless of whether setLocalDescription or setRemoteDescription is called." Justin clarifies [here](https://bugs.chromium.org/p/chromium/issues/detail?id=980875#c27) that the intent is indeed that sLD(rollback) and sRD(rollback) do the same thing.

After [PR 2295](https://github.com/w3c/webrtc-pc/pull/2295), I think we correctly treat sLD(rollback) and sRD(rollback) the same. But Firefox [has a bug](https://crbug.com/980875#c25) about throwing based on signaling state, and Chrome has not implemented explicit rollback yet (implict rollback is work-in-progress), which means there is still time to figure out what we want to do:

> Assuming we fix the spec, then yes it'll become a bug that Firefox doesn't implement SLD({type: "rollback"}) and SRD({type: "rollback"}) the same.

Now that we need to update both Chrome and Firefox to do the same thing with regards to _explicit_ rollback, which of the following should we do?

1. Define SLD(rollback) and SRD(rollback) the same, i.e. "rollback _local or remote_ descriptions".
2. Define SLD(rollback) as "rollback _local or remote_ descriptions" and SRD(rollback) as throwing an exception.

The argument for 1) is that this would cause the least backwards-incompatibility problems for Firefox potentially, though I don't think rollback is popular yet?

I would argue that we should do 2). Here's why:
- Having two operations that do exactly the same thing is confusing. In fact, it's so confusing that editors, implementors and specs got it wrong.
- Considering there is no distinction between them, it makes more sense to think of rollback as a "local operation" in the sense that whether it's a local or remote description that is being rolled back, a rollback is resetting the state of the local peer connection to a previous state. There is nothing "remote" about it.
- In terms of rolling back due to receiving a remote description, the implicit variety of this operation SHOULD be preferred, since it is the least racy option, so why lead people into mistakenly thinking that they might want to do a "remote rollback" using sRD(rollback)?

The explicit rollback is only something to do as an ["escape hatch"](https://crbug.com/980875#c17):

> As to SLD/SRD({type: "rollback"}) I think it would be premature to leave that out. Rollback is an escape hatch to get oneself back to "stable". SRD() cannot be used to get back to stable and stay there.

Please view or discuss this issue at https://github.com/w3c/webrtc-pc/issues/2306 using your GitHub account

Received on Wednesday, 25 September 2019 09:11:35 UTC