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..b9f5ee76b80a519c58851c9fbcd767251cddc7f5 100644 | 
| --- a/Source/modules/mediastream/RTCPeerConnection.cpp | 
| +++ b/Source/modules/mediastream/RTCPeerConnection.cpp | 
| @@ -103,17 +103,26 @@ RTCConfiguration* RTCPeerConnection::parseConfiguration(const Dictionary& config | 
| } | 
| ArrayValue iceServers; | 
| - 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; | 
| + size_t numberOfServers = 0; | 
| + bool createIceServerArray = true; | 
| + if (DictionaryHelper::get(configuration, "iceServers", iceServers)) { | 
| + if (!iceServers.length(numberOfServers)) { | 
| + exceptionState.throwTypeError("Malformed RTCConfiguration"); | 
| + return 0; | 
| + } | 
| 
 
tommi (sloooow) - chröme
2015/09/16 18:19:45
do we need to check for numberOfServers==0 or do w
 
guoweis_left_chromium
2015/09/16 22:10:20
for iceServers:[] case, we do want to create the s
 
 | 
| + } else { | 
| + v8::Local<v8::Value> iceServersValue; | 
| + // Failed to parse iceServers as ArrayValue, try it as a scalar. If | 
| + // iceServers is not specified (get returns false) or specified as | 
| + // "undefined", treat it as the special case which RTCIceServerArray | 
| + // will not be created. | 
| + bool ok = (!DictionaryHelper::get(configuration, "iceServers", iceServersValue) | 
| + || iceServersValue->IsUndefined()); | 
| + if (!ok) { | 
| + exceptionState.throwTypeError("Malformed RTCConfiguration"); | 
| + return 0; | 
| + } | 
| + createIceServerArray = false; | 
| } | 
| RTCBundlePolicy bundlePolicy = RTCBundlePolicyBalanced; | 
| @@ -144,10 +153,13 @@ 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; | 
| - ok = iceServers.get(i, iceServer); | 
| + bool ok = iceServers.get(i, iceServer); | 
| if (!ok) { | 
| exceptionState.throwTypeError("Malformed RTCIceServer"); | 
| return 0; | 
| @@ -191,7 +203,7 @@ RTCConfiguration* RTCPeerConnection::parseConfiguration(const Dictionary& config | 
| return 0; | 
| } | 
| - rtcConfiguration->appendServer(RTCIceServer::create(url, username, credential)); | 
| + rtcConfiguration->iceServers()->appendServer(RTCIceServer::create(url, username, credential)); | 
| } | 
| } |