<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - WebRTC: Update RTCPeerConnection API and introduce PeerConnectionBackend"
   href="https://bugs.webkit.org/show_bug.cgi?id=150166">150166</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>WebRTC: Update RTCPeerConnection API and introduce PeerConnectionBackend
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>WebKit
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>WebKit Nightly Build
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>Normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P2
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>WebCore Misc.
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>webkit-unassigned&#64;lists.webkit.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>adam.bergkvist&#64;ericsson.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>This change introduces PeerConnectionBackend which is a WebCore interface that allows RTCPeerConnection to have platform abstractions at different levels. For example, the MediaEndpoint interface [1] is a lower level WebRTC backend abstraction where a big part of the WebRTC specification is implemented in WebCore to be reusable. RTCPeerConnectionHandler (in the repo today) is on the other hand a higher level WebRTC backend abstraction where the calls are mostly forwarded directly to the backend. The PeerConnectionBackend interface facilitates both approaches.

RTCPeerConnection
 | (has)
 |
PeerConnectionBackend
 |   |
 |   | (realizes)
 |  MediaEndpointPeerConnection
 |   | (has)
 |   |
 |  MediaEndpoint (platform interface)
 |
 | (realizes)
RTCPeerHandlerPeerConnection
 | (has)
 |
RCPeerConnectionHandler (existing platform interface)

Notable changes:

* Overloaded methods on RTCPeerConnection (Promise + legacy callback signatures) are implemented with JSBuiltins.

* &quot;Queued operations&quot; ([1] Section 4.3.1) is implemented in JS bindings with Promises. Issue: Non-queued operations are still exposed to the script (see FIXME in RTCPeerConnection.idl).

* New RTCPeerConnection features
 - add/removeTrack()
 - pending/currentLocal/RemoteDescription attributes
 - RTCRtpSender/Receiver

* Information carrying objects like RTCSessionDescription and RTCCandidate don't encapsulate a &quot;mirrored&quot; platform object anymore.

* Remove callback implementations (not used with JS bindings)

[1] <a href="http://webkit.org/b/150165">http://webkit.org/b/150165</a>
[2] <a href="https://w3c.github.io/webrtc-pc/archives/20151006/webrtc.html">https://w3c.github.io/webrtc-pc/archives/20151006/webrtc.html</a></pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>