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 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
665 AlgorithmError error; | 665 AlgorithmError error; |
666 if (!normalizeAlgorithm(keygenAlgorithm, WebCryptoOperationGenerateKey, cryp
toAlgorithm, &error)) { | 666 if (!normalizeAlgorithm(keygenAlgorithm, WebCryptoOperationGenerateKey, cryp
toAlgorithm, &error)) { |
667 // Reject generateCertificate with the same error as was produced by Web
Crypto. | 667 // Reject generateCertificate with the same error as was produced by Web
Crypto. |
668 // |result| is garbage collected, no need to delete. | 668 // |result| is garbage collected, no need to delete. |
669 CryptoResultImpl* result = CryptoResultImpl::create(scriptState); | 669 CryptoResultImpl* result = CryptoResultImpl::create(scriptState); |
670 ScriptPromise promise = result->promise(); | 670 ScriptPromise promise = result->promise(); |
671 result->completeWithError(error.errorType, error.errorDetails); | 671 result->completeWithError(error.errorType, error.errorDetails); |
672 return promise; | 672 return promise; |
673 } | 673 } |
674 | 674 |
| 675 // Check if |keygenAlgorithm| contains the optional DOMTimeStamp |expires| a
ttribute. |
| 676 Nullable<DOMTimeStamp> expires; |
| 677 if (keygenAlgorithm.isDictionary()) { |
| 678 Dictionary keygenAlgorithmDict = keygenAlgorithm.getAsDictionary(); |
| 679 if (keygenAlgorithmDict.hasProperty("expires")) { |
| 680 v8::Local<v8::Value> expiresValue; |
| 681 keygenAlgorithmDict.get("expires", expiresValue); |
| 682 if (expiresValue->IsNumber()) { |
| 683 double expiresDouble = expiresValue->ToNumber(scriptState->isola
te()->GetCurrentContext()).ToLocalChecked()->Value(); |
| 684 if (expiresDouble >= 0) { |
| 685 expires.set(static_cast<DOMTimeStamp>(expiresDouble)); |
| 686 } |
| 687 } |
| 688 } |
| 689 } |
| 690 |
675 // Convert from WebCrypto representation to recognized WebRTCKeyParams. WebR
TC supports a small subset of what are valid AlgorithmIdentifiers. | 691 // Convert from WebCrypto representation to recognized WebRTCKeyParams. WebR
TC supports a small subset of what are valid AlgorithmIdentifiers. |
676 const char* unsupportedParamsString = "The 1st argument provided is an Algor
ithmIdentifier with a supported algorithm name, but the parameters are not suppo
rted."; | 692 const char* unsupportedParamsString = "The 1st argument provided is an Algor
ithmIdentifier with a supported algorithm name, but the parameters are not suppo
rted."; |
677 Nullable<WebRTCKeyParams> keyParams; | 693 Nullable<WebRTCKeyParams> keyParams; |
678 switch (cryptoAlgorithm.id()) { | 694 switch (cryptoAlgorithm.id()) { |
679 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: | 695 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: |
680 // name: "RSASSA-PKCS1-v1_5" | 696 // name: "RSASSA-PKCS1-v1_5" |
681 unsigned publicExponent; | 697 unsigned publicExponent; |
682 // "publicExponent" must fit in an unsigned int. The only recognized "ha
sh" is "SHA-256". | 698 // "publicExponent" must fit in an unsigned int. The only recognized "ha
sh" is "SHA-256". |
683 if (cryptoAlgorithm.rsaHashedKeyGenParams()->convertPublicExponentToUnsi
gned(publicExponent) | 699 if (cryptoAlgorithm.rsaHashedKeyGenParams()->convertPublicExponentToUnsi
gned(publicExponent) |
684 && cryptoAlgorithm.rsaHashedKeyGenParams()->hash().id() == WebCrypto
AlgorithmIdSha256) { | 700 && cryptoAlgorithm.rsaHashedKeyGenParams()->hash().id() == WebCrypto
AlgorithmIdSha256) { |
(...skipping 26 matching lines...) Expand all Loading... |
711 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(NotSupportedError, unsupportedParamsString)); | 727 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(NotSupportedError, unsupportedParamsString)); |
712 } | 728 } |
713 | 729 |
714 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 730 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
715 ScriptPromise promise = resolver->promise(); | 731 ScriptPromise promise = resolver->promise(); |
716 | 732 |
717 std::unique_ptr<WebRTCCertificateObserver> certificateObserver(WebRTCCertifi
cateObserver::create(resolver)); | 733 std::unique_ptr<WebRTCCertificateObserver> certificateObserver(WebRTCCertifi
cateObserver::create(resolver)); |
718 | 734 |
719 // Generate certificate. The |certificateObserver| will resolve the promise
asynchronously upon completion. | 735 // Generate certificate. The |certificateObserver| will resolve the promise
asynchronously upon completion. |
720 // The observer will manage its own destruction as well as the resolver's de
struction. | 736 // The observer will manage its own destruction as well as the resolver's de
struction. |
721 certificateGenerator->generateCertificate( | 737 if (expires.isNull()) { |
722 keyParams.get(), | 738 certificateGenerator->generateCertificate( |
723 toDocument(scriptState->getExecutionContext())->url(), | 739 keyParams.get(), |
724 toDocument(scriptState->getExecutionContext())->firstPartyForCookies(), | 740 toDocument(scriptState->getExecutionContext())->url(), |
725 std::move(certificateObserver)); | 741 toDocument(scriptState->getExecutionContext())->firstPartyForCookies
(), |
| 742 std::move(certificateObserver)); |
| 743 } else { |
| 744 certificateGenerator->generateCertificateWithExpiration( |
| 745 keyParams.get(), |
| 746 toDocument(scriptState->getExecutionContext())->url(), |
| 747 toDocument(scriptState->getExecutionContext())->firstPartyForCookies
(), |
| 748 expires.get(), |
| 749 std::move(certificateObserver)); |
| 750 } |
726 | 751 |
727 return promise; | 752 return promise; |
728 } | 753 } |
729 | 754 |
730 ScriptPromise RTCPeerConnection::addIceCandidate(ScriptState* scriptState, const
RTCIceCandidateInitOrRTCIceCandidate& candidate) | 755 ScriptPromise RTCPeerConnection::addIceCandidate(ScriptState* scriptState, const
RTCIceCandidateInitOrRTCIceCandidate& candidate) |
731 { | 756 { |
732 if (m_signalingState == SignalingStateClosed) | 757 if (m_signalingState == SignalingStateClosed) |
733 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, kSignalingStateClosedMessage)); | 758 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, kSignalingStateClosedMessage)); |
734 | 759 |
735 if (isIceCandidateMissingSdp(candidate)) | 760 if (isIceCandidateMissingSdp(candidate)) |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1175 { | 1200 { |
1176 visitor->trace(m_localStreams); | 1201 visitor->trace(m_localStreams); |
1177 visitor->trace(m_remoteStreams); | 1202 visitor->trace(m_remoteStreams); |
1178 visitor->trace(m_dispatchScheduledEventRunner); | 1203 visitor->trace(m_dispatchScheduledEventRunner); |
1179 visitor->trace(m_scheduledEvents); | 1204 visitor->trace(m_scheduledEvents); |
1180 EventTargetWithInlineData::trace(visitor); | 1205 EventTargetWithInlineData::trace(visitor); |
1181 ActiveDOMObject::trace(visitor); | 1206 ActiveDOMObject::trace(visitor); |
1182 } | 1207 } |
1183 | 1208 |
1184 } // namespace blink | 1209 } // namespace blink |
OLD | NEW |