<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[208043] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/208043">208043</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-28 04:14:51 -0700 (Fri, 28 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>PeerMediaDescription does not need to be refcounted
https://bugs.webkit.org/show_bug.cgi?id=164059

Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2016-10-28
Reviewed by Darin Adler.

No change of behavior.

* Modules/mediastream/MediaEndpointPeerConnection.cpp:
(WebCore::MediaEndpointPeerConnection::createOfferTask):
(WebCore::MediaEndpointPeerConnection::createAnswerTask):
(WebCore::createSourceMap):
(WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask):
(WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
(WebCore::MediaEndpointPeerConnection::addIceCandidateTask):
(WebCore::MediaEndpointPeerConnection::gotIceCandidate):
* Modules/mediastream/MediaEndpointPeerConnection.h:
* Modules/mediastream/SDPProcessor.cpp:
(WebCore::configurationFromJSON):
(WebCore::configurationToJSON):
(WebCore::SDPProcessor::generateCandidateLine):
(WebCore::SDPProcessor::parseCandidateLine):
* platform/mediastream/IceCandidate.h:
* platform/mediastream/MediaEndpointSessionConfiguration.h:
(WebCore::MediaEndpointSessionConfiguration::mediaDescriptions):
(WebCore::MediaEndpointSessionConfiguration::addMediaDescription):
(WebCore::MediaEndpointSessionConfiguration::clone):
* platform/mediastream/PeerMediaDescription.h:
(WebCore::PeerMediaDescription::addPayload):
(WebCore::PeerMediaDescription::addSsrc):
(WebCore::PeerMediaDescription::clearSsrcs):
(WebCore::PeerMediaDescription::addIceCandidate):
(WebCore::PeerMediaDescription::create): Deleted.
(WebCore::PeerMediaDescription::~PeerMediaDescription): Deleted.
(WebCore::PeerMediaDescription::type): Deleted.
(WebCore::PeerMediaDescription::setType): Deleted.
(WebCore::PeerMediaDescription::port): Deleted.
(WebCore::PeerMediaDescription::setPort): Deleted.
(WebCore::PeerMediaDescription::address): Deleted.
(WebCore::PeerMediaDescription::setAddress): Deleted.
(WebCore::PeerMediaDescription::mode): Deleted.
(WebCore::PeerMediaDescription::setMode): Deleted.
(WebCore::PeerMediaDescription::mid): Deleted.
(WebCore::PeerMediaDescription::setMid): Deleted.
(WebCore::PeerMediaDescription::payloads): Deleted.
(WebCore::PeerMediaDescription::setPayloads): Deleted.
(WebCore::PeerMediaDescription::rtcpMux): Deleted.
(WebCore::PeerMediaDescription::setRtcpMux): Deleted.
(WebCore::PeerMediaDescription::rtcpAddress): Deleted.
(WebCore::PeerMediaDescription::setRtcpAddress): Deleted.
(WebCore::PeerMediaDescription::rtcpPort): Deleted.
(WebCore::PeerMediaDescription::setRtcpPort): Deleted.
(WebCore::PeerMediaDescription::mediaStreamId): Deleted.
(WebCore::PeerMediaDescription::setMediaStreamId): Deleted.
(WebCore::PeerMediaDescription::mediaStreamTrackId): Deleted.
(WebCore::PeerMediaDescription::setMediaStreamTrackId): Deleted.
(WebCore::PeerMediaDescription::dtlsSetup): Deleted.
(WebCore::PeerMediaDescription::setDtlsSetup): Deleted.
(WebCore::PeerMediaDescription::dtlsFingerprintHashFunction): Deleted.
(WebCore::PeerMediaDescription::setDtlsFingerprintHashFunction): Deleted.
(WebCore::PeerMediaDescription::dtlsFingerprint): Deleted.
(WebCore::PeerMediaDescription::setDtlsFingerprint): Deleted.
(WebCore::PeerMediaDescription::cname): Deleted.
(WebCore::PeerMediaDescription::setCname): Deleted.
(WebCore::PeerMediaDescription::ssrcs): Deleted.
(WebCore::PeerMediaDescription::iceUfrag): Deleted.
(WebCore::PeerMediaDescription::setIceUfrag): Deleted.
(WebCore::PeerMediaDescription::icePassword): Deleted.
(WebCore::PeerMediaDescription::setIcePassword): Deleted.
(WebCore::PeerMediaDescription::iceCandidates): Deleted.
(WebCore::PeerMediaDescription::clone): Deleted.
(WebCore::PeerMediaDescription::PeerMediaDescription): Deleted.
* platform/mediastream/mac/MediaEndpointMac.cpp:
(WebCore::MediaEndpointMac::addRemoteCandidate):
(WebCore::MediaEndpointMac::OnIceCandidate):
* platform/mediastream/mac/MediaEndpointMac.h:
* platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
(WebCore::MediaEndpointOwr::updateSendConfiguration):
* platform/mediastream/openwebrtc/MediaEndpointOwr.h:
* platform/mock/MockMediaEndpoint.cpp:
(WebCore::MockMediaEndpoint::updateConfigurationMids):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectioncpp">trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectionh">trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamSDPProcessorcpp">trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamMediaEndpointSessionConfigurationh">trunk/Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamPeerMediaDescriptionh">trunk/Source/WebCore/platform/mediastream/PeerMediaDescription.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamopenwebrtcMediaEndpointOwrcpp">trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamopenwebrtcMediaEndpointOwrh">trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmockMockMediaEndpointcpp">trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/ChangeLog        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -1,3 +1,86 @@
</span><ins>+2016-10-28  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        PeerMediaDescription does not need to be refcounted
+        https://bugs.webkit.org/show_bug.cgi?id=164059
+
+        Reviewed by Darin Adler.
+
+        No change of behavior.
+
+        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
+        (WebCore::MediaEndpointPeerConnection::createOfferTask):
+        (WebCore::MediaEndpointPeerConnection::createAnswerTask):
+        (WebCore::createSourceMap):
+        (WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask):
+        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
+        (WebCore::MediaEndpointPeerConnection::addIceCandidateTask):
+        (WebCore::MediaEndpointPeerConnection::gotIceCandidate):
+        * Modules/mediastream/MediaEndpointPeerConnection.h:
+        * Modules/mediastream/SDPProcessor.cpp:
+        (WebCore::configurationFromJSON):
+        (WebCore::configurationToJSON):
+        (WebCore::SDPProcessor::generateCandidateLine):
+        (WebCore::SDPProcessor::parseCandidateLine):
+        * platform/mediastream/IceCandidate.h:
+        * platform/mediastream/MediaEndpointSessionConfiguration.h:
+        (WebCore::MediaEndpointSessionConfiguration::mediaDescriptions):
+        (WebCore::MediaEndpointSessionConfiguration::addMediaDescription):
+        (WebCore::MediaEndpointSessionConfiguration::clone):
+        * platform/mediastream/PeerMediaDescription.h:
+        (WebCore::PeerMediaDescription::addPayload):
+        (WebCore::PeerMediaDescription::addSsrc):
+        (WebCore::PeerMediaDescription::clearSsrcs):
+        (WebCore::PeerMediaDescription::addIceCandidate):
+        (WebCore::PeerMediaDescription::create): Deleted.
+        (WebCore::PeerMediaDescription::~PeerMediaDescription): Deleted.
+        (WebCore::PeerMediaDescription::type): Deleted.
+        (WebCore::PeerMediaDescription::setType): Deleted.
+        (WebCore::PeerMediaDescription::port): Deleted.
+        (WebCore::PeerMediaDescription::setPort): Deleted.
+        (WebCore::PeerMediaDescription::address): Deleted.
+        (WebCore::PeerMediaDescription::setAddress): Deleted.
+        (WebCore::PeerMediaDescription::mode): Deleted.
+        (WebCore::PeerMediaDescription::setMode): Deleted.
+        (WebCore::PeerMediaDescription::mid): Deleted.
+        (WebCore::PeerMediaDescription::setMid): Deleted.
+        (WebCore::PeerMediaDescription::payloads): Deleted.
+        (WebCore::PeerMediaDescription::setPayloads): Deleted.
+        (WebCore::PeerMediaDescription::rtcpMux): Deleted.
+        (WebCore::PeerMediaDescription::setRtcpMux): Deleted.
+        (WebCore::PeerMediaDescription::rtcpAddress): Deleted.
+        (WebCore::PeerMediaDescription::setRtcpAddress): Deleted.
+        (WebCore::PeerMediaDescription::rtcpPort): Deleted.
+        (WebCore::PeerMediaDescription::setRtcpPort): Deleted.
+        (WebCore::PeerMediaDescription::mediaStreamId): Deleted.
+        (WebCore::PeerMediaDescription::setMediaStreamId): Deleted.
+        (WebCore::PeerMediaDescription::mediaStreamTrackId): Deleted.
+        (WebCore::PeerMediaDescription::setMediaStreamTrackId): Deleted.
+        (WebCore::PeerMediaDescription::dtlsSetup): Deleted.
+        (WebCore::PeerMediaDescription::setDtlsSetup): Deleted.
+        (WebCore::PeerMediaDescription::dtlsFingerprintHashFunction): Deleted.
+        (WebCore::PeerMediaDescription::setDtlsFingerprintHashFunction): Deleted.
+        (WebCore::PeerMediaDescription::dtlsFingerprint): Deleted.
+        (WebCore::PeerMediaDescription::setDtlsFingerprint): Deleted.
+        (WebCore::PeerMediaDescription::cname): Deleted.
+        (WebCore::PeerMediaDescription::setCname): Deleted.
+        (WebCore::PeerMediaDescription::ssrcs): Deleted.
+        (WebCore::PeerMediaDescription::iceUfrag): Deleted.
+        (WebCore::PeerMediaDescription::setIceUfrag): Deleted.
+        (WebCore::PeerMediaDescription::icePassword): Deleted.
+        (WebCore::PeerMediaDescription::setIcePassword): Deleted.
+        (WebCore::PeerMediaDescription::iceCandidates): Deleted.
+        (WebCore::PeerMediaDescription::clone): Deleted.
+        (WebCore::PeerMediaDescription::PeerMediaDescription): Deleted.
+        * platform/mediastream/mac/MediaEndpointMac.cpp:
+        (WebCore::MediaEndpointMac::addRemoteCandidate):
+        (WebCore::MediaEndpointMac::OnIceCandidate):
+        * platform/mediastream/mac/MediaEndpointMac.h:
+        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
+        (WebCore::MediaEndpointOwr::updateSendConfiguration):
+        * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
+        * platform/mock/MockMediaEndpoint.cpp:
+        (WebCore::MockMediaEndpoint::updateConfigurationMids):
+
</ins><span class="cx"> 2016-10-28  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Modern Media Controls] Media Controller: scrubbing support
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -160,21 +160,21 @@
</span><span class="cx"> 
</span><span class="cx">     // Remove any transceiver objects from transceivers that can be matched to an existing media description.
</span><span class="cx">     for (auto&amp; mediaDescription : configurationSnapshot-&gt;mediaDescriptions()) {
</span><del>-        if (!mediaDescription-&gt;port()) {
</del><ins>+        if (!mediaDescription.port) {
</ins><span class="cx">             // This media description should be recycled.
</span><span class="cx">             continue;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        RTCRtpTransceiver* transceiver = matchTransceiverByMid(transceivers, mediaDescription-&gt;mid());
</del><ins>+        RTCRtpTransceiver* transceiver = matchTransceiverByMid(transceivers, mediaDescription.mid);
</ins><span class="cx">         if (!transceiver)
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><del>-        mediaDescription-&gt;setMode(transceiver-&gt;directionString());
</del><ins>+        mediaDescription.mode = transceiver-&gt;directionString();
</ins><span class="cx">         if (transceiver-&gt;hasSendingDirection()) {
</span><span class="cx">             RTCRtpSender&amp; sender = *transceiver-&gt;sender();
</span><span class="cx"> 
</span><del>-            mediaDescription-&gt;setMediaStreamId(sender.mediaStreamIds()[0]);
-            mediaDescription-&gt;setMediaStreamTrackId(sender.trackId());
</del><ins>+            mediaDescription.mediaStreamId = sender.mediaStreamIds()[0];
+            mediaDescription.mediaStreamTrackId = sender.trackId();
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         transceivers.removeFirst(transceiver);
</span><span class="lines">@@ -182,23 +182,23 @@
</span><span class="cx"> 
</span><span class="cx">     // Add media descriptions for remaining transceivers.
</span><span class="cx">     for (auto&amp; transceiver : transceivers) {
</span><del>-        RefPtr&lt;PeerMediaDescription&gt; mediaDescription = PeerMediaDescription::create();
</del><ins>+        PeerMediaDescription mediaDescription;
</ins><span class="cx">         RTCRtpSender&amp; sender = *transceiver-&gt;sender();
</span><span class="cx"> 
</span><del>-        mediaDescription-&gt;setMode(transceiver-&gt;directionString());
-        mediaDescription-&gt;setMid(transceiver-&gt;provisionalMid());
-        mediaDescription-&gt;setMediaStreamId(sender.mediaStreamIds()[0]);
-        mediaDescription-&gt;setType(sender.trackKind());
-        mediaDescription-&gt;setPayloads(sender.trackKind() == &quot;audio&quot; ? m_defaultAudioPayloads : m_defaultVideoPayloads);
-        mediaDescription-&gt;setDtlsFingerprintHashFunction(m_dtlsFingerprintFunction);
-        mediaDescription-&gt;setDtlsFingerprint(m_dtlsFingerprint);
-        mediaDescription-&gt;setCname(m_cname);
-        mediaDescription-&gt;addSsrc(cryptographicallyRandomNumber());
-        mediaDescription-&gt;setIceUfrag(m_iceUfrag);
-        mediaDescription-&gt;setIcePassword(m_icePassword);
</del><ins>+        mediaDescription.mode = transceiver-&gt;directionString();
+        mediaDescription.mid = transceiver-&gt;provisionalMid();
+        mediaDescription.mediaStreamId = sender.mediaStreamIds()[0];
+        mediaDescription.type = sender.trackKind();
+        mediaDescription.payloads = sender.trackKind() == &quot;audio&quot; ? m_defaultAudioPayloads : m_defaultVideoPayloads;
+        mediaDescription.dtlsFingerprintHashFunction = m_dtlsFingerprintFunction;
+        mediaDescription.dtlsFingerprint = m_dtlsFingerprint;
+        mediaDescription.cname = m_cname;
+        mediaDescription.addSsrc(cryptographicallyRandomNumber());
+        mediaDescription.iceUfrag = m_iceUfrag;
+        mediaDescription.icePassword = m_icePassword;
</ins><span class="cx"> 
</span><span class="cx">         if (sender.track())
</span><del>-            mediaDescription-&gt;setMediaStreamTrackId(sender.trackId());
</del><ins>+            mediaDescription.mediaStreamTrackId = sender.trackId();
</ins><span class="cx"> 
</span><span class="cx">         configurationSnapshot-&gt;addMediaDescription(WTFMove(mediaDescription));
</span><span class="cx">     }
</span><span class="lines">@@ -233,12 +233,12 @@
</span><span class="cx">     configurationSnapshot-&gt;setSessionVersion(m_sdpAnswerSessionVersion++);
</span><span class="cx"> 
</span><span class="cx">     auto transceivers = RtpTransceiverVector(m_client-&gt;getTransceivers());
</span><del>-    const MediaDescriptionVector&amp; remoteMediaDescriptions = internalRemoteDescription()-&gt;configuration()-&gt;mediaDescriptions();
</del><ins>+    auto&amp; remoteMediaDescriptions = internalRemoteDescription()-&gt;configuration()-&gt;mediaDescriptions();
</ins><span class="cx"> 
</span><span class="cx">     for (unsigned i = 0; i &lt; remoteMediaDescriptions.size(); ++i) {
</span><del>-        PeerMediaDescription&amp; remoteMediaDescription = *remoteMediaDescriptions[i];
</del><ins>+        auto&amp; remoteMediaDescription = remoteMediaDescriptions[i];
</ins><span class="cx"> 
</span><del>-        RTCRtpTransceiver* transceiver = matchTransceiverByMid(transceivers, remoteMediaDescription.mid());
</del><ins>+        auto* transceiver = matchTransceiverByMid(transceivers, remoteMediaDescription.mid);
</ins><span class="cx">         if (!transceiver) {
</span><span class="cx">             LOG_ERROR(&quot;Could not find a matching transceiver for remote description while creating answer&quot;);
</span><span class="cx">             continue;
</span><span class="lines">@@ -245,39 +245,39 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (i &gt;= configurationSnapshot-&gt;mediaDescriptions().size()) {
</span><del>-            auto newMediaDescription = PeerMediaDescription::create();
</del><ins>+            PeerMediaDescription newMediaDescription;
</ins><span class="cx"> 
</span><span class="cx">             RTCRtpSender&amp; sender = *transceiver-&gt;sender();
</span><span class="cx">             if (sender.track()) {
</span><span class="cx">                 if (sender.mediaStreamIds().size())
</span><del>-                    newMediaDescription-&gt;setMediaStreamId(sender.mediaStreamIds()[0]);
-                newMediaDescription-&gt;setMediaStreamTrackId(sender.trackId());
-                newMediaDescription-&gt;addSsrc(cryptographicallyRandomNumber());
</del><ins>+                    newMediaDescription.mediaStreamId = sender.mediaStreamIds()[0];
+                newMediaDescription.mediaStreamTrackId = sender.trackId();
+                newMediaDescription.addSsrc(cryptographicallyRandomNumber());
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            newMediaDescription-&gt;setMode(transceiver-&gt;directionString());
-            newMediaDescription-&gt;setType(remoteMediaDescription.type());
-            newMediaDescription-&gt;setMid(remoteMediaDescription.mid());
-            newMediaDescription-&gt;setDtlsSetup(remoteMediaDescription.dtlsSetup() == &quot;active&quot; ? &quot;passive&quot; : &quot;active&quot;);
-            newMediaDescription-&gt;setDtlsFingerprintHashFunction(m_dtlsFingerprintFunction);
-            newMediaDescription-&gt;setDtlsFingerprint(m_dtlsFingerprint);
-            newMediaDescription-&gt;setCname(m_cname);
-            newMediaDescription-&gt;setIceUfrag(m_iceUfrag);
-            newMediaDescription-&gt;setIcePassword(m_icePassword);
</del><ins>+            newMediaDescription.mode = transceiver-&gt;directionString();
+            newMediaDescription.type = remoteMediaDescription.type;
+            newMediaDescription.mid = remoteMediaDescription.mid;
+            newMediaDescription.dtlsSetup = remoteMediaDescription.dtlsSetup == &quot;active&quot; ? &quot;passive&quot; : &quot;active&quot;;
+            newMediaDescription.dtlsFingerprintHashFunction = m_dtlsFingerprintFunction;
+            newMediaDescription.dtlsFingerprint = m_dtlsFingerprint;
+            newMediaDescription.cname = m_cname;
+            newMediaDescription.iceUfrag = m_iceUfrag;
+            newMediaDescription.icePassword = m_icePassword;
</ins><span class="cx"> 
</span><span class="cx">             configurationSnapshot-&gt;addMediaDescription(WTFMove(newMediaDescription));
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        PeerMediaDescription&amp; localMediaDescription = *configurationSnapshot-&gt;mediaDescriptions()[i];
</del><ins>+        PeerMediaDescription&amp; localMediaDescription = configurationSnapshot-&gt;mediaDescriptions()[i];
</ins><span class="cx"> 
</span><del>-        localMediaDescription.setPayloads(remoteMediaDescription.payloads());
-        localMediaDescription.setRtcpMux(remoteMediaDescription.rtcpMux());
</del><ins>+        localMediaDescription.payloads = remoteMediaDescription.payloads;
+        localMediaDescription.rtcpMux = remoteMediaDescription.rtcpMux;
</ins><span class="cx"> 
</span><del>-        if (!localMediaDescription.ssrcs().size())
</del><ins>+        if (!localMediaDescription.ssrcs.size())
</ins><span class="cx">             localMediaDescription.addSsrc(cryptographicallyRandomNumber());
</span><span class="cx"> 
</span><del>-        if (localMediaDescription.dtlsSetup() == &quot;actpass&quot;)
-            localMediaDescription.setDtlsSetup(&quot;passive&quot;);
</del><ins>+        if (localMediaDescription.dtlsSetup == &quot;actpass&quot;)
+            localMediaDescription.dtlsSetup = &quot;passive&quot;;
</ins><span class="cx"> 
</span><span class="cx">         transceivers.removeFirst(transceiver);
</span><span class="cx">     }
</span><span class="lines">@@ -295,11 +295,11 @@
</span><span class="cx">     RealtimeMediaSourceMap sourceMap;
</span><span class="cx"> 
</span><span class="cx">     for (unsigned i = 0; i &lt; remoteMediaDescriptions.size() &amp;&amp; i &lt; localMediaDescriptionCount; ++i) {
</span><del>-        PeerMediaDescription&amp; remoteMediaDescription = *remoteMediaDescriptions[i];
-        if (remoteMediaDescription.type() != &quot;audio&quot; &amp;&amp; remoteMediaDescription.type() != &quot;video&quot;)
</del><ins>+        auto&amp; remoteMediaDescription = remoteMediaDescriptions[i];
+        if (remoteMediaDescription.type != &quot;audio&quot; &amp;&amp; remoteMediaDescription.type != &quot;video&quot;)
</ins><span class="cx">             continue;
</span><span class="cx"> 
</span><del>-        RTCRtpTransceiver* transceiver = matchTransceiverByMid(transceivers, remoteMediaDescription.mid());
</del><ins>+        RTCRtpTransceiver* transceiver = matchTransceiverByMid(transceivers, remoteMediaDescription.mid);
</ins><span class="cx">         if (transceiver) {
</span><span class="cx">             if (transceiver-&gt;hasSendingDirection() &amp;&amp; transceiver-&gt;sender()-&gt;track())
</span><span class="cx">                 sourceMap.set(transceiver-&gt;mid(), &amp;transceiver-&gt;sender()-&gt;track()-&gt;source());
</span><span class="lines">@@ -359,11 +359,9 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Associate media descriptions with transceivers (set provisional mid to 'final' mid).
</span><del>-        for (unsigned i = previousNumberOfMediaDescriptions; i &lt; mediaDescriptions.size(); ++i) {
-            PeerMediaDescription&amp; mediaDescription = *mediaDescriptions[i];
-
</del><ins>+        for (auto&amp; mediaDescription : mediaDescriptions) {
</ins><span class="cx">             RTCRtpTransceiver* transceiver = matchTransceiver(transceivers, [&amp;mediaDescription] (RTCRtpTransceiver&amp; current) {
</span><del>-                return current.provisionalMid() == mediaDescription.mid();
</del><ins>+                return current.provisionalMid() == mediaDescription.mid;
</ins><span class="cx">             });
</span><span class="cx">             if (transceiver)
</span><span class="cx">                 transceiver-&gt;setMid(transceiver-&gt;provisionalMid());
</span><span class="lines">@@ -464,13 +462,12 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    const MediaDescriptionVector&amp; mediaDescriptions = newDescription-&gt;configuration()-&gt;mediaDescriptions();
</del><ins>+    auto&amp; mediaDescriptions = newDescription-&gt;configuration()-&gt;mediaDescriptions();
</ins><span class="cx">     for (auto&amp; mediaDescription : mediaDescriptions) {
</span><del>-        if (mediaDescription-&gt;type() != &quot;audio&quot; &amp;&amp; mediaDescription-&gt;type() != &quot;video&quot;)
</del><ins>+        if (mediaDescription.type != &quot;audio&quot; &amp;&amp; mediaDescription.type != &quot;video&quot;)
</ins><span class="cx">             continue;
</span><span class="cx"> 
</span><del>-        mediaDescription-&gt;setPayloads(m_mediaEndpoint-&gt;filterPayloads(mediaDescription-&gt;payloads(),
-            mediaDescription-&gt;type() == &quot;audio&quot; ? m_defaultAudioPayloads : m_defaultVideoPayloads));
</del><ins>+        mediaDescription.payloads = m_mediaEndpoint-&gt;filterPayloads(mediaDescription.payloads, mediaDescription.type == &quot;audio&quot; ? m_defaultAudioPayloads : m_defaultVideoPayloads);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     bool isInitiator = newDescription-&gt;type() == RTCSessionDescription::SdpType::Answer;
</span><span class="lines">@@ -488,32 +485,32 @@
</span><span class="cx">     // One legacy MediaStreamEvent will be fired for every new MediaStream created as this remote description is set.
</span><span class="cx">     Vector&lt;RefPtr&lt;MediaStreamEvent&gt;&gt; legacyMediaStreamEvents;
</span><span class="cx"> 
</span><del>-    for (auto mediaDescription : mediaDescriptions) {
-        RTCRtpTransceiver* transceiver = matchTransceiverByMid(transceivers, mediaDescription-&gt;mid());
</del><ins>+    for (auto&amp; mediaDescription : mediaDescriptions) {
+        RTCRtpTransceiver* transceiver = matchTransceiverByMid(transceivers, mediaDescription.mid);
</ins><span class="cx">         if (!transceiver) {
</span><span class="cx">             bool receiveOnlyFlag = false;
</span><span class="cx"> 
</span><del>-            if (mediaDescription-&gt;mode() == &quot;sendrecv&quot; || mediaDescription-&gt;mode() == &quot;recvonly&quot;) {
</del><ins>+            if (mediaDescription.mode == &quot;sendrecv&quot; || mediaDescription.mode == &quot;recvonly&quot;) {
</ins><span class="cx">                 // Try to match an existing transceiver.
</span><span class="cx">                 transceiver = matchTransceiver(transceivers, [&amp;mediaDescription] (RTCRtpTransceiver&amp; current) {
</span><del>-                    return !current.stopped() &amp;&amp; current.mid().isNull() &amp;&amp; current.sender()-&gt;trackKind() == mediaDescription-&gt;type();
</del><ins>+                    return !current.stopped() &amp;&amp; current.mid().isNull() &amp;&amp; current.sender()-&gt;trackKind() == mediaDescription.type;
</ins><span class="cx">                 });
</span><span class="cx"> 
</span><span class="cx">                 if (transceiver) {
</span><span class="cx">                     // This transceiver was created locally with a provisional mid. Its real mid will now be set by the remote
</span><span class="cx">                     // description so we need to update the mid of the transceiver's muted source to preserve the association.
</span><del>-                    transceiver-&gt;setMid(mediaDescription-&gt;mid());
-                    m_mediaEndpoint-&gt;replaceMutedRemoteSourceMid(transceiver-&gt;provisionalMid(), mediaDescription-&gt;mid());
</del><ins>+                    transceiver-&gt;setMid(mediaDescription.mid);
+                    m_mediaEndpoint-&gt;replaceMutedRemoteSourceMid(transceiver-&gt;provisionalMid(), mediaDescription.mid);
</ins><span class="cx">                 } else
</span><span class="cx">                     receiveOnlyFlag = true;
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             if (!transceiver) {
</span><del>-                auto sender = RTCRtpSender::create(mediaDescription-&gt;type(), Vector&lt;String&gt;(), m_client-&gt;senderClient());
-                auto receiver = createReceiver(mediaDescription-&gt;mid(), mediaDescription-&gt;type(), mediaDescription-&gt;mediaStreamTrackId());
</del><ins>+                auto sender = RTCRtpSender::create(mediaDescription.type, Vector&lt;String&gt;(), m_client-&gt;senderClient());
+                auto receiver = createReceiver(mediaDescription.mid, mediaDescription.type, mediaDescription.mediaStreamTrackId);
</ins><span class="cx"> 
</span><span class="cx">                 auto newTransceiver = RTCRtpTransceiver::create(WTFMove(sender), WTFMove(receiver));
</span><del>-                newTransceiver-&gt;setMid(mediaDescription-&gt;mid());
</del><ins>+                newTransceiver-&gt;setMid(mediaDescription.mid);
</ins><span class="cx">                 if (receiveOnlyFlag)
</span><span class="cx">                     newTransceiver-&gt;disableSendingDirection();
</span><span class="cx"> 
</span><span class="lines">@@ -522,7 +519,7 @@
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (mediaDescription-&gt;mode() == &quot;sendrecv&quot; || mediaDescription-&gt;mode() == &quot;sendonly&quot;) {
</del><ins>+        if (mediaDescription.mode == &quot;sendrecv&quot; || mediaDescription.mode == &quot;sendonly&quot;) {
</ins><span class="cx">             RTCRtpReceiver&amp; receiver = *transceiver-&gt;receiver();
</span><span class="cx">             if (receiver.isDispatched())
</span><span class="cx">                 continue;
</span><span class="lines">@@ -529,8 +526,8 @@
</span><span class="cx">             receiver.setDispatched(true);
</span><span class="cx"> 
</span><span class="cx">             Vector&lt;String&gt; mediaStreamIds;
</span><del>-            if (!mediaDescription-&gt;mediaStreamId().isEmpty())
-                mediaStreamIds.append(mediaDescription-&gt;mediaStreamId());
</del><ins>+            if (!mediaDescription.mediaStreamId.isEmpty())
+                mediaStreamIds.append(mediaDescription.mediaStreamId);
</ins><span class="cx"> 
</span><span class="cx">             // A remote track can be associated with 0..* MediaStreams. We create a new stream for
</span><span class="cx">             // a track in case of an unrecognized stream id, or just add the track if the stream
</span><span class="lines">@@ -646,7 +643,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    const MediaDescriptionVector&amp; remoteMediaDescriptions = internalRemoteDescription()-&gt;configuration()-&gt;mediaDescriptions();
</del><ins>+    auto&amp; remoteMediaDescriptions = internalRemoteDescription()-&gt;configuration()-&gt;mediaDescriptions();
</ins><span class="cx">     PeerMediaDescription* targetMediaDescription = nullptr;
</span><span class="cx"> 
</span><span class="cx">     // When identifying the target media description, sdpMid takes precedence over sdpMLineIndex
</span><span class="lines">@@ -654,8 +651,8 @@
</span><span class="cx">     if (!rtcCandidate.sdpMid().isNull()) {
</span><span class="cx">         const String&amp; mid = rtcCandidate.sdpMid();
</span><span class="cx">         for (auto&amp; description : remoteMediaDescriptions) {
</span><del>-            if (description-&gt;mid() == mid) {
-                targetMediaDescription = description.get();
</del><ins>+            if (description.mid == mid) {
+                targetMediaDescription = &amp;description;
</ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -670,7 +667,7 @@
</span><span class="cx">             promise.reject(OperationError, &quot;sdpMLineIndex is out of range&quot;);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        targetMediaDescription = remoteMediaDescriptions[sdpMLineIndex].get();
</del><ins>+        targetMediaDescription = &amp;remoteMediaDescriptions[sdpMLineIndex];
</ins><span class="cx">     } else {
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">         return;
</span><span class="lines">@@ -685,7 +682,8 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    m_mediaEndpoint-&gt;addRemoteCandidate(result.candidate(), targetMediaDescription-&gt;mid(), targetMediaDescription-&gt;iceUfrag(), targetMediaDescription-&gt;icePassword());
</del><ins>+    ASSERT(targetMediaDescription);
+    m_mediaEndpoint-&gt;addRemoteCandidate(result.candidate(), targetMediaDescription-&gt;mid, targetMediaDescription-&gt;iceUfrag, targetMediaDescription-&gt;icePassword);
</ins><span class="cx"> 
</span><span class="cx">     targetMediaDescription-&gt;addIceCandidate(WTFMove(result.candidate()));
</span><span class="cx"> 
</span><span class="lines">@@ -837,11 +835,11 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx"> 
</span><del>-    const MediaDescriptionVector&amp; mediaDescriptions = internalLocalDescription()-&gt;configuration()-&gt;mediaDescriptions();
</del><ins>+    auto&amp; mediaDescriptions = internalLocalDescription()-&gt;configuration()-&gt;mediaDescriptions();
</ins><span class="cx">     size_t mediaDescriptionIndex = notFound;
</span><span class="cx"> 
</span><span class="cx">     for (size_t i = 0; i &lt; mediaDescriptions.size(); ++i) {
</span><del>-        if (mediaDescriptions[i]-&gt;mid() == mid) {
</del><ins>+        if (mediaDescriptions[i].mid == mid) {
</ins><span class="cx">             mediaDescriptionIndex = i;
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="lines">@@ -855,9 +853,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    auto&amp; mediaDescription = mediaDescriptions[mediaDescriptionIndex];
-    ASSERT(mediaDescription);
-    mediaDescription-&gt;addIceCandidate(WTFMove(candidate));
</del><ins>+    mediaDescriptions[mediaDescriptionIndex].addIceCandidate(WTFMove(candidate));
</ins><span class="cx"> 
</span><span class="cx">     m_client-&gt;fireEvent(RTCIceCandidateEvent::create(false, false, RTCIceCandidate::create(candidateLine, mid, mediaDescriptionIndex)));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -43,13 +43,14 @@
</span><span class="cx"> 
</span><span class="cx"> class MediaStream;
</span><span class="cx"> class MediaStreamTrack;
</span><del>-class PeerMediaDescription;
</del><span class="cx"> class SDPProcessor;
</span><span class="cx"> 
</span><del>-typedef Vector&lt;RefPtr&lt;PeerMediaDescription&gt;&gt; MediaDescriptionVector;
-typedef Vector&lt;RefPtr&lt;RTCRtpSender&gt;&gt; RtpSenderVector;
-typedef Vector&lt;RefPtr&lt;RTCRtpTransceiver&gt;&gt; RtpTransceiverVector;
</del><ins>+struct PeerMediaDescription;
</ins><span class="cx"> 
</span><ins>+using MediaDescriptionVector = Vector&lt;PeerMediaDescription&gt;;
+using RtpSenderVector = Vector&lt;RefPtr&lt;RTCRtpSender&gt;&gt;;
+using RtpTransceiverVector = Vector&lt;RefPtr&lt;RTCRtpTransceiver&gt;&gt;;
+
</ins><span class="cx"> class MediaEndpointPeerConnection : public PeerConnectionBackend, public MediaEndpointClient {
</span><span class="cx"> public:
</span><span class="cx">     MediaEndpointPeerConnection(PeerConnectionBackendClient*);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamSDPProcessorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -199,22 +199,22 @@
</span><span class="cx">         RefPtr&lt;InspectorObject&gt; mediaDescriptionObject = InspectorObject::create();
</span><span class="cx">         mediaDescriptionsArray-&gt;get(i)-&gt;asObject(mediaDescriptionObject);
</span><span class="cx"> 
</span><del>-        RefPtr&lt;PeerMediaDescription&gt; mediaDescription = PeerMediaDescription::create();
</del><ins>+        PeerMediaDescription mediaDescription;
</ins><span class="cx"> 
</span><span class="cx">         if (mediaDescriptionObject-&gt;getString(typeString(), stringValue))
</span><del>-            mediaDescription-&gt;setType(stringValue);
</del><ins>+            mediaDescription.type = stringValue;
</ins><span class="cx"> 
</span><span class="cx">         if (mediaDescriptionObject-&gt;getInteger(portString(), intValue))
</span><del>-            mediaDescription-&gt;setPort(intValue);
</del><ins>+            mediaDescription.port = intValue;
</ins><span class="cx"> 
</span><span class="cx">         if (mediaDescriptionObject-&gt;getString(addressString(), stringValue))
</span><del>-            mediaDescription-&gt;setAddress(stringValue);
</del><ins>+            mediaDescription.address = stringValue;
</ins><span class="cx"> 
</span><span class="cx">         if (mediaDescriptionObject-&gt;getString(modeString(), stringValue))
</span><del>-            mediaDescription-&gt;setMode(stringValue);
</del><ins>+            mediaDescription.mode = stringValue;
</ins><span class="cx"> 
</span><span class="cx">         if (mediaDescriptionObject-&gt;getString(midString(), stringValue))
</span><del>-            mediaDescription-&gt;setMid(stringValue);
</del><ins>+            mediaDescription.mid = stringValue;
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorArray&gt; payloadsArray = InspectorArray::create();
</span><span class="cx">         mediaDescriptionObject-&gt;getArray(payloadsString(), payloadsArray);
</span><span class="lines">@@ -258,37 +258,37 @@
</span><span class="cx">                     payload.addParameter(&quot;rtxTime&quot;, intValue);
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            mediaDescription-&gt;addPayload(WTFMove(payload));
</del><ins>+            mediaDescription.addPayload(WTFMove(payload));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorObject&gt; rtcpObject = InspectorObject::create();
</span><span class="cx">         if (mediaDescriptionObject-&gt;getObject(rtcpString(), rtcpObject)) {
</span><span class="cx">             if (rtcpObject-&gt;getBoolean(muxString(), boolValue))
</span><del>-                mediaDescription-&gt;setRtcpMux(boolValue);
</del><ins>+                mediaDescription.rtcpMux = boolValue;
</ins><span class="cx"> 
</span><span class="cx">             if (rtcpObject-&gt;getString(rtcpAddressString(), stringValue))
</span><del>-                mediaDescription-&gt;setRtcpAddress(stringValue);
</del><ins>+                mediaDescription.rtcpAddress = stringValue;
</ins><span class="cx"> 
</span><span class="cx">             if (rtcpObject-&gt;getInteger(rtcpPortString(), intValue))
</span><del>-                mediaDescription-&gt;setRtcpPort(intValue);
</del><ins>+                mediaDescription.rtcpPort = intValue;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (mediaDescriptionObject-&gt;getString(mediaStreamIdString(), stringValue))
</span><del>-            mediaDescription-&gt;setMediaStreamId(stringValue);
</del><ins>+            mediaDescription.mediaStreamId = stringValue;
</ins><span class="cx"> 
</span><span class="cx">         if (mediaDescriptionObject-&gt;getString(mediaStreamTrackIdString(), stringValue))
</span><del>-            mediaDescription-&gt;setMediaStreamTrackId(stringValue);
</del><ins>+            mediaDescription.mediaStreamTrackId = stringValue;
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorObject&gt; dtlsObject = InspectorObject::create();
</span><span class="cx">         if (mediaDescriptionObject-&gt;getObject(dtlsString(), dtlsObject)) {
</span><span class="cx">             if (dtlsObject-&gt;getString(setupString(), stringValue))
</span><del>-                mediaDescription-&gt;setDtlsSetup(stringValue);
</del><ins>+                mediaDescription.dtlsSetup = stringValue;
</ins><span class="cx"> 
</span><span class="cx">             if (dtlsObject-&gt;getString(fingerprintHashFunctionString(), stringValue))
</span><del>-                mediaDescription-&gt;setDtlsFingerprintHashFunction(stringValue);
</del><ins>+                mediaDescription.dtlsFingerprintHashFunction = stringValue;
</ins><span class="cx"> 
</span><span class="cx">             if (dtlsObject-&gt;getString(fingerprintString(), stringValue))
</span><del>-                mediaDescription-&gt;setDtlsFingerprint(stringValue);
</del><ins>+                mediaDescription.dtlsFingerprint = stringValue;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorArray&gt; ssrcsArray = InspectorArray::create();
</span><span class="lines">@@ -296,19 +296,19 @@
</span><span class="cx"> 
</span><span class="cx">         for (unsigned j = 0; j &lt; ssrcsArray-&gt;length(); ++j) {
</span><span class="cx">             ssrcsArray-&gt;get(j)-&gt;asInteger(intValue);
</span><del>-            mediaDescription-&gt;addSsrc(intValue);
</del><ins>+            mediaDescription.addSsrc(intValue);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (mediaDescriptionObject-&gt;getString(cnameString(), stringValue))
</span><del>-            mediaDescription-&gt;setCname(stringValue);
</del><ins>+            mediaDescription.cname = stringValue;
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorObject&gt; iceObject = InspectorObject::create();
</span><span class="cx">         if (mediaDescriptionObject-&gt;getObject(iceString(), iceObject)) {
</span><span class="cx">             if (iceObject-&gt;getString(ufragString(), stringValue))
</span><del>-                mediaDescription-&gt;setIceUfrag(stringValue);
</del><ins>+                mediaDescription.iceUfrag = stringValue;
</ins><span class="cx"> 
</span><span class="cx">             if (iceObject-&gt;getString(passwordString(), stringValue))
</span><del>-                mediaDescription-&gt;setIcePassword(stringValue);
</del><ins>+                mediaDescription.icePassword = stringValue;
</ins><span class="cx"> 
</span><span class="cx">             RefPtr&lt;InspectorArray&gt; candidatesArray = InspectorArray::create();
</span><span class="cx">             iceObject-&gt;getArray(candidatesString(), candidatesArray);
</span><span class="lines">@@ -317,7 +317,7 @@
</span><span class="cx">                 RefPtr&lt;InspectorObject&gt; candidateObject = InspectorObject::create();
</span><span class="cx">                 candidatesArray-&gt;get(j)-&gt;asObject(candidateObject);
</span><span class="cx"> 
</span><del>-                mediaDescription-&gt;addIceCandidate(createCandidate(*candidateObject));
</del><ins>+                mediaDescription.addIceCandidate(createCandidate(*candidateObject));
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -351,18 +351,18 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;InspectorArray&gt; mediaDescriptionsArray = InspectorArray::create();
</span><span class="cx"> 
</span><del>-    for (const RefPtr&lt;PeerMediaDescription&gt;&amp; mediaDescription : configuration.mediaDescriptions()) {
</del><ins>+    for (const auto&amp; mediaDescription : configuration.mediaDescriptions()) {
</ins><span class="cx">         RefPtr&lt;InspectorObject&gt; mediaDescriptionObject = InspectorObject::create();
</span><span class="cx"> 
</span><del>-        mediaDescriptionObject-&gt;setString(typeString(), mediaDescription-&gt;type());
-        mediaDescriptionObject-&gt;setInteger(portString(), mediaDescription-&gt;port());
-        mediaDescriptionObject-&gt;setString(addressString(), mediaDescription-&gt;address());
-        mediaDescriptionObject-&gt;setString(modeString(), mediaDescription-&gt;mode());
-        mediaDescriptionObject-&gt;setString(midString(), mediaDescription-&gt;mid());
</del><ins>+        mediaDescriptionObject-&gt;setString(typeString(), mediaDescription.type);
+        mediaDescriptionObject-&gt;setInteger(portString(), mediaDescription.port);
+        mediaDescriptionObject-&gt;setString(addressString(), mediaDescription.address);
+        mediaDescriptionObject-&gt;setString(modeString(), mediaDescription.mode);
+        mediaDescriptionObject-&gt;setString(midString(), mediaDescription.mid);
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorArray&gt; payloadsArray = InspectorArray::create();
</span><span class="cx"> 
</span><del>-        for (auto&amp; payload : mediaDescription-&gt;payloads()) {
</del><ins>+        for (auto&amp; payload : mediaDescription.payloads) {
</ins><span class="cx">             RefPtr&lt;InspectorObject&gt; payloadObject = InspectorObject::create();
</span><span class="cx"> 
</span><span class="cx">             payloadObject-&gt;setInteger(typeString(), payload.type);
</span><span class="lines">@@ -387,35 +387,35 @@
</span><span class="cx">         mediaDescriptionObject-&gt;setArray(payloadsString(), payloadsArray);
</span><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorObject&gt; rtcpObject = InspectorObject::create();
</span><del>-        rtcpObject-&gt;setBoolean(muxString(), mediaDescription-&gt;rtcpMux());
-        rtcpObject-&gt;setString(addressString(), mediaDescription-&gt;rtcpAddress());
-        rtcpObject-&gt;setInteger(portString(), mediaDescription-&gt;rtcpPort());
</del><ins>+        rtcpObject-&gt;setBoolean(muxString(), mediaDescription.rtcpMux);
+        rtcpObject-&gt;setString(addressString(), mediaDescription.rtcpAddress);
+        rtcpObject-&gt;setInteger(portString(), mediaDescription.rtcpPort);
</ins><span class="cx">         mediaDescriptionObject-&gt;setObject(rtcpString(), rtcpObject);
</span><span class="cx"> 
</span><del>-        mediaDescriptionObject-&gt;setString(mediaStreamIdString(), mediaDescription-&gt;mediaStreamId());
-        mediaDescriptionObject-&gt;setString(mediaStreamTrackIdString(), mediaDescription-&gt;mediaStreamTrackId());
</del><ins>+        mediaDescriptionObject-&gt;setString(mediaStreamIdString(), mediaDescription.mediaStreamId);
+        mediaDescriptionObject-&gt;setString(mediaStreamTrackIdString(), mediaDescription.mediaStreamTrackId);
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorObject&gt; dtlsObject = InspectorObject::create();
</span><del>-        dtlsObject-&gt;setString(setupString(), mediaDescription-&gt;dtlsSetup());
-        dtlsObject-&gt;setString(fingerprintHashFunctionString(), mediaDescription-&gt;dtlsFingerprintHashFunction());
-        dtlsObject-&gt;setString(fingerprintString(), mediaDescription-&gt;dtlsFingerprint());
</del><ins>+        dtlsObject-&gt;setString(setupString(), mediaDescription.dtlsSetup);
+        dtlsObject-&gt;setString(fingerprintHashFunctionString(), mediaDescription.dtlsFingerprintHashFunction);
+        dtlsObject-&gt;setString(fingerprintString(), mediaDescription.dtlsFingerprint);
</ins><span class="cx">         mediaDescriptionObject-&gt;setObject(dtlsString(), dtlsObject);
</span><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorArray&gt; ssrcsArray = InspectorArray::create();
</span><span class="cx"> 
</span><del>-        for (auto ssrc : mediaDescription-&gt;ssrcs())
</del><ins>+        for (auto ssrc : mediaDescription.ssrcs)
</ins><span class="cx">             ssrcsArray-&gt;pushDouble(ssrc);
</span><span class="cx">         mediaDescriptionObject-&gt;setArray(ssrcsString(), ssrcsArray);
</span><span class="cx"> 
</span><del>-        mediaDescriptionObject-&gt;setString(cnameString(), mediaDescription-&gt;cname());
</del><ins>+        mediaDescriptionObject-&gt;setString(cnameString(), mediaDescription.cname);
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorObject&gt; iceObject = InspectorObject::create();
</span><del>-        iceObject-&gt;setString(ufragString(), mediaDescription-&gt;iceUfrag());
-        iceObject-&gt;setString(passwordString(), mediaDescription-&gt;icePassword());
</del><ins>+        iceObject-&gt;setString(ufragString(), mediaDescription.iceUfrag);
+        iceObject-&gt;setString(passwordString(), mediaDescription.icePassword);
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;InspectorArray&gt; candidatesArray = InspectorArray::create();
</span><span class="cx"> 
</span><del>-        for (auto&amp; candidate : mediaDescription-&gt;iceCandidates())
</del><ins>+        for (auto&amp; candidate : mediaDescription.iceCandidates)
</ins><span class="cx">             candidatesArray-&gt;pushObject(createCandidateObject(candidate));
</span><span class="cx"> 
</span><span class="cx">         iceObject-&gt;setArray(candidatesString(), candidatesArray);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamMediaEndpointSessionConfigurationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -52,8 +52,9 @@
</span><span class="cx">     unsigned sessionVersion() const { return m_sessionVersion; }
</span><span class="cx">     void setSessionVersion(unsigned sessionVersion) { m_sessionVersion = sessionVersion; }
</span><span class="cx"> 
</span><del>-    const Vector&lt;RefPtr&lt;PeerMediaDescription&gt;&gt;&amp; mediaDescriptions() const { return m_mediaDescriptions; }
-    void addMediaDescription(RefPtr&lt;PeerMediaDescription&gt;&amp;&amp; description) { m_mediaDescriptions.append(WTFMove(description)); }
</del><ins>+    Vector&lt;PeerMediaDescription&gt;&amp; mediaDescriptions() { return m_mediaDescriptions; }
+    const Vector&lt;PeerMediaDescription&gt;&amp; mediaDescriptions() const { return m_mediaDescriptions; }
+    void addMediaDescription(PeerMediaDescription&amp;&amp; description) { m_mediaDescriptions.append(WTFMove(description)); }
</ins><span class="cx"> 
</span><span class="cx">     RefPtr&lt;MediaEndpointSessionConfiguration&gt; clone() const
</span><span class="cx">     {
</span><span class="lines">@@ -60,10 +61,8 @@
</span><span class="cx">         RefPtr&lt;MediaEndpointSessionConfiguration&gt; copy = create();
</span><span class="cx">         copy-&gt;m_sessionId = m_sessionId;
</span><span class="cx">         copy-&gt;m_sessionVersion = m_sessionVersion;
</span><ins>+        copy-&gt;m_mediaDescriptions = m_mediaDescriptions;
</ins><span class="cx"> 
</span><del>-        for (auto&amp; mdesc : m_mediaDescriptions)
-            copy-&gt;m_mediaDescriptions.append(mdesc-&gt;clone());
-
</del><span class="cx">         return copy;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -77,7 +76,7 @@
</span><span class="cx">     uint64_t m_sessionId;
</span><span class="cx">     unsigned m_sessionVersion { 0 };
</span><span class="cx"> 
</span><del>-    Vector&lt;RefPtr&lt;PeerMediaDescription&gt;&gt; m_mediaDescriptions;
</del><ins>+    Vector&lt;PeerMediaDescription&gt; m_mediaDescriptions;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamPeerMediaDescriptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/PeerMediaDescription.h (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/PeerMediaDescription.h        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/platform/mediastream/PeerMediaDescription.h        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -28,8 +28,7 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef PeerMediaDescription_h
-#define PeerMediaDescription_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><span class="lines">@@ -36,147 +35,43 @@
</span><span class="cx"> #include &quot;IceCandidate.h&quot;
</span><span class="cx"> #include &quot;MediaPayload.h&quot;
</span><span class="cx"> #include &quot;RealtimeMediaSource.h&quot;
</span><del>-#include &lt;wtf/RefCounted.h&gt;
</del><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class PeerMediaDescription : public RefCounted&lt;PeerMediaDescription&gt; {
-public:
-    static RefPtr&lt;PeerMediaDescription&gt; create()
-    {
-        return adoptRef(new PeerMediaDescription());
-    }
-    virtual ~PeerMediaDescription() { }
</del><ins>+struct PeerMediaDescription {
+    void addPayload(MediaPayload&amp;&amp; payload) { payloads.append(WTFMove(payload)); }
+    void addSsrc(unsigned ssrc) { ssrcs.append(ssrc); }
+    void clearSsrcs() { ssrcs.clear(); }
+    void addIceCandidate(IceCandidate&amp;&amp; candidate) { iceCandidates.append(WTFMove(candidate)); }
</ins><span class="cx"> 
</span><del>-    const String&amp; type() const { return m_type; }
-    void setType(const String&amp; type) { m_type = type; }
</del><ins>+    String type;
+    unsigned short port { 9 };
+    String address { &quot;0.0.0.0&quot; };
+    String mode { ASCIILiteral { &quot;sendrecv&quot; } };
+    String mid;
</ins><span class="cx"> 
</span><del>-    unsigned short port() const { return m_port; }
-    void setPort(unsigned short port) { m_port = port; }
</del><ins>+    Vector&lt;MediaPayload&gt; payloads;
</ins><span class="cx"> 
</span><del>-    const String&amp; address() const { return m_address; }
-    void setAddress(const String&amp; address) { m_address = address; }
</del><ins>+    bool rtcpMux { true };
+    String rtcpAddress;
+    unsigned short rtcpPort { 0 };
</ins><span class="cx"> 
</span><del>-    const String&amp; mode() const { return m_mode; }
-    void setMode(const String&amp; mode) { m_mode = mode; }
</del><ins>+    String mediaStreamId;
+    String mediaStreamTrackId;
</ins><span class="cx"> 
</span><del>-    const String&amp; mid() const { return m_mid; }
-    void setMid(const String&amp; mid) { m_mid = mid; }
</del><ins>+    String dtlsSetup { &quot;actpass&quot; };
+    String dtlsFingerprintHashFunction;
+    String dtlsFingerprint;
</ins><span class="cx"> 
</span><del>-    const Vector&lt;MediaPayload&gt;&amp; payloads() const { return m_payloads; }
-    void addPayload(MediaPayload&amp;&amp; payload) { m_payloads.append(WTFMove(payload)); }
-    void setPayloads(Vector&lt;MediaPayload&gt;&amp;&amp; payloads) { m_payloads = payloads; }
-    void setPayloads(const Vector&lt;MediaPayload&gt;&amp; payloads) { m_payloads = payloads; }
</del><ins>+    Vector&lt;unsigned&gt; ssrcs;
+    String cname;
</ins><span class="cx"> 
</span><del>-    bool rtcpMux() const { return m_rtcpMux; }
-    void setRtcpMux(bool rtcpMux) { m_rtcpMux = rtcpMux; }
-
-    const String&amp; rtcpAddress() const { return m_rtcpAddress; }
-    void setRtcpAddress(const String&amp; rtcpAddress) { m_rtcpAddress = rtcpAddress; }
-
-    unsigned short rtcpPort() const { return m_rtcpPort; }
-    void setRtcpPort(unsigned short rtcpPort) { m_rtcpPort = rtcpPort; }
-
-    const String&amp; mediaStreamId() const { return m_mediaStreamId; }
-    void setMediaStreamId(const String&amp; mediaStreamId) { m_mediaStreamId = mediaStreamId; }
-
-    const String&amp; mediaStreamTrackId() const { return m_mediaStreamTrackId; }
-    void setMediaStreamTrackId(const String&amp; mediaStreamTrackId) { m_mediaStreamTrackId = mediaStreamTrackId; }
-
-    const String&amp; dtlsSetup() const { return m_dtlsSetup; }
-    void setDtlsSetup(const String&amp; dtlsSetup) { m_dtlsSetup = dtlsSetup; }
-
-    const String&amp; dtlsFingerprintHashFunction() const { return m_dtlsFingerprintHashFunction; }
-    void setDtlsFingerprintHashFunction(const String&amp; dtlsFingerprintHashFunction) { m_dtlsFingerprintHashFunction = dtlsFingerprintHashFunction; }
-
-    const String&amp; dtlsFingerprint() const { return m_dtlsFingerprint; }
-    void setDtlsFingerprint(const String&amp; dtlsFingerprint) { m_dtlsFingerprint = dtlsFingerprint; }
-
-    const String&amp; cname() const { return m_cname; }
-    void setCname(const String&amp; cname) { m_cname = cname; }
-
-    const Vector&lt;unsigned&gt;&amp; ssrcs() const { return m_ssrcs; }
-    void addSsrc(unsigned ssrc) { m_ssrcs.append(ssrc); }
-    void clearSsrcs() { m_ssrcs.clear(); }
-
-    const String&amp; iceUfrag() const { return m_iceUfrag; }
-    void setIceUfrag(const String&amp; iceUfrag) { m_iceUfrag = iceUfrag; }
-
-    const String&amp; icePassword() const { return m_icePassword; }
-    void setIcePassword(const String&amp; icePassword) { m_icePassword = icePassword; }
-
-    const Vector&lt;IceCandidate&gt;&amp; iceCandidates() const { return m_iceCandidates; }
-    void addIceCandidate(IceCandidate&amp;&amp; candidate) { m_iceCandidates.append(WTFMove(candidate)); }
-
-    RefPtr&lt;PeerMediaDescription&gt; clone() const
-    {
-        RefPtr&lt;PeerMediaDescription&gt; copy = create();
-
-        copy-&gt;m_type = String(m_type);
-        copy-&gt;m_port = m_port;
-        copy-&gt;m_address = String(m_address);
-        copy-&gt;m_mode = String(m_mode);
-        copy-&gt;m_mid = String(m_mid);
-
-        copy-&gt;m_payloads = m_payloads;
-
-        copy-&gt;m_rtcpMux = m_rtcpMux;
-        copy-&gt;m_rtcpAddress = String(m_rtcpAddress);
-        copy-&gt;m_rtcpPort = m_rtcpPort;
-
-        copy-&gt;m_mediaStreamId = String(m_mediaStreamId);
-        copy-&gt;m_mediaStreamTrackId = String(m_mediaStreamTrackId);
-
-        copy-&gt;m_dtlsSetup = String(m_dtlsSetup);
-        copy-&gt;m_dtlsFingerprintHashFunction = String(m_dtlsFingerprintHashFunction);
-        copy-&gt;m_dtlsFingerprint = String(m_dtlsFingerprint);
-
-        for (auto ssrc : m_ssrcs)
-            copy-&gt;m_ssrcs.append(ssrc);
-
-        copy-&gt;m_cname = String(m_cname);
-
-        copy-&gt;m_iceUfrag = String(m_iceUfrag);
-        copy-&gt;m_icePassword = String(m_icePassword);
-
-        copy-&gt;m_iceCandidates = m_iceCandidates;
-
-        return copy;
-    }
-
-private:
-    PeerMediaDescription() { }
-
-    String m_type;
-    unsigned short m_port { 9 };
-    String m_address { &quot;0.0.0.0&quot; };
-    String m_mode { &quot;sendrecv&quot; };
-    String m_mid;
-
-    Vector&lt;MediaPayload&gt; m_payloads;
-
-    bool m_rtcpMux { true };
-    String m_rtcpAddress;
-    unsigned short m_rtcpPort { 0 };
-
-    String m_mediaStreamId;
-    String m_mediaStreamTrackId;
-
-    String m_dtlsSetup { &quot;actpass&quot; };
-    String m_dtlsFingerprintHashFunction;
-    String m_dtlsFingerprint;
-
-    Vector&lt;unsigned&gt; m_ssrcs;
-    String m_cname;
-
-    String m_iceUfrag;
-    String m_icePassword;
-    Vector&lt;IceCandidate&gt; m_iceCandidates;
</del><ins>+    String iceUfrag;
+    String icePassword;
+    Vector&lt;IceCandidate&gt; iceCandidates;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(WEB_RTC)
</span><del>-
-#endif // PeerMediaDescription_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamopenwebrtcMediaEndpointOwrcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -217,8 +217,8 @@
</span><span class="cx">     for (unsigned i = m_transceivers.size(); i &lt; configuration-&gt;mediaDescriptions().size(); ++i) {
</span><span class="cx">         TransceiverConfig config;
</span><span class="cx">         config.type = SessionTypeMedia;
</span><del>-        config.isDtlsClient = configuration-&gt;mediaDescriptions()[i]-&gt;dtlsSetup() == &quot;active&quot;;
-        config.mid = configuration-&gt;mediaDescriptions()[i]-&gt;mid();
</del><ins>+        config.isDtlsClient = configuration-&gt;mediaDescriptions()[i].dtlsSetup == &quot;active&quot;;
+        config.mid = configuration-&gt;mediaDescriptions()[i].mid;
</ins><span class="cx">         transceiverConfigs.append(WTFMove(config));
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -227,7 +227,7 @@
</span><span class="cx">     // Prepare the new sessions.
</span><span class="cx">     for (unsigned i = m_numberOfReceivePreparedSessions; i &lt; m_transceivers.size(); ++i) {
</span><span class="cx">         OwrSession* session = m_transceivers[i]-&gt;session();
</span><del>-        prepareMediaSession(OWR_MEDIA_SESSION(session), configuration-&gt;mediaDescriptions()[i].get(), isInitiator);
</del><ins>+        prepareMediaSession(OWR_MEDIA_SESSION(session), &amp;configuration-&gt;mediaDescriptions()[i], isInitiator);
</ins><span class="cx">         owr_transport_agent_add_session(m_transportAgent, session);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -252,8 +252,8 @@
</span><span class="cx">     for (unsigned i = m_transceivers.size(); i &lt; configuration-&gt;mediaDescriptions().size(); ++i) {
</span><span class="cx">         TransceiverConfig config;
</span><span class="cx">         config.type = SessionTypeMedia;
</span><del>-        config.isDtlsClient = configuration-&gt;mediaDescriptions()[i]-&gt;dtlsSetup() != &quot;active&quot;;
-        config.mid = configuration-&gt;mediaDescriptions()[i]-&gt;mid();
</del><ins>+        config.isDtlsClient = configuration-&gt;mediaDescriptions()[i].dtlsSetup != &quot;active&quot;;
+        config.mid = configuration-&gt;mediaDescriptions()[i].mid;
</ins><span class="cx">         transceiverConfigs.append(WTFMove(config));
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -260,25 +260,25 @@
</span><span class="cx">     ensureTransportAgentAndTransceivers(isInitiator, transceiverConfigs);
</span><span class="cx"> 
</span><span class="cx">     for (unsigned i = 0; i &lt; m_transceivers.size(); ++i) {
</span><del>-        OwrSession* session = m_transceivers[i]-&gt;session();
-        PeerMediaDescription&amp; mdesc = *configuration-&gt;mediaDescriptions()[i];
</del><ins>+        auto* session = m_transceivers[i]-&gt;session();
+        auto&amp; mdesc = configuration-&gt;mediaDescriptions()[i];
</ins><span class="cx"> 
</span><del>-        if (mdesc.type() == &quot;audio&quot; || mdesc.type() == &quot;video&quot;)
-            g_object_set(session, &quot;rtcp-mux&quot;, mdesc.rtcpMux(), nullptr);
</del><ins>+        if (mdesc.type == &quot;audio&quot; || mdesc.type == &quot;video&quot;)
+            g_object_set(session, &quot;rtcp-mux&quot;, mdesc.rtcpMux, nullptr);
</ins><span class="cx"> 
</span><del>-        if (mdesc.iceCandidates().size()) {
-            for (auto&amp; candidate : mdesc.iceCandidates())
-                internalAddRemoteCandidate(session, candidate, mdesc.iceUfrag(), mdesc.icePassword());
</del><ins>+        if (mdesc.iceCandidates.size()) {
+            for (auto&amp; candidate : mdesc.iceCandidates)
+                internalAddRemoteCandidate(session, candidate, mdesc.iceUfrag, mdesc.icePassword);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (i &lt; m_numberOfSendPreparedSessions)
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><del>-        if (!sendSourceMap.contains(mdesc.mid()))
</del><ins>+        if (!sendSourceMap.contains(mdesc.mid))
</ins><span class="cx">             continue;
</span><span class="cx"> 
</span><span class="cx">         const MediaPayload* payload = nullptr;
</span><del>-        for (auto&amp; p : mdesc.payloads()) {
</del><ins>+        for (auto&amp; p : mdesc.payloads) {
</ins><span class="cx">             if (p.encodingName.convertToASCIIUppercase() != &quot;RTX&quot;) {
</span><span class="cx">                 payload = &amp;p;
</span><span class="cx">                 break;
</span><span class="lines">@@ -288,14 +288,14 @@
</span><span class="cx">         if (!payload)
</span><span class="cx">             return UpdateResult::Failed;
</span><span class="cx"> 
</span><del>-        auto* rtxPayload = findRtxPayload(mdesc.payloads(), payload-&gt;type);
-        auto* source = static_cast&lt;RealtimeMediaSourceOwr*&gt;(sendSourceMap.get(mdesc.mid()));
</del><ins>+        auto* rtxPayload = findRtxPayload(mdesc.payloads, payload-&gt;type);
+        auto* source = static_cast&lt;RealtimeMediaSourceOwr*&gt;(sendSourceMap.get(mdesc.mid));
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(codecTypes.find(payload-&gt;encodingName.convertToASCIIUppercase()) != notFound);
</span><span class="cx">         auto codecType = static_cast&lt;OwrCodecType&gt;(codecTypes.find(payload-&gt;encodingName.convertToASCIIUppercase()));
</span><span class="cx"> 
</span><span class="cx">         OwrPayload* sendPayload;
</span><del>-        if (mdesc.type() == &quot;audio&quot;)
</del><ins>+        if (mdesc.type == &quot;audio&quot;)
</ins><span class="cx">             sendPayload = owr_audio_payload_new(codecType, payload-&gt;type, payload-&gt;clockRate, payload-&gt;channels);
</span><span class="cx">         else {
</span><span class="cx">             sendPayload = owr_video_payload_new(codecType, payload-&gt;type, payload-&gt;clockRate, payload-&gt;ccmfir, payload-&gt;nackpli);
</span><span class="lines">@@ -466,8 +466,8 @@
</span><span class="cx"> 
</span><span class="cx"> void MediaEndpointOwr::prepareSession(OwrSession* session, PeerMediaDescription* mediaDescription)
</span><span class="cx"> {
</span><del>-    g_object_set_data_full(G_OBJECT(session), &quot;ice-ufrag&quot;, g_strdup(mediaDescription-&gt;iceUfrag().ascii().data()), g_free);
-    g_object_set_data_full(G_OBJECT(session), &quot;ice-password&quot;, g_strdup(mediaDescription-&gt;icePassword().ascii().data()), g_free);
</del><ins>+    g_object_set_data_full(G_OBJECT(session), &quot;ice-ufrag&quot;, g_strdup(mediaDescription-&gt;iceUfrag.ascii().data()), g_free);
+    g_object_set_data_full(G_OBJECT(session), &quot;ice-password&quot;, g_strdup(mediaDescription-&gt;icePassword.ascii().data()), g_free);
</ins><span class="cx"> 
</span><span class="cx">     g_signal_connect(session, &quot;on-new-candidate&quot;, G_CALLBACK(gotCandidate), this);
</span><span class="cx">     g_signal_connect(session, &quot;on-candidate-gathering-done&quot;, G_CALLBACK(candidateGatheringDone), this);
</span><span class="lines">@@ -478,28 +478,28 @@
</span><span class="cx"> {
</span><span class="cx">     prepareSession(OWR_SESSION(mediaSession), mediaDescription);
</span><span class="cx"> 
</span><del>-    bool useRtcpMux = !isInitiator &amp;&amp; mediaDescription-&gt;rtcpMux();
</del><ins>+    bool useRtcpMux = !isInitiator &amp;&amp; mediaDescription-&gt;rtcpMux;
</ins><span class="cx">     g_object_set(mediaSession, &quot;rtcp-mux&quot;, useRtcpMux, nullptr);
</span><span class="cx"> 
</span><del>-    if (!mediaDescription-&gt;cname().isEmpty() &amp;&amp; mediaDescription-&gt;ssrcs().size()) {
-        g_object_set(mediaSession, &quot;cname&quot;, mediaDescription-&gt;cname().ascii().data(),
-            &quot;send-ssrc&quot;, mediaDescription-&gt;ssrcs()[0],
</del><ins>+    if (!mediaDescription-&gt;cname.isEmpty() &amp;&amp; mediaDescription-&gt;ssrcs.size()) {
+        g_object_set(mediaSession, &quot;cname&quot;, mediaDescription-&gt;cname.ascii().data(),
+            &quot;send-ssrc&quot;, mediaDescription-&gt;ssrcs[0],
</ins><span class="cx">             nullptr);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     g_signal_connect(mediaSession, &quot;on-incoming-source&quot;, G_CALLBACK(gotIncomingSource), this);
</span><span class="cx"> 
</span><del>-    for (auto&amp; payload : mediaDescription-&gt;payloads()) {
</del><ins>+    for (auto&amp; payload : mediaDescription-&gt;payloads) {
</ins><span class="cx">         if (payload.encodingName.convertToASCIIUppercase() == &quot;RTX&quot;)
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><del>-        auto* rtxPayload = findRtxPayload(mediaDescription-&gt;payloads(), payload.type);
</del><ins>+        auto* rtxPayload = findRtxPayload(mediaDescription-&gt;payloads, payload.type);
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(codecTypes.find(payload.encodingName) != notFound);
</span><span class="cx">         OwrCodecType codecType = static_cast&lt;OwrCodecType&gt;(codecTypes.find(payload.encodingName.convertToASCIIUppercase()));
</span><span class="cx"> 
</span><span class="cx">         OwrPayload* receivePayload;
</span><del>-        if (mediaDescription-&gt;type() == &quot;audio&quot;)
</del><ins>+        if (mediaDescription-&gt;type == &quot;audio&quot;)
</ins><span class="cx">             receivePayload = owr_audio_payload_new(codecType, payload.type, payload.clockRate, payload.channels);
</span><span class="cx">         else {
</span><span class="cx">             receivePayload = owr_video_payload_new(codecType, payload.type, payload.clockRate, payload.ccmfir, payload.nackpli);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamopenwebrtcMediaEndpointOwrh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -43,10 +43,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class PeerMediaDescription;
</del><span class="cx"> class RealtimeMediaSourceOwr;
</span><span class="cx"> class RTCConfigurationPrivate;
</span><span class="cx"> 
</span><ins>+struct PeerMediaDescription;
+
</ins><span class="cx"> class OwrTransceiver : public RefCounted&lt;OwrTransceiver&gt; {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;OwrTransceiver&gt; create(const String&amp; mid, OwrSession* session)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockMockMediaEndpointcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp (208042 => 208043)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp        2016-10-28 09:40:44 UTC (rev 208042)
+++ trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp        2016-10-28 11:14:51 UTC (rev 208043)
</span><span class="lines">@@ -225,8 +225,8 @@
</span><span class="cx"> void MockMediaEndpoint::updateConfigurationMids(const MediaEndpointSessionConfiguration&amp; configuration)
</span><span class="cx"> {
</span><span class="cx">     Vector&lt;String&gt; mids;
</span><del>-    for (const RefPtr&lt;PeerMediaDescription&gt;&amp; mediaDescription : configuration.mediaDescriptions())
-        mids.append(mediaDescription-&gt;mid());
</del><ins>+    for (auto&amp; mediaDescription : configuration.mediaDescriptions())
+        mids.append(mediaDescription.mid);
</ins><span class="cx">     m_mids.swap(mids);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>