Perfect Negotiation is now supported in Chrome M87!
This is a pattern of exchanging offer and answer SDP that an application can make use of to abstract away when and how to do signaling. By attaching code that exercises this pattern when "onnegotiationneeded" is fired, the negotiation code can be written once in isolation from the rest of the application code, and whenever the application then modifies the RTCPeerConnection in such a way that renegotiation is needed, the negotiation code will be exercised automatically, and the changes will be made visible at both the local and remote endpoints.
Perfect Negotiation supports both endpoints sending offers. The pattern intelligently handles the situation of "glare" (both peers making an offer at the same time, causing a collision) by having one peer be "polite" and the other peer be "impolite". In the event of an offer collision, the polite peer rolls back its offer in order to process the impolite peer's incoming offer. Once back to the stable signaling state, the polite peer's "onnegotiationneeded" fires again and a follow-up O/A is completed.
("Start" creates two local streams, "Swap" alternates which one of them is sent.)
There are no new APIs added for Perfect Negotiation; what is fixed in M87 are bugs and races in "onnegotiationneeeded" and other events. (If you run the demo in M86, clicking "Start" followed by "Swap on both (glare)" can result in negotiation never completing.)
For more information about Perfect Negotiation, see...
Perfect Negotiation is only supported in Unified Plan, not Plan B.