Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: Source/modules/mediastream/RTCPeerConnection.cpp

Issue 534133002: [WIP] bindings: Introduce PropertyBag (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 84
85 } // namespace 85 } // namespace
86 86
87 RTCConfiguration* RTCPeerConnection::parseConfiguration(const Dictionary& config uration, ExceptionState& exceptionState) 87 RTCConfiguration* RTCPeerConnection::parseConfiguration(const Dictionary& config uration, ExceptionState& exceptionState)
88 { 88 {
89 if (configuration.isUndefinedOrNull()) 89 if (configuration.isUndefinedOrNull())
90 return 0; 90 return 0;
91 91
92 RTCIceTransports iceTransports = RTCIceTransportsAll; 92 RTCIceTransports iceTransports = RTCIceTransportsAll;
93 String iceTransportsString; 93 String iceTransportsString;
94 if (DictionaryHelper::get(configuration, "iceTransports", iceTransportsStrin g)) { 94 if (configuration.get("iceTransports", iceTransportsString)) {
95 if (iceTransportsString == "none") { 95 if (iceTransportsString == "none") {
96 iceTransports = RTCIceTransportsNone; 96 iceTransports = RTCIceTransportsNone;
97 } else if (iceTransportsString == "relay") { 97 } else if (iceTransportsString == "relay") {
98 iceTransports = RTCIceTransportsRelay; 98 iceTransports = RTCIceTransportsRelay;
99 } else if (iceTransportsString != "all") { 99 } else if (iceTransportsString != "all") {
100 exceptionState.throwTypeError("Malformed RTCIceTransports"); 100 exceptionState.throwTypeError("Malformed RTCIceTransports");
101 return 0; 101 return 0;
102 } 102 }
103 } 103 }
104 104
105 ArrayValue iceServers; 105 ArrayValue iceServers;
106 bool ok = DictionaryHelper::get(configuration, "iceServers", iceServers); 106 bool ok = configuration.get("iceServers", iceServers);
107 if (!ok || iceServers.isUndefinedOrNull()) { 107 if (!ok || iceServers.isUndefinedOrNull()) {
108 exceptionState.throwTypeError("Malformed RTCConfiguration"); 108 exceptionState.throwTypeError("Malformed RTCConfiguration");
109 return 0; 109 return 0;
110 } 110 }
111 111
112 size_t numberOfServers; 112 size_t numberOfServers;
113 ok = iceServers.length(numberOfServers); 113 ok = iceServers.length(numberOfServers);
114 if (!ok) { 114 if (!ok) {
115 exceptionState.throwTypeError("Malformed RTCConfiguration"); 115 exceptionState.throwTypeError("Malformed RTCConfiguration");
116 return 0; 116 return 0;
117 } 117 }
118 118
119 RTCConfiguration* rtcConfiguration = RTCConfiguration::create(); 119 RTCConfiguration* rtcConfiguration = RTCConfiguration::create();
120 rtcConfiguration->setIceTransports(iceTransports); 120 rtcConfiguration->setIceTransports(iceTransports);
121 121
122 for (size_t i = 0; i < numberOfServers; ++i) { 122 for (size_t i = 0; i < numberOfServers; ++i) {
123 Dictionary iceServer; 123 Dictionary iceServer;
124 ok = iceServers.get(i, iceServer); 124 ok = iceServers.get(i, iceServer);
125 if (!ok) { 125 if (!ok) {
126 exceptionState.throwTypeError("Malformed RTCIceServer"); 126 exceptionState.throwTypeError("Malformed RTCIceServer");
127 return 0; 127 return 0;
128 } 128 }
129 129
130 Vector<String> names; 130 Vector<String> names;
131 iceServer.getOwnPropertyNames(names); 131 iceServer.getOwnPropertyNames(names);
132 132
133 Vector<String> urlStrings; 133 Vector<String> urlStrings;
134 if (names.contains("urls")) { 134 if (names.contains("urls")) {
135 if (!DictionaryHelper::get(iceServer, "urls", urlStrings) || !urlStr ings.size()) { 135 if (!iceServer.get("urls", urlStrings) || !urlStrings.size()) {
136 String urlString; 136 String urlString;
137 if (DictionaryHelper::get(iceServer, "urls", urlString)) { 137 if (iceServer.get("urls", urlString)) {
138 urlStrings.append(urlString); 138 urlStrings.append(urlString);
139 } else { 139 } else {
140 exceptionState.throwTypeError("Malformed RTCIceServer"); 140 exceptionState.throwTypeError("Malformed RTCIceServer");
141 return 0; 141 return 0;
142 } 142 }
143 } 143 }
144 } else if (names.contains("url")) { 144 } else if (names.contains("url")) {
145 String urlString; 145 String urlString;
146 if (DictionaryHelper::get(iceServer, "url", urlString)) { 146 if (iceServer.get("url", urlString)) {
147 urlStrings.append(urlString); 147 urlStrings.append(urlString);
148 } else { 148 } else {
149 exceptionState.throwTypeError("Malformed RTCIceServer"); 149 exceptionState.throwTypeError("Malformed RTCIceServer");
150 return 0; 150 return 0;
151 } 151 }
152 } else { 152 } else {
153 exceptionState.throwTypeError("Malformed RTCIceServer"); 153 exceptionState.throwTypeError("Malformed RTCIceServer");
154 return 0; 154 return 0;
155 } 155 }
156 156
157 String username, credential; 157 String username, credential;
158 DictionaryHelper::get(iceServer, "username", username); 158 iceServer.get("username", username);
159 DictionaryHelper::get(iceServer, "credential", credential); 159 iceServer.get("credential", credential);
160 160
161 for (Vector<String>::iterator iter = urlStrings.begin(); iter != urlStri ngs.end(); ++iter) { 161 for (Vector<String>::iterator iter = urlStrings.begin(); iter != urlStri ngs.end(); ++iter) {
162 KURL url(KURL(), *iter); 162 KURL url(KURL(), *iter);
163 if (!url.isValid() || !(url.protocolIs("turn") || url.protocolIs("tu rns") || url.protocolIs("stun"))) { 163 if (!url.isValid() || !(url.protocolIs("turn") || url.protocolIs("tu rns") || url.protocolIs("stun"))) {
164 exceptionState.throwTypeError("Malformed URL"); 164 exceptionState.throwTypeError("Malformed URL");
165 return 0; 165 return 0;
166 } 166 }
167 167
168 rtcConfiguration->appendServer(RTCIceServer::create(url, username, c redential)); 168 rtcConfiguration->appendServer(RTCIceServer::create(url, username, c redential));
169 } 169 }
(...skipping 13 matching lines...) Expand all
183 // Treat |options| as MediaConstraints if it is empty or has "optional" or " mandatory" properties for compatibility. 183 // Treat |options| as MediaConstraints if it is empty or has "optional" or " mandatory" properties for compatibility.
184 // TODO(jiayl): remove constraints when RTCOfferOptions reaches Stable and c lient code is ready. 184 // TODO(jiayl): remove constraints when RTCOfferOptions reaches Stable and c lient code is ready.
185 if (propertyNames.isEmpty() || propertyNames.contains("optional") || propert yNames.contains("mandatory")) 185 if (propertyNames.isEmpty() || propertyNames.contains("optional") || propert yNames.contains("mandatory"))
186 return 0; 186 return 0;
187 187
188 int32_t offerToReceiveVideo = -1; 188 int32_t offerToReceiveVideo = -1;
189 int32_t offerToReceiveAudio = -1; 189 int32_t offerToReceiveAudio = -1;
190 bool voiceActivityDetection = true; 190 bool voiceActivityDetection = true;
191 bool iceRestart = false; 191 bool iceRestart = false;
192 192
193 if (DictionaryHelper::get(options, "offerToReceiveVideo", offerToReceiveVide o) && offerToReceiveVideo < 0) { 193 if (options.get("offerToReceiveVideo", offerToReceiveVideo) && offerToReceiv eVideo < 0) {
194 exceptionState.throwTypeError("Invalid offerToReceiveVideo"); 194 exceptionState.throwTypeError("Invalid offerToReceiveVideo");
195 return 0; 195 return 0;
196 } 196 }
197 197
198 if (DictionaryHelper::get(options, "offerToReceiveAudio", offerToReceiveAudi o) && offerToReceiveAudio < 0) { 198 if (options.get("offerToReceiveAudio", offerToReceiveAudio) && offerToReceiv eAudio < 0) {
199 exceptionState.throwTypeError("Invalid offerToReceiveAudio"); 199 exceptionState.throwTypeError("Invalid offerToReceiveAudio");
200 return 0; 200 return 0;
201 } 201 }
202 202
203 DictionaryHelper::get(options, "voiceActivityDetection", voiceActivityDetect ion); 203 options.get("voiceActivityDetection", voiceActivityDetection);
204 DictionaryHelper::get(options, "iceRestart", iceRestart); 204 options.get("iceRestart", iceRestart);
205 205
206 RTCOfferOptions* rtcOfferOptions = RTCOfferOptions::create(offerToReceiveVid eo, offerToReceiveAudio, voiceActivityDetection, iceRestart); 206 RTCOfferOptions* rtcOfferOptions = RTCOfferOptions::create(offerToReceiveVid eo, offerToReceiveAudio, voiceActivityDetection, iceRestart);
207 return rtcOfferOptions; 207 return rtcOfferOptions;
208 } 208 }
209 209
210 RTCPeerConnection* RTCPeerConnection::create(ExecutionContext* context, const Di ctionary& rtcConfiguration, const Dictionary& mediaConstraints, ExceptionState& exceptionState) 210 RTCPeerConnection* RTCPeerConnection::create(ExecutionContext* context, const Di ctionary& rtcConfiguration, const Dictionary& mediaConstraints, ExceptionState& exceptionState)
211 { 211 {
212 RTCConfiguration* configuration = parseConfiguration(rtcConfiguration, excep tionState); 212 RTCConfiguration* configuration = parseConfiguration(rtcConfiguration, excep tionState);
213 if (exceptionState.hadException()) 213 if (exceptionState.hadException())
214 return 0; 214 return 0;
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 // FIXME: Add passing selector as part of the statsRequest. 541 // FIXME: Add passing selector as part of the statsRequest.
542 m_peerHandler->getStats(statsRequest); 542 m_peerHandler->getStats(statsRequest);
543 } 543 }
544 544
545 RTCDataChannel* RTCPeerConnection::createDataChannel(String label, const Diction ary& options, ExceptionState& exceptionState) 545 RTCDataChannel* RTCPeerConnection::createDataChannel(String label, const Diction ary& options, ExceptionState& exceptionState)
546 { 546 {
547 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) 547 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState))
548 return nullptr; 548 return nullptr;
549 549
550 WebRTCDataChannelInit init; 550 WebRTCDataChannelInit init;
551 DictionaryHelper::get(options, "ordered", init.ordered); 551 options.get("ordered", init.ordered);
552 DictionaryHelper::get(options, "negotiated", init.negotiated); 552 options.get("negotiated", init.negotiated);
553 553
554 unsigned short value = 0; 554 unsigned short value = 0;
555 if (DictionaryHelper::get(options, "id", value)) 555 if (options.get("id", value))
556 init.id = value; 556 init.id = value;
557 if (DictionaryHelper::get(options, "maxRetransmits", value)) 557 if (options.get("maxRetransmits", value))
558 init.maxRetransmits = value; 558 init.maxRetransmits = value;
559 if (DictionaryHelper::get(options, "maxRetransmitTime", value)) 559 if (options.get("maxRetransmitTime", value))
560 init.maxRetransmitTime = value; 560 init.maxRetransmitTime = value;
561 561
562 String protocolString; 562 String protocolString;
563 DictionaryHelper::get(options, "protocol", protocolString); 563 options.get("protocol", protocolString);
564 init.protocol = protocolString; 564 init.protocol = protocolString;
565 565
566 RTCDataChannel* channel = RTCDataChannel::create(executionContext(), this, m _peerHandler.get(), label, init, exceptionState); 566 RTCDataChannel* channel = RTCDataChannel::create(executionContext(), this, m _peerHandler.get(), label, init, exceptionState);
567 if (exceptionState.hadException()) 567 if (exceptionState.hadException())
568 return nullptr; 568 return nullptr;
569 m_dataChannels.append(channel); 569 m_dataChannels.append(channel);
570 return channel; 570 return channel;
571 } 571 }
572 572
573 bool RTCPeerConnection::hasLocalStreamWithTrackId(const String& trackId) 573 bool RTCPeerConnection::hasLocalStreamWithTrackId(const String& trackId)
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 visitor->trace(m_localStreams); 805 visitor->trace(m_localStreams);
806 visitor->trace(m_remoteStreams); 806 visitor->trace(m_remoteStreams);
807 visitor->trace(m_dataChannels); 807 visitor->trace(m_dataChannels);
808 #if ENABLE(OILPAN) 808 #if ENABLE(OILPAN)
809 visitor->trace(m_scheduledEvents); 809 visitor->trace(m_scheduledEvents);
810 #endif 810 #endif
811 EventTargetWithInlineData::trace(visitor); 811 EventTargetWithInlineData::trace(visitor);
812 } 812 }
813 813
814 } // namespace blink 814 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/mediastream/RTCIceCandidate.cpp ('k') | Source/modules/mediastream/RTCSessionDescription.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698