Diff
Modified: trunk/Source/WebCore/ChangeLog (207896 => 207897)
--- trunk/Source/WebCore/ChangeLog 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/ChangeLog 2016-10-26 14:49:48 UTC (rev 207897)
@@ -1,3 +1,47 @@
+2016-10-26 Youenn Fablet <[email protected]>
+
+ IceCandidate does not need to be refcounted
+ https://bugs.webkit.org/show_bug.cgi?id=163944
+
+ Reviewed by Eric Carlson.
+
+ No change of behavior.
+
+ Simplifying IceCandidate class into a simple structure, no longer refcounted.
+ Updated call sites accordingly.
+ Updated SDP parsing of candidates to return a Variant instead of having both a return and an out parameter.
+
+ * Modules/mediastream/MediaEndpointPeerConnection.cpp:
+ (WebCore::MediaEndpointPeerConnection::addIceCandidateTask):
+ (WebCore::MediaEndpointPeerConnection::gotIceCandidate):
+ * Modules/mediastream/MediaEndpointPeerConnection.h:
+ * Modules/mediastream/SDPProcessor.cpp:
+ (WebCore::createCandidateObject):
+ (WebCore::createCandidate):
+ (WebCore::iceCandidateFromJSON):
+ (WebCore::configurationToJSON):
+ (WebCore::SDPProcessor::parseCandidateLine):
+ * Modules/mediastream/SDPProcessor.h:
+ (WebCore::SDPProcessor::ParsingResult::parsingStatus):
+ (WebCore::SDPProcessor::ParsingResult::candidate):
+ * platform/mediastream/IceCandidate.h:
+ * platform/mediastream/MediaEndpoint.cpp:
+ * platform/mediastream/MediaEndpoint.h:
+ * platform/mediastream/PeerMediaDescription.h:
+ (WebCore::PeerMediaDescription::iceCandidates):
+ (WebCore::PeerMediaDescription::addIceCandidate):
+ (WebCore::PeerMediaDescription::clone):
+ * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
+ (WebCore::MediaEndpointOwr::updateSendConfiguration):
+ (WebCore::MediaEndpointOwr::addRemoteCandidate):
+ (WebCore::MediaEndpointOwr::dispatchNewIceCandidate):
+ (WebCore::MediaEndpointOwr::internalAddRemoteCandidate):
+ * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
+ * platform/mock/MockMediaEndpoint.cpp:
+ (WebCore::MockMediaEndpoint::addRemoteCandidate):
+ (WebCore::MockMediaEndpoint::dispatchFakeIceCandidates):
+ * platform/mock/MockMediaEndpoint.h:
+
2016-10-26 Andreas Kling <[email protected]>
Fix mach port leak in ResourceUsageThread.
Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp (207896 => 207897)
--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp 2016-10-26 14:49:48 UTC (rev 207897)
@@ -676,10 +676,9 @@
return;
}
- RefPtr<IceCandidate> candidate;
- SDPProcessor::Result result = m_sdpProcessor->parseCandidateLine(rtcCandidate.candidate(), candidate);
- if (result != SDPProcessor::Result::Success) {
- if (result == SDPProcessor::Result::ParseError)
+ auto result = m_sdpProcessor->parseCandidateLine(rtcCandidate.candidate());
+ if (result.parsingStatus() != SDPProcessor::Result::Success) {
+ if (result.parsingStatus() == SDPProcessor::Result::ParseError)
promise.reject(OperationError, "Invalid candidate content");
else
LOG_ERROR("SDPProcessor internal error");
@@ -686,10 +685,9 @@
return;
}
- targetMediaDescription->addIceCandidate(candidate.copyRef());
+ m_mediaEndpoint->addRemoteCandidate(result.candidate(), targetMediaDescription->mid(), targetMediaDescription->iceUfrag(), targetMediaDescription->icePassword());
- m_mediaEndpoint->addRemoteCandidate(*candidate, targetMediaDescription->mid(), targetMediaDescription->iceUfrag(),
- targetMediaDescription->icePassword());
+ targetMediaDescription->addIceCandidate(WTFMove(result.candidate()));
promise.resolve(nullptr);
}
@@ -835,7 +833,7 @@
startRunningTasks();
}
-void MediaEndpointPeerConnection::gotIceCandidate(const String& mid, RefPtr<IceCandidate>&& candidate)
+void MediaEndpointPeerConnection::gotIceCandidate(const String& mid, IceCandidate&& candidate)
{
ASSERT(isMainThread());
@@ -850,19 +848,18 @@
}
ASSERT(mediaDescriptionIndex != notFound);
- PeerMediaDescription& mediaDescription = *mediaDescriptions[mediaDescriptionIndex];
- mediaDescription.addIceCandidate(candidate.copyRef());
-
String candidateLine;
- SDPProcessor::Result result = m_sdpProcessor->generateCandidateLine(*candidate, candidateLine);
+ auto result = m_sdpProcessor->generateCandidateLine(candidate, candidateLine);
if (result != SDPProcessor::Result::Success) {
LOG_ERROR("SDPProcessor internal error");
return;
}
- RefPtr<RTCIceCandidate> iceCandidate = RTCIceCandidate::create(candidateLine, mid, mediaDescriptionIndex);
+ auto& mediaDescription = mediaDescriptions[mediaDescriptionIndex];
+ ASSERT(mediaDescription);
+ mediaDescription->addIceCandidate(WTFMove(candidate));
- m_client->fireEvent(RTCIceCandidateEvent::create(false, false, WTFMove(iceCandidate)));
+ m_client->fireEvent(RTCIceCandidateEvent::create(false, false, RTCIceCandidate::create(candidateLine, mid, mediaDescriptionIndex)));
}
void MediaEndpointPeerConnection::doneGatheringCandidates(const String& mid)
Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h (207896 => 207897)
--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h 2016-10-26 14:49:48 UTC (rev 207897)
@@ -108,7 +108,7 @@
// MediaEndpointClient
void gotDtlsFingerprint(const String& fingerprint, const String& fingerprintFunction) override;
- void gotIceCandidate(const String& mid, RefPtr<IceCandidate>&&) override;
+ void gotIceCandidate(const String& mid, IceCandidate&&) override;
void doneGatheringCandidates(const String& mid) override;
void iceTransportStateChanged(const String& mid, MediaEndpoint::IceTransportState) override;
Modified: trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp (207896 => 207897)
--- trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/Modules/mediastream/SDPProcessor.cpp 2016-10-26 14:49:48 UTC (rev 207897)
@@ -111,58 +111,58 @@
{
RefPtr<InspectorObject> candidateObject = InspectorObject::create();
- candidateObject->setString(typeString(), candidate.type());
- candidateObject->setString(foundationString(), candidate.foundation());
- candidateObject->setInteger(componentIdString(), candidate.componentId());
- candidateObject->setString(transportString(), candidate.transport());
- candidateObject->setInteger(priorityString(), candidate.priority());
- candidateObject->setString(addressString(), candidate.address());
- candidateObject->setInteger(portString(), candidate.port());
- if (!candidate.tcpType().isEmpty())
- candidateObject->setString(tcpTypeString(), candidate.tcpType());
- if (candidate.type().convertToASCIIUppercase() != "HOST") {
- candidateObject->setString(relatedAddressString(), candidate.relatedAddress());
- candidateObject->setInteger(relatedPortString(), candidate.relatedPort());
+ candidateObject->setString(typeString(), candidate.type);
+ candidateObject->setString(foundationString(), candidate.foundation);
+ candidateObject->setInteger(componentIdString(), candidate.componentId);
+ candidateObject->setString(transportString(), candidate.transport);
+ candidateObject->setInteger(priorityString(), candidate.priority);
+ candidateObject->setString(addressString(), candidate.address);
+ candidateObject->setInteger(portString(), candidate.port);
+ if (!candidate.tcpType.isEmpty())
+ candidateObject->setString(tcpTypeString(), candidate.tcpType);
+ if (candidate.type.convertToASCIIUppercase() != "HOST") {
+ candidateObject->setString(relatedAddressString(), candidate.relatedAddress);
+ candidateObject->setInteger(relatedPortString(), candidate.relatedPort);
}
return candidateObject;
}
-static RefPtr<IceCandidate> createCandidate(const InspectorObject& candidateObject)
+static IceCandidate createCandidate(const InspectorObject& candidateObject)
{
- RefPtr<IceCandidate> candidate = IceCandidate::create();
+ IceCandidate candidate;
String stringValue;
unsigned intValue;
if (candidateObject.getString(typeString(), stringValue))
- candidate->setType(stringValue);
+ candidate.type = stringValue;
if (candidateObject.getString(foundationString(), stringValue))
- candidate->setFoundation(stringValue);
+ candidate.foundation = stringValue;
if (candidateObject.getInteger(componentIdString(), intValue))
- candidate->setComponentId(intValue);
+ candidate.componentId = intValue;
if (candidateObject.getString(transportString(), stringValue))
- candidate->setTransport(stringValue);
+ candidate.transport = stringValue;
if (candidateObject.getInteger(priorityString(), intValue))
- candidate->setPriority(intValue);
+ candidate.priority = intValue;
if (candidateObject.getString(addressString(), stringValue))
- candidate->setAddress(stringValue);
+ candidate.address = stringValue;
if (candidateObject.getInteger(portString(), intValue))
- candidate->setPort(intValue);
+ candidate.port = intValue;
if (candidateObject.getString(tcpTypeString(), stringValue))
- candidate->setTcpType(stringValue);
+ candidate.tcpType = stringValue;
if (candidateObject.getString(relatedAddressString(), stringValue))
- candidate->setRelatedAddress(stringValue);
+ candidate.relatedAddress = stringValue;
if (candidateObject.getInteger(relatedPortString(), intValue))
- candidate->setRelatedPort(intValue);
+ candidate.relatedPort = intValue;
return candidate;
}
@@ -327,15 +327,15 @@
return configuration;
}
-static RefPtr<IceCandidate> iceCandidateFromJSON(const String& json)
+static Optional<IceCandidate> iceCandidateFromJSON(const String& json)
{
RefPtr<InspectorValue> value;
if (!InspectorValue::parseJSON(json, value))
- return nullptr;
+ return Nullopt;
RefPtr<InspectorObject> candidateObject;
if (!value->asObject(candidateObject))
- return nullptr;
+ return Nullopt;
return createCandidate(*candidateObject);
}
@@ -415,8 +415,8 @@
RefPtr<InspectorArray> candidatesArray = InspectorArray::create();
- for (RefPtr<IceCandidate> candidate : mediaDescription->iceCandidates())
- candidatesArray->pushObject(createCandidateObject(*candidate));
+ for (auto& candidate : mediaDescription->iceCandidates())
+ candidatesArray->pushObject(createCandidateObject(candidate));
iceObject->setArray(candidatesString(), candidatesArray);
mediaDescriptionObject->setObject(iceString(), iceObject);
@@ -470,21 +470,19 @@
return Result::Success;
}
-SDPProcessor::Result SDPProcessor::parseCandidateLine(const String& candidateLine, RefPtr<IceCandidate>& outCandidate) const
+SDPProcessor::ParsingResult SDPProcessor::parseCandidateLine(const String& candidateLine) const
{
String scriptOutput;
if (!callScript("parseCandidateLine", candidateLine, scriptOutput))
- return Result::InternalError;
+ return { Result::InternalError };
if (scriptOutput == "ParseError")
- return Result::ParseError;
+ return { Result::ParseError };
- RefPtr<IceCandidate> candidate = iceCandidateFromJSON(scriptOutput);
+ auto candidate = iceCandidateFromJSON(scriptOutput);
if (!candidate)
- return Result::InternalError;
-
- outCandidate = candidate;
- return Result::Success;
+ return { Result::InternalError };
+ return { WTFMove(candidate.value()) };
}
bool SDPProcessor::callScript(const String& functionName, const String& argument, String& outResult) const
Modified: trunk/Source/WebCore/Modules/mediastream/SDPProcessor.h (207896 => 207897)
--- trunk/Source/WebCore/Modules/mediastream/SDPProcessor.h 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/Modules/mediastream/SDPProcessor.h 2016-10-26 14:49:48 UTC (rev 207897)
@@ -37,6 +37,7 @@
#include "IceCandidate.h"
#include "MediaEndpointSessionConfiguration.h"
#include <wtf/RefPtr.h>
+#include <wtf/Variant.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
@@ -58,8 +59,15 @@
Result parse(const String& sdp, RefPtr<MediaEndpointSessionConfiguration>&) const;
Result generateCandidateLine(const IceCandidate&, String& outCandidateLine) const;
- Result parseCandidateLine(const String& candidateLine, RefPtr<IceCandidate>&) const;
+ struct ParsingResult {
+ Variant<IceCandidate, Result> result;
+
+ Result parsingStatus() const { return WTF::holds_alternative<IceCandidate>(result) ? Result::Success : WTF::get<SDPProcessor::Result>(result); }
+ IceCandidate& candidate() { return WTF::get<IceCandidate>(result); }
+ };
+ ParsingResult parseCandidateLine(const String& candidateLine) const;
+
private:
bool callScript(const String& functionName, const String& argument, String& outResult) const;
Modified: trunk/Source/WebCore/platform/mediastream/IceCandidate.h (207896 => 207897)
--- trunk/Source/WebCore/platform/mediastream/IceCandidate.h 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/platform/mediastream/IceCandidate.h 2016-10-26 14:49:48 UTC (rev 207897)
@@ -28,90 +28,41 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef IceCandidate_h
-#define IceCandidate_h
+#pragma once
#if ENABLE(WEB_RTC)
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
-class IceCandidate : public RefCounted<IceCandidate> {
-public:
- static RefPtr<IceCandidate> create()
- {
- return adoptRef(new IceCandidate());
- }
- virtual ~IceCandidate() { }
+struct IceCandidate {
+ String type;
+ String foundation;
+ unsigned componentId { 0 };
+ String transport;
+ unsigned long priority { 0 };
+ String address;
+ unsigned port { 0 };
+ String tcpType;
+ String relatedAddress;
+ unsigned relatedPort { 0 };
- const String& type() const { return m_type; }
- void setType(const String& type) { m_type = type; }
-
- const String& foundation() const { return m_foundation; }
- void setFoundation(const String& foundation) { m_foundation = foundation; }
-
- unsigned componentId() const { return m_componentId; }
- void setComponentId(unsigned componentId) { m_componentId = componentId; }
-
- const String& transport() const { return m_transport; }
- void setTransport(const String& transport) { m_transport = transport; }
-
- int priority() const { return m_priority; }
- void setPriority(int priority) { m_priority = priority; }
-
- const String& address() const { return m_address; }
- void setAddress(const String& address) { m_address = address; }
-
- unsigned port() const { return m_port; }
- void setPort(unsigned port) { m_port = port; }
-
- const String& tcpType() const { return m_tcpType; }
- void setTcpType(const String& tcpType) { m_tcpType = tcpType; }
-
- const String& relatedAddress() const { return m_relatedAddress; }
- void setRelatedAddress(const String& relatedAddress) { m_relatedAddress = relatedAddress; }
-
- unsigned relatedPort() const { return m_relatedPort; }
- void setRelatedPort(unsigned relatedPort) { m_relatedPort = relatedPort; }
-
- RefPtr<IceCandidate> clone() const
- {
- RefPtr<IceCandidate> copy = create();
-
- copy->m_type = String(m_type);
- copy->m_foundation = String(m_foundation);
- copy->m_componentId = m_componentId;
- copy->m_transport = String(m_transport);
- copy->m_priority = m_priority;
- copy->m_address = String(m_address);
- copy->m_port = m_port;
- copy->m_tcpType = String(m_tcpType);
- copy->m_relatedAddress = String(m_relatedAddress);
- copy->m_relatedPort = m_relatedPort;
-
- return copy;
- }
-
-private:
- IceCandidate() { }
-
- String m_type;
- String m_foundation;
- unsigned m_componentId { 0 };
- String m_transport;
- int m_priority { 0 };
- String m_address;
- unsigned m_port { 0 };
- String m_tcpType;
- String m_relatedAddress;
- unsigned m_relatedPort { 0 };
+ IceCandidate() = default;
+ IceCandidate(String&& type, String&& foundation, unsigned componentId, String&& transport, unsigned long priority, String&& address, unsigned port, String&& tcpType, String&& relatedAddress, unsigned relatedPort)
+ : type(WTFMove(type))
+ , foundation(WTFMove(foundation))
+ , componentId(componentId)
+ , transport(WTFMove(transport))
+ , priority(priority)
+ , address(WTFMove(address))
+ , port(port)
+ , tcpType(WTFMove(tcpType))
+ , relatedAddress(WTFMove(relatedAddress))
+ , relatedPort(relatedPort)
+ { }
};
} // namespace WebCore
#endif // ENABLE(WEB_RTC)
-
-#endif // IceCandidate_h
Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp (207896 => 207897)
--- trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp 2016-10-26 14:49:48 UTC (rev 207897)
@@ -67,7 +67,7 @@
UpdateResult updateReceiveConfiguration(MediaEndpointSessionConfiguration*, bool) override { return UpdateResult::Failed; }
UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&, bool) override { return UpdateResult::Failed; }
- void addRemoteCandidate(IceCandidate&, const String&, const String&, const String&) override { }
+ void addRemoteCandidate(const IceCandidate&, const String&, const String&, const String&) override { }
Ref<RealtimeMediaSource> createMutedRemoteSource(const String&, RealtimeMediaSource::Type) override { return EmptyRealtimeMediaSource::create(); }
void replaceSendSource(RealtimeMediaSource&, const String&) override { }
Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h (207896 => 207897)
--- trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h 2016-10-26 14:49:48 UTC (rev 207897)
@@ -39,7 +39,7 @@
namespace WebCore {
-class IceCandidate;
+struct IceCandidate;
class MediaEndpoint;
class MediaEndpointClient;
class MediaEndpointSessionConfiguration;
@@ -73,7 +73,7 @@
virtual UpdateResult updateReceiveConfiguration(MediaEndpointSessionConfiguration*, bool isInitiator) = 0;
virtual UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&, bool isInitiator) = 0;
- virtual void addRemoteCandidate(IceCandidate&, const String& mid, const String& ufrag, const String& password) = 0;
+ virtual void addRemoteCandidate(const IceCandidate&, const String& mid, const String& ufrag, const String& password) = 0;
virtual Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) = 0;
virtual void replaceSendSource(RealtimeMediaSource&, const String& mid) = 0;
@@ -87,7 +87,7 @@
class MediaEndpointClient {
public:
virtual void gotDtlsFingerprint(const String& fingerprint, const String& fingerprintFunction) = 0;
- virtual void gotIceCandidate(const String& mid, RefPtr<IceCandidate>&&) = 0;
+ virtual void gotIceCandidate(const String& mid, IceCandidate&&) = 0;
virtual void doneGatheringCandidates(const String& mid) = 0;
virtual void iceTransportStateChanged(const String& mid, MediaEndpoint::IceTransportState) = 0;
Modified: trunk/Source/WebCore/platform/mediastream/PeerMediaDescription.h (207896 => 207897)
--- trunk/Source/WebCore/platform/mediastream/PeerMediaDescription.h 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/platform/mediastream/PeerMediaDescription.h 2016-10-26 14:49:48 UTC (rev 207897)
@@ -106,8 +106,8 @@
const String& icePassword() const { return m_icePassword; }
void setIcePassword(const String& icePassword) { m_icePassword = icePassword; }
- const Vector<RefPtr<IceCandidate>>& iceCandidates() const { return m_iceCandidates; }
- void addIceCandidate(RefPtr<IceCandidate>&& candidate) { m_iceCandidates.append(WTFMove(candidate)); }
+ const Vector<IceCandidate>& iceCandidates() const { return m_iceCandidates; }
+ void addIceCandidate(IceCandidate&& candidate) { m_iceCandidates.append(WTFMove(candidate)); }
RefPtr<PeerMediaDescription> clone() const
{
@@ -141,8 +141,7 @@
copy->m_iceUfrag = String(m_iceUfrag);
copy->m_icePassword = String(m_icePassword);
- for (auto& candidate : m_iceCandidates)
- copy->m_iceCandidates.append(candidate->clone());
+ copy->m_iceCandidates = m_iceCandidates;
return copy;
}
@@ -174,7 +173,7 @@
String m_iceUfrag;
String m_icePassword;
- Vector<RefPtr<IceCandidate>> m_iceCandidates;
+ Vector<IceCandidate> m_iceCandidates;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp (207896 => 207897)
--- trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp 2016-10-26 14:49:48 UTC (rev 207897)
@@ -267,7 +267,7 @@
if (mdesc.iceCandidates().size()) {
for (auto& candidate : mdesc.iceCandidates())
- internalAddRemoteCandidate(session, *candidate, mdesc.iceUfrag(), mdesc.icePassword());
+ internalAddRemoteCandidate(session, candidate, mdesc.iceUfrag(), mdesc.icePassword());
}
if (i < m_numberOfSendPreparedSessions)
@@ -311,7 +311,7 @@
return UpdateResult::Success;
}
-void MediaEndpointOwr::addRemoteCandidate(IceCandidate& candidate, const String& mid, const String& ufrag, const String& password)
+void MediaEndpointOwr::addRemoteCandidate(const IceCandidate& candidate, const String& mid, const String& ufrag, const String& password)
{
for (auto& transceiver : m_transceivers) {
if (transceiver->mid() == mid) {
@@ -394,7 +394,7 @@
return nullptr;
}
-void MediaEndpointOwr::dispatchNewIceCandidate(const String& mid, RefPtr<IceCandidate>&& iceCandidate)
+void MediaEndpointOwr::dispatchNewIceCandidate(const String& mid, IceCandidate&& iceCandidate)
{
m_client.gotIceCandidate(mid, WTFMove(iceCandidate));
}
@@ -590,35 +590,35 @@
}
}
-void MediaEndpointOwr::internalAddRemoteCandidate(OwrSession* session, IceCandidate& candidate, const String& ufrag, const String& password)
+void MediaEndpointOwr::internalAddRemoteCandidate(OwrSession* session, const IceCandidate& candidate, const String& ufrag, const String& password)
{
gboolean rtcpMux;
g_object_get(session, "rtcp-mux", &rtcpMux, nullptr);
- if (rtcpMux && candidate.componentId() == OWR_COMPONENT_TYPE_RTCP)
+ if (rtcpMux && candidate.componentId == OWR_COMPONENT_TYPE_RTCP)
return;
- ASSERT(candidateTypes.find(candidate.type()) != notFound);
+ ASSERT(candidateTypes.find(candidate.type) != notFound);
- OwrCandidateType candidateType = static_cast<OwrCandidateType>(candidateTypes.find(candidate.type()));
- OwrComponentType componentId = static_cast<OwrComponentType>(candidate.componentId());
+ OwrCandidateType candidateType = static_cast<OwrCandidateType>(candidateTypes.find(candidate.type));
+ OwrComponentType componentId = static_cast<OwrComponentType>(candidate.componentId);
OwrTransportType transportType;
- if (candidate.transport().convertToASCIIUppercase() == "UDP")
+ if (candidate.transport.convertToASCIIUppercase() == "UDP")
transportType = OWR_TRANSPORT_TYPE_UDP;
else {
- ASSERT(candidateTcpTypes.find(candidate.tcpType()) != notFound);
- transportType = static_cast<OwrTransportType>(candidateTcpTypes.find(candidate.tcpType()));
+ ASSERT(candidateTcpTypes.find(candidate.tcpType) != notFound);
+ transportType = static_cast<OwrTransportType>(candidateTcpTypes.find(candidate.tcpType));
}
OwrCandidate* owrCandidate = owr_candidate_new(candidateType, componentId);
g_object_set(owrCandidate, "transport-type", transportType,
- "address", candidate.address().ascii().data(),
- "port", candidate.port(),
- "base-address", candidate.relatedAddress().ascii().data(),
- "base-port", candidate.relatedPort(),
- "priority", candidate.priority(),
- "foundation", candidate.foundation().ascii().data(),
+ "address", candidate.address.ascii().data(),
+ "port", candidate.port,
+ "base-address", candidate.relatedAddress.ascii().data(),
+ "base-port", candidate.relatedPort,
+ "priority", candidate.priority,
+ "foundation", candidate.foundation.ascii().data(),
"ufrag", ufrag.ascii().data(),
"password", password.ascii().data(),
nullptr);
@@ -652,24 +652,24 @@
ASSERT(candidateType >= 0 && candidateType < candidateTypes.size());
ASSERT(transportType >= 0 && transportType < candidateTcpTypes.size());
- RefPtr<IceCandidate> iceCandidate = IceCandidate::create();
- iceCandidate->setType(candidateTypes[candidateType]);
- iceCandidate->setFoundation(foundation);
- iceCandidate->setComponentId(componentId);
- iceCandidate->setPriority(priority);
- iceCandidate->setAddress(address);
- iceCandidate->setPort(port ? port : candidateDefaultPort);
+ IceCandidate iceCandidate;
+ iceCandidate.type = candidateTypes[candidateType];
+ iceCandidate.foundation = foundation;
+ iceCandidate.componentId = componentId;
+ iceCandidate.priority = priority;
+ iceCandidate.address = address;
+ iceCandidate.port = port ? port : candidateDefaultPort;
if (transportType == OWR_TRANSPORT_TYPE_UDP)
- iceCandidate->setTransport("UDP");
+ iceCandidate.transport = "UDP";
else {
- iceCandidate->setTransport("TCP");
- iceCandidate->setTcpType(candidateTcpTypes[transportType]);
+ iceCandidate.transport = "TCP";
+ iceCandidate.tcpType = candidateTcpTypes[transportType];
}
if (candidateType != OWR_CANDIDATE_TYPE_HOST) {
- iceCandidate->setRelatedAddress(relatedAddress);
- iceCandidate->setRelatedPort(relatedPort ? relatedPort : candidateDefaultPort);
+ iceCandidate.relatedAddress = relatedAddress;
+ iceCandidate.relatedPort = relatedPort ? relatedPort : candidateDefaultPort;
}
g_object_set(G_OBJECT(candidate), "ufrag", g_object_get_data(G_OBJECT(session), "ice-ufrag"),
Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h (207896 => 207897)
--- trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h 2016-10-26 14:49:48 UTC (rev 207897)
@@ -92,7 +92,7 @@
UpdateResult updateReceiveConfiguration(MediaEndpointSessionConfiguration*, bool isInitiator) override;
UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&, bool isInitiator) override;
- void addRemoteCandidate(IceCandidate&, const String& mid, const String& ufrag, const String& password) override;
+ void addRemoteCandidate(const IceCandidate&, const String& mid, const String& ufrag, const String& password) override;
Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) override;
void replaceMutedRemoteSourceMid(const String&, const String&) final;
@@ -104,7 +104,7 @@
const String& sessionMid(OwrSession*) const;
OwrTransceiver* matchTransceiverByMid(const String& mid) const;
- void dispatchNewIceCandidate(const String& mid, RefPtr<IceCandidate>&&);
+ void dispatchNewIceCandidate(const String& mid, IceCandidate&&);
void dispatchGatheringDone(const String& mid);
void processIceTransportStateChange(OwrSession*);
void dispatchDtlsFingerprint(gchar* privateKey, gchar* certificate, const String& fingerprint, const String& fingerprintFunction);
@@ -123,7 +123,7 @@
void prepareMediaSession(OwrMediaSession*, PeerMediaDescription*, bool isInitiator);
void ensureTransportAgentAndTransceivers(bool isInitiator, const Vector<TransceiverConfig>&);
- void internalAddRemoteCandidate(OwrSession*, IceCandidate&, const String& ufrag, const String& password);
+ void internalAddRemoteCandidate(OwrSession*, const IceCandidate&, const String& ufrag, const String& password);
Optional<MediaEndpointConfiguration> m_configuration;
GRegex* m_helperServerRegEx;
Modified: trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp (207896 => 207897)
--- trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp 2016-10-26 14:49:48 UTC (rev 207897)
@@ -173,7 +173,7 @@
return UpdateResult::Success;
}
-void MockMediaEndpoint::addRemoteCandidate(IceCandidate& candidate, const String& mid, const String& ufrag, const String& password)
+void MockMediaEndpoint::addRemoteCandidate(const IceCandidate& candidate, const String& mid, const String& ufrag, const String& password)
{
UNUSED_PARAM(candidate);
UNUSED_PARAM(mid);
@@ -232,39 +232,10 @@
void MockMediaEndpoint::dispatchFakeIceCandidates()
{
- RefPtr<IceCandidate> iceCandidate = IceCandidate::create();
- iceCandidate->setType("host");
- iceCandidate->setFoundation("1");
- iceCandidate->setComponentId(1);
- iceCandidate->setPriority(2013266431);
- iceCandidate->setAddress("192.168.0.100");
- iceCandidate->setPort(38838);
- iceCandidate->setTransport("UDP");
- m_fakeIceCandidates.append(WTFMove(iceCandidate));
+ m_fakeIceCandidates.append({ "host", "1", 1, "UDP", 2013266431, "192.168.0.100", 38838, { }, { }, 0 });
+ m_fakeIceCandidates.append({ "host", "2", 1, "TCP", 1019216383, "192.168.0.100", 9, "active", { }, 0 });
+ m_fakeIceCandidates.append({ "srflx", "3", 1, "UDP", 1677722111, "172.18.0.1", 47989, { }, "192.168.0.100", 47989 });
- iceCandidate = IceCandidate::create();
- iceCandidate->setType("host");
- iceCandidate->setFoundation("2");
- iceCandidate->setComponentId(1);
- iceCandidate->setPriority(1019216383);
- iceCandidate->setAddress("192.168.0.100");
- iceCandidate->setPort(9);
- iceCandidate->setTransport("TCP");
- iceCandidate->setTcpType("active");
- m_fakeIceCandidates.append(WTFMove(iceCandidate));
-
- iceCandidate = IceCandidate::create();
- iceCandidate->setType("srflx");
- iceCandidate->setFoundation("3");
- iceCandidate->setComponentId(1);
- iceCandidate->setPriority(1677722111);
- iceCandidate->setAddress("172.18.0.1");
- iceCandidate->setPort(47989);
- iceCandidate->setTransport("UDP");
- iceCandidate->setRelatedAddress("192.168.0.100");
- iceCandidate->setRelatedPort(47989);
- m_fakeIceCandidates.append(WTFMove(iceCandidate));
-
// Reverse order to use takeLast() while keeping the above order
m_fakeIceCandidates.reverse();
Modified: trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h (207896 => 207897)
--- trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h 2016-10-26 13:24:12 UTC (rev 207896)
+++ trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h 2016-10-26 14:49:48 UTC (rev 207897)
@@ -55,7 +55,7 @@
UpdateResult updateReceiveConfiguration(MediaEndpointSessionConfiguration*, bool isInitiator) final;
UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&, bool isInitiator) final;
- void addRemoteCandidate(IceCandidate&, const String& mid, const String& ufrag, const String& password) final;
+ void addRemoteCandidate(const IceCandidate&, const String& mid, const String& ufrag, const String& password) final;
Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) final;
void replaceSendSource(RealtimeMediaSource&, const String& mid) final;
@@ -81,7 +81,7 @@
Vector<String> m_mids;
HashMap<String, RefPtr<RealtimeMediaSource>> m_mutedRemoteSources;
- Vector<RefPtr<IceCandidate>> m_fakeIceCandidates;
+ Vector<IceCandidate> m_fakeIceCandidates;
Timer m_iceCandidateTimer;
Vector<std::pair<String, MediaEndpoint::IceTransportState>> m_iceTransportStateChanges;