| 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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 WTF::bind(&RTCPeerConnectionErrorCallback::handleEvent, | 125 WTF::bind(&RTCPeerConnectionErrorCallback::handleEvent, |
| 126 wrapPersistent(errorCallback), wrapPersistent(exception))); | 126 wrapPersistent(errorCallback), wrapPersistent(exception))); |
| 127 } | 127 } |
| 128 | 128 |
| 129 bool callErrorCallbackIfSignalingStateClosed( | 129 bool callErrorCallbackIfSignalingStateClosed( |
| 130 RTCPeerConnection::SignalingState state, | 130 RTCPeerConnection::SignalingState state, |
| 131 RTCPeerConnectionErrorCallback* errorCallback) { | 131 RTCPeerConnectionErrorCallback* errorCallback) { |
| 132 if (state == RTCPeerConnection::SignalingStateClosed) { | 132 if (state == RTCPeerConnection::SignalingStateClosed) { |
| 133 if (errorCallback) | 133 if (errorCallback) |
| 134 asyncCallErrorCallback( | 134 asyncCallErrorCallback( |
| 135 errorCallback, DOMException::create(InvalidStateError, | 135 errorCallback, |
| 136 kSignalingStateClosedMessage)); | 136 DOMException::create(InvalidStateError, |
| 137 kSignalingStateClosedMessage)); |
| 137 | 138 |
| 138 return true; | 139 return true; |
| 139 } | 140 } |
| 140 | 141 |
| 141 return false; | 142 return false; |
| 142 } | 143 } |
| 143 | 144 |
| 144 bool isIceCandidateMissingSdp( | 145 bool isIceCandidateMissingSdp( |
| 145 const RTCIceCandidateInitOrRTCIceCandidate& candidate) { | 146 const RTCIceCandidateInitOrRTCIceCandidate& candidate) { |
| 146 if (candidate.isRTCIceCandidateInit()) { | 147 if (candidate.isRTCIceCandidateInit()) { |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 for (const String& urlString : urlStrings) { | 301 for (const String& urlString : urlStrings) { |
| 301 KURL url(KURL(), urlString); | 302 KURL url(KURL(), urlString); |
| 302 if (!url.isValid()) { | 303 if (!url.isValid()) { |
| 303 exceptionState.throwDOMException( | 304 exceptionState.throwDOMException( |
| 304 SyntaxError, "'" + urlString + "' is not a valid URL."); | 305 SyntaxError, "'" + urlString + "' is not a valid URL."); |
| 305 return WebRTCConfiguration(); | 306 return WebRTCConfiguration(); |
| 306 } | 307 } |
| 307 if (!(url.protocolIs("turn") || url.protocolIs("turns") || | 308 if (!(url.protocolIs("turn") || url.protocolIs("turns") || |
| 308 url.protocolIs("stun"))) { | 309 url.protocolIs("stun"))) { |
| 309 exceptionState.throwDOMException( | 310 exceptionState.throwDOMException( |
| 310 SyntaxError, "'" + url.protocol() + | 311 SyntaxError, |
| 311 "' is not one of the supported URL schemes " | 312 "'" + url.protocol() + |
| 312 "'stun', 'turn' or 'turns'."); | 313 "' is not one of the supported URL schemes " |
| 314 "'stun', 'turn' or 'turns'."); |
| 313 return WebRTCConfiguration(); | 315 return WebRTCConfiguration(); |
| 314 } | 316 } |
| 315 if ((url.protocolIs("turn") || url.protocolIs("turns")) && | 317 if ((url.protocolIs("turn") || url.protocolIs("turns")) && |
| 316 (username.isNull() || credential.isNull())) { | 318 (username.isNull() || credential.isNull())) { |
| 317 exceptionState.throwDOMException(InvalidAccessError, | 319 exceptionState.throwDOMException(InvalidAccessError, |
| 318 "Both username and credential are " | 320 "Both username and credential are " |
| 319 "required when the URL scheme is " | 321 "required when the URL scheme is " |
| 320 "\"turn\" or \"turns\"."); | 322 "\"turn\" or \"turns\"."); |
| 321 } | 323 } |
| 322 iceServers.push_back(WebRTCIceServer{url, username, credential}); | 324 iceServers.push_back(WebRTCIceServer{url, username, credential}); |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 const RTCSessionDescriptionInit& sessionDescriptionInit) { | 681 const RTCSessionDescriptionInit& sessionDescriptionInit) { |
| 680 if (m_signalingState == SignalingStateClosed) | 682 if (m_signalingState == SignalingStateClosed) |
| 681 return ScriptPromise::rejectWithDOMException( | 683 return ScriptPromise::rejectWithDOMException( |
| 682 scriptState, | 684 scriptState, |
| 683 DOMException::create(InvalidStateError, kSignalingStateClosedMessage)); | 685 DOMException::create(InvalidStateError, kSignalingStateClosedMessage)); |
| 684 | 686 |
| 685 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 687 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
| 686 ScriptPromise promise = resolver->promise(); | 688 ScriptPromise promise = resolver->promise(); |
| 687 RTCVoidRequest* request = RTCVoidRequestPromiseImpl::create(this, resolver); | 689 RTCVoidRequest* request = RTCVoidRequestPromiseImpl::create(this, resolver); |
| 688 m_peerHandler->setLocalDescription( | 690 m_peerHandler->setLocalDescription( |
| 689 request, WebRTCSessionDescription(sessionDescriptionInit.type(), | 691 request, |
| 690 sessionDescriptionInit.sdp())); | 692 WebRTCSessionDescription(sessionDescriptionInit.type(), |
| 693 sessionDescriptionInit.sdp())); |
| 691 return promise; | 694 return promise; |
| 692 } | 695 } |
| 693 | 696 |
| 694 ScriptPromise RTCPeerConnection::setLocalDescription( | 697 ScriptPromise RTCPeerConnection::setLocalDescription( |
| 695 ScriptState* scriptState, | 698 ScriptState* scriptState, |
| 696 const RTCSessionDescriptionInit& sessionDescriptionInit, | 699 const RTCSessionDescriptionInit& sessionDescriptionInit, |
| 697 VoidCallback* successCallback, | 700 VoidCallback* successCallback, |
| 698 RTCPeerConnectionErrorCallback* errorCallback) { | 701 RTCPeerConnectionErrorCallback* errorCallback) { |
| 699 ExecutionContext* context = scriptState->getExecutionContext(); | 702 ExecutionContext* context = scriptState->getExecutionContext(); |
| 700 if (successCallback && errorCallback) { | 703 if (successCallback && errorCallback) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 713 UseCounter:: | 716 UseCounter:: |
| 714 RTCPeerConnectionSetLocalDescriptionLegacyNoFailureCallback); | 717 RTCPeerConnectionSetLocalDescriptionLegacyNoFailureCallback); |
| 715 } | 718 } |
| 716 | 719 |
| 717 if (callErrorCallbackIfSignalingStateClosed(m_signalingState, errorCallback)) | 720 if (callErrorCallbackIfSignalingStateClosed(m_signalingState, errorCallback)) |
| 718 return ScriptPromise::castUndefined(scriptState); | 721 return ScriptPromise::castUndefined(scriptState); |
| 719 | 722 |
| 720 RTCVoidRequest* request = RTCVoidRequestImpl::create( | 723 RTCVoidRequest* request = RTCVoidRequestImpl::create( |
| 721 getExecutionContext(), this, successCallback, errorCallback); | 724 getExecutionContext(), this, successCallback, errorCallback); |
| 722 m_peerHandler->setLocalDescription( | 725 m_peerHandler->setLocalDescription( |
| 723 request, WebRTCSessionDescription(sessionDescriptionInit.type(), | 726 request, |
| 724 sessionDescriptionInit.sdp())); | 727 WebRTCSessionDescription(sessionDescriptionInit.type(), |
| 728 sessionDescriptionInit.sdp())); |
| 725 return ScriptPromise::castUndefined(scriptState); | 729 return ScriptPromise::castUndefined(scriptState); |
| 726 } | 730 } |
| 727 | 731 |
| 728 RTCSessionDescription* RTCPeerConnection::localDescription() { | 732 RTCSessionDescription* RTCPeerConnection::localDescription() { |
| 729 WebRTCSessionDescription webSessionDescription = | 733 WebRTCSessionDescription webSessionDescription = |
| 730 m_peerHandler->localDescription(); | 734 m_peerHandler->localDescription(); |
| 731 if (webSessionDescription.isNull()) | 735 if (webSessionDescription.isNull()) |
| 732 return nullptr; | 736 return nullptr; |
| 733 | 737 |
| 734 return RTCSessionDescription::create(webSessionDescription); | 738 return RTCSessionDescription::create(webSessionDescription); |
| 735 } | 739 } |
| 736 | 740 |
| 737 ScriptPromise RTCPeerConnection::setRemoteDescription( | 741 ScriptPromise RTCPeerConnection::setRemoteDescription( |
| 738 ScriptState* scriptState, | 742 ScriptState* scriptState, |
| 739 const RTCSessionDescriptionInit& sessionDescriptionInit) { | 743 const RTCSessionDescriptionInit& sessionDescriptionInit) { |
| 740 if (m_signalingState == SignalingStateClosed) | 744 if (m_signalingState == SignalingStateClosed) |
| 741 return ScriptPromise::rejectWithDOMException( | 745 return ScriptPromise::rejectWithDOMException( |
| 742 scriptState, | 746 scriptState, |
| 743 DOMException::create(InvalidStateError, kSignalingStateClosedMessage)); | 747 DOMException::create(InvalidStateError, kSignalingStateClosedMessage)); |
| 744 | 748 |
| 745 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 749 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
| 746 ScriptPromise promise = resolver->promise(); | 750 ScriptPromise promise = resolver->promise(); |
| 747 RTCVoidRequest* request = RTCVoidRequestPromiseImpl::create(this, resolver); | 751 RTCVoidRequest* request = RTCVoidRequestPromiseImpl::create(this, resolver); |
| 748 m_peerHandler->setRemoteDescription( | 752 m_peerHandler->setRemoteDescription( |
| 749 request, WebRTCSessionDescription(sessionDescriptionInit.type(), | 753 request, |
| 750 sessionDescriptionInit.sdp())); | 754 WebRTCSessionDescription(sessionDescriptionInit.type(), |
| 755 sessionDescriptionInit.sdp())); |
| 751 return promise; | 756 return promise; |
| 752 } | 757 } |
| 753 | 758 |
| 754 ScriptPromise RTCPeerConnection::setRemoteDescription( | 759 ScriptPromise RTCPeerConnection::setRemoteDescription( |
| 755 ScriptState* scriptState, | 760 ScriptState* scriptState, |
| 756 const RTCSessionDescriptionInit& sessionDescriptionInit, | 761 const RTCSessionDescriptionInit& sessionDescriptionInit, |
| 757 VoidCallback* successCallback, | 762 VoidCallback* successCallback, |
| 758 RTCPeerConnectionErrorCallback* errorCallback) { | 763 RTCPeerConnectionErrorCallback* errorCallback) { |
| 759 ExecutionContext* context = scriptState->getExecutionContext(); | 764 ExecutionContext* context = scriptState->getExecutionContext(); |
| 760 if (successCallback && errorCallback) { | 765 if (successCallback && errorCallback) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 773 UseCounter:: | 778 UseCounter:: |
| 774 RTCPeerConnectionSetRemoteDescriptionLegacyNoFailureCallback); | 779 RTCPeerConnectionSetRemoteDescriptionLegacyNoFailureCallback); |
| 775 } | 780 } |
| 776 | 781 |
| 777 if (callErrorCallbackIfSignalingStateClosed(m_signalingState, errorCallback)) | 782 if (callErrorCallbackIfSignalingStateClosed(m_signalingState, errorCallback)) |
| 778 return ScriptPromise::castUndefined(scriptState); | 783 return ScriptPromise::castUndefined(scriptState); |
| 779 | 784 |
| 780 RTCVoidRequest* request = RTCVoidRequestImpl::create( | 785 RTCVoidRequest* request = RTCVoidRequestImpl::create( |
| 781 getExecutionContext(), this, successCallback, errorCallback); | 786 getExecutionContext(), this, successCallback, errorCallback); |
| 782 m_peerHandler->setRemoteDescription( | 787 m_peerHandler->setRemoteDescription( |
| 783 request, WebRTCSessionDescription(sessionDescriptionInit.type(), | 788 request, |
| 784 sessionDescriptionInit.sdp())); | 789 WebRTCSessionDescription(sessionDescriptionInit.type(), |
| 790 sessionDescriptionInit.sdp())); |
| 785 return ScriptPromise::castUndefined(scriptState); | 791 return ScriptPromise::castUndefined(scriptState); |
| 786 } | 792 } |
| 787 | 793 |
| 788 RTCSessionDescription* RTCPeerConnection::remoteDescription() { | 794 RTCSessionDescription* RTCPeerConnection::remoteDescription() { |
| 789 WebRTCSessionDescription webSessionDescription = | 795 WebRTCSessionDescription webSessionDescription = |
| 790 m_peerHandler->remoteDescription(); | 796 m_peerHandler->remoteDescription(); |
| 791 if (webSessionDescription.isNull()) | 797 if (webSessionDescription.isNull()) |
| 792 return nullptr; | 798 return nullptr; |
| 793 | 799 |
| 794 return RTCSessionDescription::create(webSessionDescription); | 800 return RTCSessionDescription::create(webSessionDescription); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 WebCryptoNamedCurveP256) { | 909 WebCryptoNamedCurveP256) { |
| 904 keyParams.set(WebRTCKeyParams::createECDSA(WebRTCECCurveNistP256)); | 910 keyParams.set(WebRTCKeyParams::createECDSA(WebRTCECCurveNistP256)); |
| 905 } else { | 911 } else { |
| 906 return ScriptPromise::rejectWithDOMException( | 912 return ScriptPromise::rejectWithDOMException( |
| 907 scriptState, | 913 scriptState, |
| 908 DOMException::create(NotSupportedError, unsupportedParamsString)); | 914 DOMException::create(NotSupportedError, unsupportedParamsString)); |
| 909 } | 915 } |
| 910 break; | 916 break; |
| 911 default: | 917 default: |
| 912 return ScriptPromise::rejectWithDOMException( | 918 return ScriptPromise::rejectWithDOMException( |
| 913 scriptState, DOMException::create(NotSupportedError, | 919 scriptState, |
| 914 "The 1st argument provided is an " | 920 DOMException::create(NotSupportedError, |
| 915 "AlgorithmIdentifier, but the " | 921 "The 1st argument provided is an " |
| 916 "algorithm is not supported.")); | 922 "AlgorithmIdentifier, but the " |
| 923 "algorithm is not supported.")); |
| 917 break; | 924 break; |
| 918 } | 925 } |
| 919 DCHECK(!keyParams.isNull()); | 926 DCHECK(!keyParams.isNull()); |
| 920 | 927 |
| 921 std::unique_ptr<WebRTCCertificateGenerator> certificateGenerator = | 928 std::unique_ptr<WebRTCCertificateGenerator> certificateGenerator = |
| 922 WTF::wrapUnique(Platform::current()->createRTCCertificateGenerator()); | 929 WTF::wrapUnique(Platform::current()->createRTCCertificateGenerator()); |
| 923 | 930 |
| 924 // |keyParams| was successfully constructed, but does the certificate | 931 // |keyParams| was successfully constructed, but does the certificate |
| 925 // generator support these parameters? | 932 // generator support these parameters? |
| 926 if (!certificateGenerator->isSupportedKeyParams(keyParams.get())) { | 933 if (!certificateGenerator->isSupportedKeyParams(keyParams.get())) { |
| (...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1494 DEFINE_TRACE(RTCPeerConnection) { | 1501 DEFINE_TRACE(RTCPeerConnection) { |
| 1495 visitor->trace(m_localStreams); | 1502 visitor->trace(m_localStreams); |
| 1496 visitor->trace(m_remoteStreams); | 1503 visitor->trace(m_remoteStreams); |
| 1497 visitor->trace(m_dispatchScheduledEventRunner); | 1504 visitor->trace(m_dispatchScheduledEventRunner); |
| 1498 visitor->trace(m_scheduledEvents); | 1505 visitor->trace(m_scheduledEvents); |
| 1499 EventTargetWithInlineData::trace(visitor); | 1506 EventTargetWithInlineData::trace(visitor); |
| 1500 SuspendableObject::trace(visitor); | 1507 SuspendableObject::trace(visitor); |
| 1501 } | 1508 } |
| 1502 | 1509 |
| 1503 } // namespace blink | 1510 } // namespace blink |
| OLD | NEW |