Chromium Code Reviews| Index: Source/modules/mediastream/RTCPeerConnection.cpp |
| diff --git a/Source/modules/mediastream/RTCPeerConnection.cpp b/Source/modules/mediastream/RTCPeerConnection.cpp |
| index b3ae4317d8a5817b673b7bd3035222e7243f6680..f68455d803fe916ebdc0d454a8aa06baab86343e 100644 |
| --- a/Source/modules/mediastream/RTCPeerConnection.cpp |
| +++ b/Source/modules/mediastream/RTCPeerConnection.cpp |
| @@ -103,17 +103,28 @@ RTCConfiguration* RTCPeerConnection::parseConfiguration(const Dictionary& config |
| } |
| ArrayValue iceServers; |
| + size_t numberOfServers = 0; |
| + bool createIceServerArray = true; |
| bool ok = DictionaryHelper::get(configuration, "iceServers", iceServers); |
| - if (!ok || iceServers.isUndefinedOrNull()) { |
| - exceptionState.throwTypeError("Malformed RTCConfiguration"); |
| - return 0; |
| - } |
| - |
| - size_t numberOfServers; |
| - ok = iceServers.length(numberOfServers); |
| if (!ok) { |
| - exceptionState.throwTypeError("Malformed RTCConfiguration"); |
| - return 0; |
| + v8::Local<v8::Value> iceServersValue; |
| + // Failed to parse iceServers as ArrayValue, try it as a scalar. |
| + ok = DictionaryHelper::get(configuration, "iceServers", iceServersValue); |
| + if (!ok || iceServersValue->IsUndefined()) { |
| + // if iceServers is not specified (|ok| is false) or specified as |
| + // "undefined", treat it as the special case which RTCIceServerArray |
| + // will not be created. |
| + createIceServerArray = false; |
| + } else { |
| + exceptionState.throwTypeError("Malformed RTCConfiguration"); |
| + return 0; |
| + } |
| + } else { |
| + ok = iceServers.length(numberOfServers); |
| + if (!ok) { |
|
tommi (sloooow) - chröme
2015/09/16 06:19:27
do we need to handle numberOfServers == 0? (looks
guoweis_left_chromium
2015/09/16 17:29:05
numberOfServers == 0, i.e. iceServers:[], is treat
tommi (sloooow) - chröme
2015/09/16 18:19:45
ok, but whenever numberOfServers is 0, won't (or s
guoweis_left_chromium
2015/09/16 22:10:20
when there is no iceServers specified (or undefine
|
| + exceptionState.throwTypeError("Malformed RTCConfiguration"); |
| + return 0; |
| + } |
| } |
|
pthatcher2
2015/09/16 04:09:58
Can you put the early returns first?
if (Dictiona
guoweis_left_chromium
2015/09/16 17:29:05
Done.
|
| RTCBundlePolicy bundlePolicy = RTCBundlePolicyBalanced; |
| @@ -144,6 +155,9 @@ RTCConfiguration* RTCPeerConnection::parseConfiguration(const Dictionary& config |
| rtcConfiguration->setIceTransports(iceTransports); |
| rtcConfiguration->setBundlePolicy(bundlePolicy); |
| rtcConfiguration->setRtcpMuxPolicy(rtcpMuxPolicy); |
| + if (createIceServerArray) { |
| + rtcConfiguration->setIceServers(RTCIceServerArray::create()); |
| + } |
| for (size_t i = 0; i < numberOfServers; ++i) { |
| Dictionary iceServer; |
| @@ -191,7 +205,7 @@ RTCConfiguration* RTCPeerConnection::parseConfiguration(const Dictionary& config |
| return 0; |
| } |
| - rtcConfiguration->appendServer(RTCIceServer::create(url, username, credential)); |
| + rtcConfiguration->iceServers()->appendServer(RTCIceServer::create(url, username, credential)); |
| } |
| } |