| OLD | NEW |
| 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 } | 80 } |
| 81 | 81 |
| 82 return false; | 82 return false; |
| 83 } | 83 } |
| 84 | 84 |
| 85 } // namespace | 85 } // namespace |
| 86 | 86 |
| 87 PassRefPtr<RTCConfiguration> RTCPeerConnection::parseConfiguration(const Diction
ary& configuration, ExceptionState& exceptionState) | 87 PassRefPtr<RTCConfiguration> RTCPeerConnection::parseConfiguration(const Diction
ary& configuration, ExceptionState& exceptionState) |
| 88 { | 88 { |
| 89 if (configuration.isUndefinedOrNull()) | 89 if (configuration.isUndefinedOrNull()) |
| 90 return 0; | 90 return nullptr; |
| 91 | 91 |
| 92 ArrayValue iceServers; | 92 ArrayValue iceServers; |
| 93 bool ok = configuration.get("iceServers", iceServers); | 93 bool ok = configuration.get("iceServers", iceServers); |
| 94 if (!ok || iceServers.isUndefinedOrNull()) { | 94 if (!ok || iceServers.isUndefinedOrNull()) { |
| 95 exceptionState.throwTypeError("Malformed RTCConfiguration"); | 95 exceptionState.throwTypeError("Malformed RTCConfiguration"); |
| 96 return 0; | 96 return nullptr; |
| 97 } | 97 } |
| 98 | 98 |
| 99 size_t numberOfServers; | 99 size_t numberOfServers; |
| 100 ok = iceServers.length(numberOfServers); | 100 ok = iceServers.length(numberOfServers); |
| 101 if (!ok) { | 101 if (!ok) { |
| 102 exceptionState.throwTypeError("Malformed RTCConfiguration"); | 102 exceptionState.throwTypeError("Malformed RTCConfiguration"); |
| 103 return 0; | 103 return nullptr; |
| 104 } | 104 } |
| 105 | 105 |
| 106 RefPtr<RTCConfiguration> rtcConfiguration = RTCConfiguration::create(); | 106 RefPtr<RTCConfiguration> rtcConfiguration = RTCConfiguration::create(); |
| 107 | 107 |
| 108 for (size_t i = 0; i < numberOfServers; ++i) { | 108 for (size_t i = 0; i < numberOfServers; ++i) { |
| 109 Dictionary iceServer; | 109 Dictionary iceServer; |
| 110 ok = iceServers.get(i, iceServer); | 110 ok = iceServers.get(i, iceServer); |
| 111 if (!ok) { | 111 if (!ok) { |
| 112 exceptionState.throwTypeError("Malformed RTCIceServer"); | 112 exceptionState.throwTypeError("Malformed RTCIceServer"); |
| 113 return 0; | 113 return nullptr; |
| 114 } | 114 } |
| 115 | 115 |
| 116 Vector<String> names; | 116 Vector<String> names; |
| 117 iceServer.getOwnPropertyNames(names); | 117 iceServer.getOwnPropertyNames(names); |
| 118 | 118 |
| 119 Vector<String> urlStrings; | 119 Vector<String> urlStrings; |
| 120 if (names.contains("urls")) { | 120 if (names.contains("urls")) { |
| 121 if (!iceServer.get("urls", urlStrings) || !urlStrings.size()) { | 121 if (!iceServer.get("urls", urlStrings) || !urlStrings.size()) { |
| 122 String urlString; | 122 String urlString; |
| 123 if (iceServer.get("urls", urlString)) { | 123 if (iceServer.get("urls", urlString)) { |
| 124 urlStrings.append(urlString); | 124 urlStrings.append(urlString); |
| 125 } else { | 125 } else { |
| 126 exceptionState.throwTypeError("Malformed RTCIceServer"); | 126 exceptionState.throwTypeError("Malformed RTCIceServer"); |
| 127 return 0; | 127 return nullptr; |
| 128 } | 128 } |
| 129 } | 129 } |
| 130 } else if (names.contains("url")) { | 130 } else if (names.contains("url")) { |
| 131 String urlString; | 131 String urlString; |
| 132 if (iceServer.get("url", urlString)) { | 132 if (iceServer.get("url", urlString)) { |
| 133 urlStrings.append(urlString); | 133 urlStrings.append(urlString); |
| 134 } else { | 134 } else { |
| 135 exceptionState.throwTypeError("Malformed RTCIceServer"); | 135 exceptionState.throwTypeError("Malformed RTCIceServer"); |
| 136 return 0; | 136 return nullptr; |
| 137 } | 137 } |
| 138 } else { | 138 } else { |
| 139 exceptionState.throwTypeError("Malformed RTCIceServer"); | 139 exceptionState.throwTypeError("Malformed RTCIceServer"); |
| 140 return 0; | 140 return nullptr; |
| 141 } | 141 } |
| 142 | 142 |
| 143 String username, credential; | 143 String username, credential; |
| 144 iceServer.get("username", username); | 144 iceServer.get("username", username); |
| 145 iceServer.get("credential", credential); | 145 iceServer.get("credential", credential); |
| 146 | 146 |
| 147 for (Vector<String>::iterator iter = urlStrings.begin(); iter != urlStri
ngs.end(); ++iter) { | 147 for (Vector<String>::iterator iter = urlStrings.begin(); iter != urlStri
ngs.end(); ++iter) { |
| 148 KURL url(KURL(), *iter); | 148 KURL url(KURL(), *iter); |
| 149 if (!url.isValid() || !(url.protocolIs("turn") || url.protocolIs("tu
rns") || url.protocolIs("stun"))) { | 149 if (!url.isValid() || !(url.protocolIs("turn") || url.protocolIs("tu
rns") || url.protocolIs("stun"))) { |
| 150 exceptionState.throwTypeError("Malformed URL"); | 150 exceptionState.throwTypeError("Malformed URL"); |
| 151 return 0; | 151 return nullptr; |
| 152 } | 152 } |
| 153 | 153 |
| 154 rtcConfiguration->appendServer(RTCIceServer::create(url, username, c
redential)); | 154 rtcConfiguration->appendServer(RTCIceServer::create(url, username, c
redential)); |
| 155 } | 155 } |
| 156 } | 156 } |
| 157 | 157 |
| 158 return rtcConfiguration.release(); | 158 return rtcConfiguration.release(); |
| 159 } | 159 } |
| 160 | 160 |
| 161 PassRefPtr<RTCPeerConnection> RTCPeerConnection::create(ExecutionContext* contex
t, const Dictionary& rtcConfiguration, const Dictionary& mediaConstraints, Excep
tionState& exceptionState) | 161 PassRefPtr<RTCPeerConnection> RTCPeerConnection::create(ExecutionContext* contex
t, const Dictionary& rtcConfiguration, const Dictionary& mediaConstraints, Excep
tionState& exceptionState) |
| 162 { | 162 { |
| 163 RefPtr<RTCConfiguration> configuration = parseConfiguration(rtcConfiguration
, exceptionState); | 163 RefPtr<RTCConfiguration> configuration = parseConfiguration(rtcConfiguration
, exceptionState); |
| 164 if (exceptionState.hadException()) | 164 if (exceptionState.hadException()) |
| 165 return 0; | 165 return nullptr; |
| 166 | 166 |
| 167 blink::WebMediaConstraints constraints = MediaConstraintsImpl::create(mediaC
onstraints, exceptionState); | 167 blink::WebMediaConstraints constraints = MediaConstraintsImpl::create(mediaC
onstraints, exceptionState); |
| 168 if (exceptionState.hadException()) | 168 if (exceptionState.hadException()) |
| 169 return 0; | 169 return nullptr; |
| 170 | 170 |
| 171 RefPtr<RTCPeerConnection> peerConnection = adoptRef(new RTCPeerConnection(co
ntext, configuration.release(), constraints, exceptionState)); | 171 RefPtr<RTCPeerConnection> peerConnection = adoptRef(new RTCPeerConnection(co
ntext, configuration.release(), constraints, exceptionState)); |
| 172 peerConnection->suspendIfNeeded(); | 172 peerConnection->suspendIfNeeded(); |
| 173 if (exceptionState.hadException()) | 173 if (exceptionState.hadException()) |
| 174 return 0; | 174 return nullptr; |
| 175 | 175 |
| 176 return peerConnection.release(); | 176 return peerConnection.release(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 RTCPeerConnection::RTCPeerConnection(ExecutionContext* context, PassRefPtr<RTCCo
nfiguration> configuration, blink::WebMediaConstraints constraints, ExceptionSta
te& exceptionState) | 179 RTCPeerConnection::RTCPeerConnection(ExecutionContext* context, PassRefPtr<RTCCo
nfiguration> configuration, blink::WebMediaConstraints constraints, ExceptionSta
te& exceptionState) |
| 180 : ActiveDOMObject(context) | 180 : ActiveDOMObject(context) |
| 181 , m_signalingState(SignalingStateStable) | 181 , m_signalingState(SignalingStateStable) |
| 182 , m_iceGatheringState(ICEGatheringStateNew) | 182 , m_iceGatheringState(ICEGatheringStateNew) |
| 183 , m_iceConnectionState(ICEConnectionStateNew) | 183 , m_iceConnectionState(ICEConnectionStateNew) |
| 184 , m_dispatchScheduledEventRunner(this, &RTCPeerConnection::dispatchScheduled
Event) | 184 , m_dispatchScheduledEventRunner(this, &RTCPeerConnection::dispatchScheduled
Event) |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 } | 259 } |
| 260 | 260 |
| 261 RefPtr<RTCVoidRequest> request = RTCVoidRequestImpl::create(executionContext
(), successCallback, errorCallback); | 261 RefPtr<RTCVoidRequest> request = RTCVoidRequestImpl::create(executionContext
(), successCallback, errorCallback); |
| 262 m_peerHandler->setLocalDescription(request.release(), sessionDescription->we
bSessionDescription()); | 262 m_peerHandler->setLocalDescription(request.release(), sessionDescription->we
bSessionDescription()); |
| 263 } | 263 } |
| 264 | 264 |
| 265 PassRefPtr<RTCSessionDescription> RTCPeerConnection::localDescription(ExceptionS
tate& exceptionState) | 265 PassRefPtr<RTCSessionDescription> RTCPeerConnection::localDescription(ExceptionS
tate& exceptionState) |
| 266 { | 266 { |
| 267 blink::WebRTCSessionDescription webSessionDescription = m_peerHandler->local
Description(); | 267 blink::WebRTCSessionDescription webSessionDescription = m_peerHandler->local
Description(); |
| 268 if (webSessionDescription.isNull()) | 268 if (webSessionDescription.isNull()) |
| 269 return 0; | 269 return nullptr; |
| 270 | 270 |
| 271 RefPtr<RTCSessionDescription> sessionDescription = RTCSessionDescription::cr
eate(webSessionDescription); | 271 RefPtr<RTCSessionDescription> sessionDescription = RTCSessionDescription::cr
eate(webSessionDescription); |
| 272 return sessionDescription.release(); | 272 return sessionDescription.release(); |
| 273 } | 273 } |
| 274 | 274 |
| 275 void RTCPeerConnection::setRemoteDescription(PassRefPtr<RTCSessionDescription> p
rpSessionDescription, PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<RTCEr
rorCallback> errorCallback, ExceptionState& exceptionState) | 275 void RTCPeerConnection::setRemoteDescription(PassRefPtr<RTCSessionDescription> p
rpSessionDescription, PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<RTCEr
rorCallback> errorCallback, ExceptionState& exceptionState) |
| 276 { | 276 { |
| 277 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) | 277 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) |
| 278 return; | 278 return; |
| 279 | 279 |
| 280 RefPtr<RTCSessionDescription> sessionDescription = prpSessionDescription; | 280 RefPtr<RTCSessionDescription> sessionDescription = prpSessionDescription; |
| 281 if (!sessionDescription) { | 281 if (!sessionDescription) { |
| 282 exceptionState.throwDOMException(TypeMismatchError, ExceptionMessages::a
rgumentNullOrIncorrectType(1, "RTCSessionDescription")); | 282 exceptionState.throwDOMException(TypeMismatchError, ExceptionMessages::a
rgumentNullOrIncorrectType(1, "RTCSessionDescription")); |
| 283 return; | 283 return; |
| 284 } | 284 } |
| 285 | 285 |
| 286 RefPtr<RTCVoidRequest> request = RTCVoidRequestImpl::create(executionContext
(), successCallback, errorCallback); | 286 RefPtr<RTCVoidRequest> request = RTCVoidRequestImpl::create(executionContext
(), successCallback, errorCallback); |
| 287 m_peerHandler->setRemoteDescription(request.release(), sessionDescription->w
ebSessionDescription()); | 287 m_peerHandler->setRemoteDescription(request.release(), sessionDescription->w
ebSessionDescription()); |
| 288 } | 288 } |
| 289 | 289 |
| 290 PassRefPtr<RTCSessionDescription> RTCPeerConnection::remoteDescription(Exception
State& exceptionState) | 290 PassRefPtr<RTCSessionDescription> RTCPeerConnection::remoteDescription(Exception
State& exceptionState) |
| 291 { | 291 { |
| 292 blink::WebRTCSessionDescription webSessionDescription = m_peerHandler->remot
eDescription(); | 292 blink::WebRTCSessionDescription webSessionDescription = m_peerHandler->remot
eDescription(); |
| 293 if (webSessionDescription.isNull()) | 293 if (webSessionDescription.isNull()) |
| 294 return 0; | 294 return nullptr; |
| 295 | 295 |
| 296 RefPtr<RTCSessionDescription> desc = RTCSessionDescription::create(webSessio
nDescription); | 296 RefPtr<RTCSessionDescription> desc = RTCSessionDescription::create(webSessio
nDescription); |
| 297 return desc.release(); | 297 return desc.release(); |
| 298 } | 298 } |
| 299 | 299 |
| 300 void RTCPeerConnection::updateIce(const Dictionary& rtcConfiguration, const Dict
ionary& mediaConstraints, ExceptionState& exceptionState) | 300 void RTCPeerConnection::updateIce(const Dictionary& rtcConfiguration, const Dict
ionary& mediaConstraints, ExceptionState& exceptionState) |
| 301 { | 301 { |
| 302 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) | 302 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) |
| 303 return; | 303 return; |
| 304 | 304 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 void RTCPeerConnection::getStats(PassOwnPtr<RTCStatsCallback> successCallback, P
assRefPtr<MediaStreamTrack> selector) | 488 void RTCPeerConnection::getStats(PassOwnPtr<RTCStatsCallback> successCallback, P
assRefPtr<MediaStreamTrack> selector) |
| 489 { | 489 { |
| 490 RefPtr<RTCStatsRequest> statsRequest = RTCStatsRequestImpl::create(execution
Context(), successCallback, selector); | 490 RefPtr<RTCStatsRequest> statsRequest = RTCStatsRequestImpl::create(execution
Context(), successCallback, selector); |
| 491 // FIXME: Add passing selector as part of the statsRequest. | 491 // FIXME: Add passing selector as part of the statsRequest. |
| 492 m_peerHandler->getStats(statsRequest.release()); | 492 m_peerHandler->getStats(statsRequest.release()); |
| 493 } | 493 } |
| 494 | 494 |
| 495 PassRefPtr<RTCDataChannel> RTCPeerConnection::createDataChannel(String label, co
nst Dictionary& options, ExceptionState& exceptionState) | 495 PassRefPtr<RTCDataChannel> RTCPeerConnection::createDataChannel(String label, co
nst Dictionary& options, ExceptionState& exceptionState) |
| 496 { | 496 { |
| 497 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) | 497 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) |
| 498 return 0; | 498 return nullptr; |
| 499 | 499 |
| 500 blink::WebRTCDataChannelInit init; | 500 blink::WebRTCDataChannelInit init; |
| 501 options.get("ordered", init.ordered); | 501 options.get("ordered", init.ordered); |
| 502 options.get("negotiated", init.negotiated); | 502 options.get("negotiated", init.negotiated); |
| 503 | 503 |
| 504 unsigned short value = 0; | 504 unsigned short value = 0; |
| 505 if (options.get("id", value)) | 505 if (options.get("id", value)) |
| 506 init.id = value; | 506 init.id = value; |
| 507 if (options.get("maxRetransmits", value)) | 507 if (options.get("maxRetransmits", value)) |
| 508 init.maxRetransmits = value; | 508 init.maxRetransmits = value; |
| 509 if (options.get("maxRetransmitTime", value)) | 509 if (options.get("maxRetransmitTime", value)) |
| 510 init.maxRetransmitTime = value; | 510 init.maxRetransmitTime = value; |
| 511 | 511 |
| 512 String protocolString; | 512 String protocolString; |
| 513 options.get("protocol", protocolString); | 513 options.get("protocol", protocolString); |
| 514 init.protocol = protocolString; | 514 init.protocol = protocolString; |
| 515 | 515 |
| 516 RefPtr<RTCDataChannel> channel = RTCDataChannel::create(executionContext(),
m_peerHandler.get(), label, init, exceptionState); | 516 RefPtr<RTCDataChannel> channel = RTCDataChannel::create(executionContext(),
m_peerHandler.get(), label, init, exceptionState); |
| 517 if (exceptionState.hadException()) | 517 if (exceptionState.hadException()) |
| 518 return 0; | 518 return nullptr; |
| 519 m_dataChannels.append(channel); | 519 m_dataChannels.append(channel); |
| 520 return channel.release(); | 520 return channel.release(); |
| 521 } | 521 } |
| 522 | 522 |
| 523 bool RTCPeerConnection::hasLocalStreamWithTrackId(const String& trackId) | 523 bool RTCPeerConnection::hasLocalStreamWithTrackId(const String& trackId) |
| 524 { | 524 { |
| 525 for (MediaStreamVector::iterator iter = m_localStreams.begin(); iter != m_lo
calStreams.end(); ++iter) { | 525 for (MediaStreamVector::iterator iter = m_localStreams.begin(); iter != m_lo
calStreams.end(); ++iter) { |
| 526 if ((*iter)->getTrackById(trackId)) | 526 if ((*iter)->getTrackById(trackId)) |
| 527 return true; | 527 return true; |
| 528 } | 528 } |
| 529 return false; | 529 return false; |
| 530 } | 530 } |
| 531 | 531 |
| 532 PassRefPtr<RTCDTMFSender> RTCPeerConnection::createDTMFSender(PassRefPtr<MediaSt
reamTrack> prpTrack, ExceptionState& exceptionState) | 532 PassRefPtr<RTCDTMFSender> RTCPeerConnection::createDTMFSender(PassRefPtr<MediaSt
reamTrack> prpTrack, ExceptionState& exceptionState) |
| 533 { | 533 { |
| 534 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) | 534 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) |
| 535 return 0; | 535 return nullptr; |
| 536 | 536 |
| 537 if (!prpTrack) { | 537 if (!prpTrack) { |
| 538 exceptionState.throwTypeError(ExceptionMessages::argumentNullOrIncorrect
Type(1, "MediaStreamTrack")); | 538 exceptionState.throwTypeError(ExceptionMessages::argumentNullOrIncorrect
Type(1, "MediaStreamTrack")); |
| 539 return 0; | 539 return nullptr; |
| 540 } | 540 } |
| 541 | 541 |
| 542 RefPtr<MediaStreamTrack> track = prpTrack; | 542 RefPtr<MediaStreamTrack> track = prpTrack; |
| 543 | 543 |
| 544 if (!hasLocalStreamWithTrackId(track->id())) { | 544 if (!hasLocalStreamWithTrackId(track->id())) { |
| 545 exceptionState.throwDOMException(SyntaxError, "No local stream is availa
ble for the track provided."); | 545 exceptionState.throwDOMException(SyntaxError, "No local stream is availa
ble for the track provided."); |
| 546 return 0; | 546 return nullptr; |
| 547 } | 547 } |
| 548 | 548 |
| 549 RefPtr<RTCDTMFSender> dtmfSender = RTCDTMFSender::create(executionContext(),
m_peerHandler.get(), track.release(), exceptionState); | 549 RefPtr<RTCDTMFSender> dtmfSender = RTCDTMFSender::create(executionContext(),
m_peerHandler.get(), track.release(), exceptionState); |
| 550 if (exceptionState.hadException()) | 550 if (exceptionState.hadException()) |
| 551 return 0; | 551 return nullptr; |
| 552 return dtmfSender.release(); | 552 return dtmfSender.release(); |
| 553 } | 553 } |
| 554 | 554 |
| 555 void RTCPeerConnection::close(ExceptionState& exceptionState) | 555 void RTCPeerConnection::close(ExceptionState& exceptionState) |
| 556 { | 556 { |
| 557 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) | 557 if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState)) |
| 558 return; | 558 return; |
| 559 | 559 |
| 560 m_peerHandler->stop(); | 560 m_peerHandler->stop(); |
| 561 | 561 |
| 562 changeIceConnectionState(ICEConnectionStateClosed); | 562 changeIceConnectionState(ICEConnectionStateClosed); |
| 563 changeIceGatheringState(ICEGatheringStateComplete); | 563 changeIceGatheringState(ICEGatheringStateComplete); |
| 564 changeSignalingState(SignalingStateClosed); | 564 changeSignalingState(SignalingStateClosed); |
| 565 } | 565 } |
| 566 | 566 |
| 567 void RTCPeerConnection::negotiationNeeded() | 567 void RTCPeerConnection::negotiationNeeded() |
| 568 { | 568 { |
| 569 scheduleDispatchEvent(Event::create(EventTypeNames::negotiationneeded)); | 569 scheduleDispatchEvent(Event::create(EventTypeNames::negotiationneeded)); |
| 570 } | 570 } |
| 571 | 571 |
| 572 void RTCPeerConnection::didGenerateICECandidate(const blink::WebRTCICECandidate&
webCandidate) | 572 void RTCPeerConnection::didGenerateICECandidate(const blink::WebRTCICECandidate&
webCandidate) |
| 573 { | 573 { |
| 574 ASSERT(executionContext()->isContextThread()); | 574 ASSERT(executionContext()->isContextThread()); |
| 575 if (webCandidate.isNull()) | 575 if (webCandidate.isNull()) |
| 576 scheduleDispatchEvent(RTCIceCandidateEvent::create(false, false, 0)); | 576 scheduleDispatchEvent(RTCIceCandidateEvent::create(false, false, nullptr
)); |
| 577 else { | 577 else { |
| 578 RefPtr<RTCIceCandidate> iceCandidate = RTCIceCandidate::create(webCandid
ate); | 578 RefPtr<RTCIceCandidate> iceCandidate = RTCIceCandidate::create(webCandid
ate); |
| 579 scheduleDispatchEvent(RTCIceCandidateEvent::create(false, false, iceCand
idate.release())); | 579 scheduleDispatchEvent(RTCIceCandidateEvent::create(false, false, iceCand
idate.release())); |
| 580 } | 580 } |
| 581 } | 581 } |
| 582 | 582 |
| 583 void RTCPeerConnection::didChangeSignalingState(SignalingState newState) | 583 void RTCPeerConnection::didChangeSignalingState(SignalingState newState) |
| 584 { | 584 { |
| 585 ASSERT(executionContext()->isContextThread()); | 585 ASSERT(executionContext()->isContextThread()); |
| 586 changeSignalingState(newState); | 586 changeSignalingState(newState); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 events.swap(m_scheduledEvents); | 717 events.swap(m_scheduledEvents); |
| 718 | 718 |
| 719 Vector<RefPtr<Event> >::iterator it = events.begin(); | 719 Vector<RefPtr<Event> >::iterator it = events.begin(); |
| 720 for (; it != events.end(); ++it) | 720 for (; it != events.end(); ++it) |
| 721 dispatchEvent((*it).release()); | 721 dispatchEvent((*it).release()); |
| 722 | 722 |
| 723 events.clear(); | 723 events.clear(); |
| 724 } | 724 } |
| 725 | 725 |
| 726 } // namespace WebCore | 726 } // namespace WebCore |
| OLD | NEW |