Changeset 209390 in webkit
- Timestamp:
- Dec 5, 2016 11:59:02 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 deleted
- 80 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r209388 r209390 1 2016-12-06 Sam Weinig <sam@webkit.org> 2 3 [WebIDL] Add support for converting dictionaries to JS 4 https://bugs.webkit.org/show_bug.cgi?id=165367 5 6 Reviewed by Darin Adler and Alex Christensen. 7 8 * crypto/subtle/rsa-oaep-generate-key-expected.txt: 9 * crypto/subtle/rsa-oaep-generate-key.html: 10 * crypto/subtle/rsaes-pkcs1-v1_5-generate-key-expected.txt: 11 * crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable-expected.txt: 12 * crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html: 13 * crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html: 14 * crypto/subtle/rsassa-pkcs1-v1_5-generate-key-expected.txt: 15 * crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html: 16 * crypto/webkitSubtle/rsa-oaep-generate-non-extractable-key-expected.txt: 17 * crypto/webkitSubtle/rsa-oaep-generate-non-extractable-key.html: 18 * crypto/webkitSubtle/rsa-oaep-key-manipulation-expected.txt: 19 * crypto/webkitSubtle/rsa-oaep-key-manipulation.html: 20 * crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key-expected.txt: 21 * crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key-with-leading-zeroes-in-exponent-expected.txt: 22 * crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key-with-leading-zeroes-in-exponent.html: 23 * crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key.html: 24 * crypto/workers/subtle/resources/rsa-generate-key.js: 25 * crypto/workers/subtle/rsa-generate-key-expected.txt: 26 Update tests and expected results to show that CryptoKeyPair is now a vanilla object, not a platform object. 27 1 28 2016-12-05 Antoine Quint <graouts@apple.com> 2 29 -
trunk/LayoutTests/crypto/subtle/rsa-oaep-generate-key-expected.txt
r207809 r209390 5 5 6 6 Generating a key pair... 7 PASS keyPair.toString() is '[object CryptoKeyPair]'7 PASS keyPair.toString() is '[object Object]' 8 8 PASS keyPair.publicKey.type is 'public' 9 9 PASS keyPair.publicKey.extractable is true -
trunk/LayoutTests/crypto/subtle/rsa-oaep-generate-key.html
r207809 r209390 26 26 crypto.subtle.generateKey(algorithmKeyGen, nonExtractable, ["decrypt", "encrypt", "wrapKey", "unwrapKey"]).then(function(result) { 27 27 keyPair = result; 28 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");28 shouldBe("keyPair.toString()", "'[object Object]'"); 29 29 shouldBe("keyPair.publicKey.type", "'public'"); 30 30 shouldBe("keyPair.publicKey.extractable", "true"); -
trunk/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-expected.txt
r207809 r209390 5 5 6 6 Generating a key pair... 7 PASS keyPair.toString() is '[object CryptoKeyPair]'7 PASS keyPair.toString() is '[object Object]' 8 8 PASS keyPair.publicKey.type is 'public' 9 9 PASS keyPair.publicKey.extractable is true -
trunk/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable-expected.txt
r207809 r209390 5 5 6 6 Generating a key pair... 7 PASS keyPair.toString() is '[object CryptoKeyPair]'7 PASS keyPair.toString() is '[object Object]' 8 8 PASS keyPair.publicKey.type is 'public' 9 9 PASS keyPair.publicKey.extractable is true -
trunk/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html
r207809 r209390 25 25 crypto.subtle.generateKey(algorithmKeyGen, extractable, ["decrypt", "encrypt"]).then(function(result) { 26 26 keyPair = result; 27 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");27 shouldBe("keyPair.toString()", "'[object Object]'"); 28 28 shouldBe("keyPair.publicKey.type", "'public'"); 29 29 shouldBe("keyPair.publicKey.extractable", "true"); -
trunk/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html
r207809 r209390 25 25 crypto.subtle.generateKey(algorithmKeyGen, nonExtractable, ["decrypt", "encrypt"]).then(function(result) { 26 26 keyPair = result; 27 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");27 shouldBe("keyPair.toString()", "'[object Object]'"); 28 28 shouldBe("keyPair.publicKey.type", "'public'"); 29 29 shouldBe("keyPair.publicKey.extractable", "true"); -
trunk/LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key-expected.txt
r207809 r209390 5 5 6 6 Generating a key pair... 7 PASS keyPair.toString() is '[object CryptoKeyPair]'7 PASS keyPair.toString() is '[object Object]' 8 8 PASS keyPair.publicKey.type is 'public' 9 9 PASS keyPair.publicKey.extractable is true -
trunk/LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
r207809 r209390 26 26 crypto.subtle.generateKey(algorithmKeyGen, nonExtractable, ["sign", "verify"]).then(function(result) { 27 27 keyPair = result; 28 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");28 shouldBe("keyPair.toString()", "'[object Object]'"); 29 29 shouldBe("keyPair.publicKey.type", "'public'"); 30 30 shouldBe("keyPair.publicKey.extractable", "true"); -
trunk/LayoutTests/crypto/webkitSubtle/rsa-oaep-generate-non-extractable-key-expected.txt
r206883 r209390 5 5 6 6 Generating a key pair... 7 PASS keyPair.toString() is '[object CryptoKeyPair]'7 PASS keyPair.toString() is '[object Object]' 8 8 PASS keyPair.publicKey.type is 'public' 9 9 PASS keyPair.publicKey.extractable is true -
trunk/LayoutTests/crypto/webkitSubtle/rsa-oaep-generate-non-extractable-key.html
r206883 r209390 25 25 crypto.webkitSubtle.generateKey(algorithmKeyGen, nonExtractable, []).then(function(result) { 26 26 keyPair = result; 27 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");27 shouldBe("keyPair.toString()", "'[object Object]'"); 28 28 shouldBe("keyPair.publicKey.type", "'public'"); 29 29 shouldBe("keyPair.publicKey.extractable", "true"); -
trunk/LayoutTests/crypto/webkitSubtle/rsa-oaep-key-manipulation-expected.txt
r206883 r209390 5 5 6 6 Generating a key pair... 7 PASS keyPair.toString() is '[object CryptoKeyPair]'7 PASS keyPair.toString() is '[object Object]' 8 8 PASS keyPair.publicKey.type is 'public' 9 9 PASS keyPair.publicKey.algorithm.name is 'RSA-OAEP' -
trunk/LayoutTests/crypto/webkitSubtle/rsa-oaep-key-manipulation.html
r206883 r209390 25 25 crypto.webkitSubtle.generateKey(algorithmKeyGen, extractable, ["encrypt", "decrypt", "wrapKey", "unwrapKey"]).then(function(result) { 26 26 keyPair = result; 27 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");27 shouldBe("keyPair.toString()", "'[object Object]'"); 28 28 shouldBe("keyPair.publicKey.type", "'public'"); 29 29 shouldBe("keyPair.publicKey.algorithm.name", "'RSA-OAEP'"); -
trunk/LayoutTests/crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key-expected.txt
r206883 r209390 5 5 6 6 Generating a key pair... 7 PASS keyPair.toString() is '[object CryptoKeyPair]'7 PASS keyPair.toString() is '[object Object]' 8 8 PASS keyPair.publicKey.type is 'public' 9 9 PASS keyPair.publicKey.algorithm.name is 'RSASSA-PKCS1-v1_5' -
trunk/LayoutTests/crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key-with-leading-zeroes-in-exponent-expected.txt
r206883 r209390 5 5 6 6 Generating a key pair... 7 PASS keyPair.toString() is '[object CryptoKeyPair]'7 PASS keyPair.toString() is '[object Object]' 8 8 PASS keyPair.publicKey.type is 'public' 9 9 PASS keyPair.publicKey.algorithm.name is 'RSASSA-PKCS1-v1_5' -
trunk/LayoutTests/crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key-with-leading-zeroes-in-exponent.html
r206883 r209390 25 25 crypto.webkitSubtle.generateKey(algorithmKeyGen, extractable, ["sign", "verify"]).then(function(result) { 26 26 keyPair = result; 27 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");27 shouldBe("keyPair.toString()", "'[object Object]'"); 28 28 shouldBe("keyPair.publicKey.type", "'public'"); 29 29 shouldBe("keyPair.publicKey.algorithm.name", "'RSASSA-PKCS1-v1_5'"); -
trunk/LayoutTests/crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key.html
r206883 r209390 25 25 crypto.webkitSubtle.generateKey(algorithmKeyGen, extractable, ["sign", "verify"]).then(function(result) { 26 26 keyPair = result; 27 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");27 shouldBe("keyPair.toString()", "'[object Object]'"); 28 28 shouldBe("keyPair.publicKey.type", "'public'"); 29 29 shouldBe("keyPair.publicKey.algorithm.name", "'RSASSA-PKCS1-v1_5'"); -
trunk/LayoutTests/crypto/workers/subtle/resources/rsa-generate-key.js
r208759 r209390 14 14 }).then(function(result) { 15 15 keyPair = result; 16 shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");16 shouldBe("keyPair.toString()", "'[object Object]'"); 17 17 shouldBe("keyPair.publicKey.type", "'public'"); 18 18 shouldBe("keyPair.publicKey.extractable", "true"); -
trunk/LayoutTests/crypto/workers/subtle/rsa-generate-key-expected.txt
r208759 r209390 8 8 PASS [Worker] crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 0, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign", "verify"]) rejected promise with OperationError (DOM Exception 34): The operation failed for an operation-specific reason. 9 9 [Worker] Generating a key... 10 PASS [Worker] keyPair.toString() is '[object CryptoKeyPair]'10 PASS [Worker] keyPair.toString() is '[object Object]' 11 11 PASS [Worker] keyPair.publicKey.type is 'public' 12 12 PASS [Worker] keyPair.publicKey.extractable is true -
trunk/Source/WebCore/CMakeLists.txt
r209303 r209390 1106 1106 bindings/js/JSCryptoCustom.cpp 1107 1107 bindings/js/JSCryptoKeyCustom.cpp 1108 bindings/js/JSCryptoKeyPairCustom.cpp1109 1108 bindings/js/JSCryptoKeySerializationJWK.cpp 1110 1109 bindings/js/JSCryptoOperationData.cpp -
trunk/Source/WebCore/ChangeLog
r209389 r209390 1 2016-12-06 Sam Weinig <sam@webkit.org> 2 3 [WebIDL] Add support for converting dictionaries to JS 4 https://bugs.webkit.org/show_bug.cgi?id=165367 5 6 Reviewed by Darin Adler and Alex Christensen. 7 8 - Adds support for converting dictionary types to JSValues via JSDOMConvert. 9 - Adopts that functionality to correct the CryptoKeyPair implementation, which 10 is supposed to be a dictionary. 11 (While doing this, I also update places that were passing both a CryptoKey 12 and CryptoKeyPair to use a Variant, since they always only wanted one.) 13 - Re-works DOMPromise and DeferredPromise to be based on JSDOMConvert and IDLTypes. 14 15 * CMakeLists.txt: 16 * PlatformEfl.cmake: 17 * PlatformGTK.cmake: 18 * PlatformMac.cmake: 19 * WebCore.xcodeproj/project.pbxproj: 20 Remove JSCryptoKeyPairCustom.cpp and CryptoKeyPair.cpp. 21 22 * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp: 23 * Modules/mediasource/MediaSource.cpp: 24 * Modules/mediasource/SourceBuffer.cpp: 25 * bindings/js/JSMediaDevicesCustom.cpp: 26 * html/MediaController.cpp: 27 * html/track/TextTrack.cpp: 28 Add some missing includes. 29 30 * Modules/applepay/ApplePaySession.cpp: 31 (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): 32 (WebCore::ApplePaySession::openPaymentSetup): 33 * Modules/fetch/FetchBody.cpp: 34 (WebCore::FetchBody::text): 35 (WebCore::FetchBody::consume): 36 (WebCore::FetchBody::loadingFailed): 37 * Modules/fetch/FetchBodyConsumer.cpp: 38 (WebCore::FetchBodyConsumer::resolveWithData): 39 (WebCore::FetchBodyConsumer::resolve): 40 * Modules/fetch/FetchBodyOwner.cpp: 41 (WebCore::FetchBodyOwner::blob): 42 (WebCore::FetchBodyOwner::formData): 43 (WebCore::FetchBodyOwner::text): 44 * Modules/fetch/FetchResponse.h: 45 * Modules/mediastream/MediaDevices.h: 46 * Modules/mediastream/MediaEndpointPeerConnection.cpp: 47 (WebCore::MediaEndpointPeerConnection::replaceTrack): 48 (WebCore::MediaEndpointPeerConnection::replaceTrackTask): 49 * Modules/mediastream/MediaEndpointPeerConnection.h: 50 * Modules/mediastream/MediaStreamTrack.cpp: 51 (WebCore::MediaStreamTrack::applyConstraints): 52 * Modules/mediastream/PeerConnectionBackend.cpp: 53 (WebCore::PeerConnectionBackend::setLocalDescription): 54 (WebCore::PeerConnectionBackend::setRemoteDescription): 55 (WebCore::PeerConnectionBackend::addIceCandidate): 56 * Modules/mediastream/PeerConnectionBackend.h: 57 * Modules/mediastream/RTCPeerConnection.cpp: 58 (WebCore::RTCPeerConnection::queuedSetLocalDescription): 59 (WebCore::RTCPeerConnection::queuedSetRemoteDescription): 60 (WebCore::RTCPeerConnection::queuedAddIceCandidate): 61 (WebCore::RTCPeerConnection::replaceTrack): 62 * Modules/mediastream/RTCPeerConnection.h: 63 * Modules/mediastream/RTCRtpSender.cpp: 64 (WebCore::RTCRtpSender::replaceTrack): 65 * Modules/mediastream/RTCRtpSender.h: 66 * Modules/mediastream/UserMediaRequest.cpp: 67 (WebCore::UserMediaRequest::deny): 68 * Modules/webaudio/AudioContext.cpp: 69 (WebCore::AudioContext::suspend): 70 (WebCore::AudioContext::resume): 71 * bindings/js/JSCustomElementRegistryCustom.cpp: 72 (WebCore::whenDefinedPromise): 73 * bindings/js/ScriptModuleLoader.cpp: 74 (WebCore::ScriptModuleLoader::resolve): 75 (WebCore::ScriptModuleLoader::notifyFinished): 76 * css/FontFace.h: 77 * css/FontFaceSet.cpp: 78 (WebCore::FontFaceSet::load): 79 * css/FontFaceSet.h: 80 * dom/CustomElementRegistry.cpp: 81 (WebCore::CustomElementRegistry::addElementDefinition): 82 * html/HTMLMediaElement.cpp: 83 (WebCore::HTMLMediaElement::rejectPendingPlayPromises): 84 * html/HTMLMediaElement.h: 85 Update to use new IDLType based promises. 86 87 * bindings/generic/IDLTypes.h: 88 Add a new type, ParameterType, to use as the parameter to 89 DOMPromise/DeferredPromise. 90 91 * bindings/js/JSCryptoKeyPairCustom.cpp: 92 Removed. 93 94 * bindings/js/JSDOMConvert.h: 95 (WebCore::JSConverter<IDLDictionary<T>>::convert): 96 Add JSConverter specialization for IDLDictionary. Have it simply forward to a generated 97 convertDictionaryToJS function, following the convention set in place by IDLEnumeration. 98 99 * bindings/js/JSDOMPromise.cpp: 100 * bindings/js/JSDOMPromise.h: 101 Re-write to be based on IDLTypes and JSDOMConvert, simplifying the implementation. 102 103 * bindings/js/JSSubtleCryptoCustom.cpp: 104 * bindings/js/JSWebKitSubtleCryptoCustom.cpp: 105 Update for variant based KeyOrKeyPair. 106 107 * bindings/scripts/CodeGeneratorJS.pm: 108 (GenerateDictionaryHeaderContent): 109 (GenerateDictionaryImplementationContent): 110 Add generation of the convertDictionaryToJS function. I made it require the JSGenerateToJSObject 111 extended attribute for now, as the majority of dictionaries do not need this code generated for them. 112 113 * bindings/scripts/test/JS/JSTestObj.cpp: 114 (WebCore::convertDictionaryToJS): 115 * bindings/scripts/test/JS/JSTestObj.h: 116 * bindings/scripts/test/TestObj.idl: 117 Add JSGenerateToJSObject to a dictionary to test generation in bindings tests. 118 119 * crypto/CryptoAlgorithm.h: 120 Change KeyOrKeyPairCallback to take a Variant<RefPtr<CryptoKey>, CryptoKeyPair>, rather 121 than two separate arguments. 122 123 * crypto/CryptoKeyPair.cpp: 124 Removed. 125 126 * crypto/CryptoKeyPair.h: 127 Convert to a struct. 128 129 * crypto/CryptoKeyPair.idl: 130 Convert to a dictionary. 131 132 * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: 133 (WebCore::CryptoAlgorithmAES_CBC::generateKey): 134 * crypto/algorithms/CryptoAlgorithmAES_KW.cpp: 135 (WebCore::CryptoAlgorithmAES_KW::generateKey): 136 * crypto/algorithms/CryptoAlgorithmHMAC.cpp: 137 (WebCore::CryptoAlgorithmHMAC::generateKey): 138 * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp: 139 (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey): 140 * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: 141 (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey): 142 * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp: 143 (WebCore::CryptoAlgorithmRSA_OAEP::generateKey): 144 * crypto/keys/CryptoKeyRSA.h: 145 * crypto/mac/CryptoKeyRSAMac.cpp: 146 (WebCore::CryptoKeyRSA::generatePair): 147 Update for new signature of KeyOrKeyPairCallback. 148 1 149 2016-12-05 Dave Hyatt <hyatt@apple.com> 2 150 -
trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp
r208985 r209390 736 736 737 737 RunLoop::main().dispatch([promise, canMakePayments]() mutable { 738 promise->resolve (canMakePayments);738 promise->resolve<IDLBoolean>(canMakePayments); 739 739 }); 740 740 return { }; … … 744 744 745 745 paymentCoordinator.canMakePaymentsWithActiveCard(merchantIdentifier, document.domain(), [promise](bool canMakePayments) mutable { 746 promise->resolve (canMakePayments);746 promise->resolve<IDLBoolean>(canMakePayments); 747 747 }); 748 748 return { }; … … 769 769 770 770 paymentCoordinator.openPaymentSetup(merchantIdentifier, document.domain(), [promise](bool result) mutable { 771 promise->resolve (result);771 promise->resolve<IDLBoolean>(result); 772 772 }); 773 773 -
trunk/Source/WebCore/Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp
r206984 r209390 30 30 31 31 #include "EventNames.h" 32 #include "ExceptionCode.h" 32 33 #include "HTMLMediaElement.h" 33 34 #include "WebKitMediaKeySession.h" -
trunk/Source/WebCore/Modules/fetch/FetchBody.cpp
r209195 r209390 108 108 { 109 109 if (isText()) { 110 promise->resolve (textBody());110 promise->resolve<IDLDOMString>(textBody()); 111 111 return; 112 112 } … … 145 145 if (isFormData()) { 146 146 // FIXME: Support consuming FormData. 147 promise->reject( 0);147 promise->reject(); 148 148 return; 149 149 } … … 213 213 { 214 214 if (m_consumePromise) { 215 m_consumePromise->reject( 0);215 m_consumePromise->reject(); 216 216 m_consumePromise = nullptr; 217 217 } -
trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp
r209195 r209390 66 66 return; 67 67 case Type::Blob: 68 promise->resolveWithNewlyCreated (blobFromData(data, length, m_contentType));68 promise->resolveWithNewlyCreated<IDLInterface<Blob>>(blobFromData(data, length, m_contentType).get()); 69 69 return; 70 70 case Type::JSON: … … 72 72 return; 73 73 case Type::Text: 74 promise->resolve (textFromUTF8(data, length));74 promise->resolve<IDLDOMString>(textFromUTF8(data, length)); 75 75 return; 76 76 case Type::None: … … 88 88 return; 89 89 case Type::Blob: 90 promise->resolveWithNewlyCreated (takeAsBlob());90 promise->resolveWithNewlyCreated<IDLInterface<Blob>>(takeAsBlob().get()); 91 91 return; 92 92 case Type::JSON: … … 94 94 return; 95 95 case Type::Text: 96 promise->resolve (takeAsText());96 promise->resolve<IDLDOMString>(takeAsText()); 97 97 return; 98 98 case Type::None: -
trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp
r209195 r209390 91 91 { 92 92 if (isBodyNull()) { 93 promise->resolve (Blob::create(Vector<uint8_t>(), Blob::normalizedContentType(extractMIMETypeFromMediaType(m_contentType))));93 promise->resolve<IDLInterface<Blob>>(Blob::create({ }, Blob::normalizedContentType(extractMIMETypeFromMediaType(m_contentType))).get()); 94 94 return; 95 95 } … … 139 139 { 140 140 if (isBodyNull()) { 141 promise->reject( 0);141 promise->reject(); 142 142 return; 143 143 } … … 167 167 { 168 168 if (isBodyNull()) { 169 promise->resolve (String());169 promise->resolve<IDLDOMString>({ }); 170 170 return; 171 171 } -
trunk/Source/WebCore/Modules/fetch/FetchResponse.h
r209195 r209390 53 53 static ExceptionOr<Ref<FetchResponse>> redirect(ScriptExecutionContext&, const String& url, int status); 54 54 55 using FetchPromise = DOMPromise< FetchResponse>;55 using FetchPromise = DOMPromise<IDLInterface<FetchResponse>>; 56 56 static void fetch(ScriptExecutionContext&, FetchRequest&, FetchPromise&&); 57 57 -
trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp
r208985 r209390 39 39 #include "Event.h" 40 40 #include "EventNames.h" 41 #include "ExceptionCode.h" 41 42 #include "HTMLMediaElement.h" 42 43 #include "Logging.h" -
trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp
r208658 r209390 39 39 #include "Event.h" 40 40 #include "EventNames.h" 41 #include "ExceptionCode.h" 41 42 #include "GenericEventQueue.h" 42 43 #include "HTMLMediaElement.h" -
trunk/Source/WebCore/Modules/mediastream/MediaDevices.h
r208663 r209390 33 33 #if ENABLE(MEDIA_STREAM) 34 34 35 #include "ExceptionOr.h" 35 36 #include "JSDOMPromise.h" 36 37 #include "MediaDeviceInfo.h" … … 49 50 Document* document() const; 50 51 51 using Promise = DOMPromise< MediaStream>;52 using EnumerateDevicesPromise = DOMPromise< MediaDeviceInfoVector>;52 using Promise = DOMPromise<IDLInterface<MediaStream>>; 53 using EnumerateDevicesPromise = DOMPromise<IDLSequence<IDLInterface<MediaDeviceInfo>>>; 53 54 54 55 ExceptionOr<void> getUserMedia(Ref<MediaConstraintsImpl>&& audioConstraints, Ref<MediaConstraintsImpl>&& videoConstraints, Promise&&) const; -
trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp
r208703 r209390 704 704 } 705 705 706 void MediaEndpointPeerConnection::replaceTrack(RTCRtpSender& sender, RefPtr<MediaStreamTrack>&& withTrack, PeerConnection::VoidPromise&& promise)706 void MediaEndpointPeerConnection::replaceTrack(RTCRtpSender& sender, RefPtr<MediaStreamTrack>&& withTrack, DOMPromise<void>&& promise) 707 707 { 708 708 RTCRtpTransceiver* transceiver = matchTransceiver(m_peerConnection.getTransceivers(), [&sender] (RTCRtpTransceiver& current) { … … 724 724 } 725 725 726 void MediaEndpointPeerConnection::replaceTrackTask(RTCRtpSender& sender, const String& mid, RefPtr<MediaStreamTrack>&& withTrack, PeerConnection::VoidPromise& promise)726 void MediaEndpointPeerConnection::replaceTrackTask(RTCRtpSender& sender, const String& mid, RefPtr<MediaStreamTrack>&& withTrack, DOMPromise<void>& promise) 727 727 { 728 728 if (m_peerConnection.internalSignalingState() == SignalingState::Closed) -
trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h
r208694 r209390 70 70 71 71 Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) override; 72 void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, PeerConnection::VoidPromise&&) override;72 void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromise<void>&&) override; 73 73 74 74 bool isNegotiationNeeded() const override { return m_negotiationNeeded; }; … … 97 97 void addIceCandidateTask(RTCIceCandidate&); 98 98 99 void replaceTrackTask(RTCRtpSender&, const String& mid, RefPtr<MediaStreamTrack>&&, PeerConnection::VoidPromise&);99 void replaceTrackTask(RTCRtpSender&, const String& mid, RefPtr<MediaStreamTrack>&&, DOMPromise<void>&); 100 100 101 101 bool localDescriptionTypeValidForState(RTCSessionDescription::SdpType) const; -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
r208688 r209390 188 188 return; 189 189 190 weakThis->m_promise->reject (OverconstrainedError::create(failedConstraint, message).get());190 weakThis->m_promise->rejectType<IDLInterface<OverconstrainedError>>(OverconstrainedError::create(failedConstraint, message).get()); 191 191 }; 192 192 -
trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp
r208985 r209390 128 128 } 129 129 130 void PeerConnectionBackend::setLocalDescription(RTCSessionDescription& sessionDescription, PeerConnection::VoidPromise&& promise)130 void PeerConnectionBackend::setLocalDescription(RTCSessionDescription& sessionDescription, DOMPromise<void>&& promise) 131 131 { 132 132 ASSERT(m_peerConnection.internalSignalingState() != PeerConnectionStates::SignalingState::Closed); … … 186 186 } 187 187 188 void PeerConnectionBackend::setRemoteDescription(RTCSessionDescription& sessionDescription, PeerConnection::VoidPromise&& promise)188 void PeerConnectionBackend::setRemoteDescription(RTCSessionDescription& sessionDescription, DOMPromise<void>&& promise) 189 189 { 190 190 ASSERT(m_peerConnection.internalSignalingState() != PeerConnectionStates::SignalingState::Closed); … … 225 225 } 226 226 227 void PeerConnectionBackend::addIceCandidate(RTCIceCandidate& iceCandidate, PeerConnection::VoidPromise&& promise)227 void PeerConnectionBackend::addIceCandidate(RTCIceCandidate& iceCandidate, DOMPromise<void>&& promise) 228 228 { 229 229 ASSERT(m_peerConnection.internalSignalingState() != PeerConnectionStates::SignalingState::Closed); -
trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h
r208985 r209390 60 60 61 61 namespace PeerConnection { 62 typedef DOMPromise<RTCSessionDescription> SessionDescriptionPromise; 63 typedef DOMPromise<void> VoidPromise; 64 typedef DOMPromise<RTCStatsResponse> StatsPromise; 62 using SessionDescriptionPromise = DOMPromise<IDLInterface<RTCSessionDescription>>; 63 using StatsPromise = DOMPromise<IDLInterface<RTCStatsResponse>>; 65 64 } 66 65 … … 76 75 void createOffer(RTCOfferOptions&&, PeerConnection::SessionDescriptionPromise&&); 77 76 void createAnswer(RTCAnswerOptions&&, PeerConnection::SessionDescriptionPromise&&); 78 void setLocalDescription(RTCSessionDescription&, PeerConnection::VoidPromise&&);79 void setRemoteDescription(RTCSessionDescription&, PeerConnection::VoidPromise&&);80 void addIceCandidate(RTCIceCandidate&, PeerConnection::VoidPromise&&);77 void setLocalDescription(RTCSessionDescription&, DOMPromise<void>&&); 78 void setRemoteDescription(RTCSessionDescription&, DOMPromise<void>&&); 79 void addIceCandidate(RTCIceCandidate&, DOMPromise<void>&&); 81 80 82 81 virtual std::unique_ptr<RTCDataChannelHandler> createDataChannelHandler(const String&, const RTCDataChannelInit&) = 0; … … 99 98 100 99 virtual Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) = 0; 101 virtual void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, PeerConnection::VoidPromise&&) = 0;100 virtual void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromise<void>&&) = 0; 102 101 103 102 virtual bool isNegotiationNeeded() const = 0; … … 141 140 private: 142 141 std::optional<PeerConnection::SessionDescriptionPromise> m_offerAnswerPromise; 143 std::optional< PeerConnection::VoidPromise> m_setDescriptionPromise;144 std::optional< PeerConnection::VoidPromise> m_addIceCandidatePromise;142 std::optional<DOMPromise<void>> m_setDescriptionPromise; 143 std::optional<DOMPromise<void>> m_addIceCandidatePromise; 145 144 }; 146 145 -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp
r208694 r209390 229 229 } 230 230 231 void RTCPeerConnection::queuedSetLocalDescription(RTCSessionDescription& description, PeerConnection::VoidPromise&& promise)231 void RTCPeerConnection::queuedSetLocalDescription(RTCSessionDescription& description, DOMPromise<void>&& promise) 232 232 { 233 233 if (m_signalingState == SignalingState::Closed) { … … 254 254 } 255 255 256 void RTCPeerConnection::queuedSetRemoteDescription(RTCSessionDescription& description, PeerConnection::VoidPromise&& promise)256 void RTCPeerConnection::queuedSetRemoteDescription(RTCSessionDescription& description, DOMPromise<void>&& promise) 257 257 { 258 258 if (m_signalingState == SignalingState::Closed) { … … 279 279 } 280 280 281 void RTCPeerConnection::queuedAddIceCandidate(RTCIceCandidate& rtcCandidate, VoidPromise&& promise)281 void RTCPeerConnection::queuedAddIceCandidate(RTCIceCandidate& rtcCandidate, DOMPromise<void>&& promise) 282 282 { 283 283 if (m_signalingState == SignalingState::Closed) { … … 470 470 } 471 471 472 void RTCPeerConnection::replaceTrack(RTCRtpSender& sender, RefPtr<MediaStreamTrack>&& withTrack, PeerConnection::VoidPromise&& promise)472 void RTCPeerConnection::replaceTrack(RTCRtpSender& sender, RefPtr<MediaStreamTrack>&& withTrack, DOMPromise<void>&& promise) 473 473 { 474 474 m_backend->replaceTrack(sender, WTFMove(withTrack), WTFMove(promise)); -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h
r208694 r209390 91 91 void queuedCreateAnswer(RTCAnswerOptions&&, PeerConnection::SessionDescriptionPromise&&); 92 92 93 void queuedSetLocalDescription(RTCSessionDescription&, PeerConnection::VoidPromise&&);93 void queuedSetLocalDescription(RTCSessionDescription&, DOMPromise<void>&&); 94 94 RefPtr<RTCSessionDescription> localDescription() const; 95 95 RefPtr<RTCSessionDescription> currentLocalDescription() const; 96 96 RefPtr<RTCSessionDescription> pendingLocalDescription() const; 97 97 98 void queuedSetRemoteDescription(RTCSessionDescription&, PeerConnection::VoidPromise&&);98 void queuedSetRemoteDescription(RTCSessionDescription&, DOMPromise<void>&&); 99 99 RefPtr<RTCSessionDescription> remoteDescription() const; 100 100 RefPtr<RTCSessionDescription> currentRemoteDescription() const; … … 103 103 String signalingState() const; 104 104 105 void queuedAddIceCandidate(RTCIceCandidate&, PeerConnection::VoidPromise&&);105 void queuedAddIceCandidate(RTCIceCandidate&, DOMPromise<void>&&); 106 106 107 107 String iceGatheringState() const; … … 156 156 157 157 // RTCRtpSenderClient 158 void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, PeerConnection::VoidPromise&&) final;158 void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromise<void>&&) final; 159 159 160 160 PeerConnectionStates::SignalingState m_signalingState { PeerConnectionStates::SignalingState::Stable }; -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp
r208118 r209390 68 68 } 69 69 70 ExceptionOr<void> RTCRtpSender::replaceTrack(Ref<MediaStreamTrack>&& withTrack, PeerConnection::VoidPromise&& promise)70 ExceptionOr<void> RTCRtpSender::replaceTrack(Ref<MediaStreamTrack>&& withTrack, DOMPromise<void>&& promise) 71 71 { 72 72 if (isStopped()) { -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h
r208118 r209390 40 40 class RTCRtpSenderClient { 41 41 public: 42 virtual void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, PeerConnection::VoidPromise&&) = 0;42 virtual void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromise<void>&&) = 0; 43 43 44 44 virtual ~RTCRtpSenderClient() { } … … 60 60 void setTrack(RefPtr<MediaStreamTrack>&&); 61 61 62 ExceptionOr<void> replaceTrack(Ref<MediaStreamTrack>&&, PeerConnection::VoidPromise&&);62 ExceptionOr<void> replaceTrack(Ref<MediaStreamTrack>&&, DOMPromise<void>&&); 63 63 64 64 private: -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r208938 r209390 213 213 break; 214 214 case MediaAccessDenialReason::InvalidConstraint: 215 m_promise.reject (OverconstrainedError::create(invalidConstraint, ASCIILiteral("Invalid constraint")).get());215 m_promise.rejectType<IDLInterface<OverconstrainedError>>(OverconstrainedError::create(invalidConstraint, ASCIILiteral("Invalid constraint")).get()); 216 216 break; 217 217 case MediaAccessDenialReason::HardwareError: -
trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp
r208606 r209390 1032 1032 1033 1033 if (m_state == State::Closed || m_state == State::Interrupted || !m_destinationNode) { 1034 promise.reject( 0);1034 promise.reject(); 1035 1035 return; 1036 1036 } … … 1061 1061 1062 1062 if (m_state == State::Closed || !m_destinationNode) { 1063 promise.reject( 0);1063 promise.reject(); 1064 1064 return; 1065 1065 } -
trunk/Source/WebCore/PlatformEfl.cmake
r208677 r209390 408 408 crypto/CryptoAlgorithmRegistry.cpp 409 409 crypto/CryptoKey.cpp 410 crypto/CryptoKeyPair.cpp411 410 crypto/SubtleCrypto.cpp 412 411 crypto/WebKitSubtleCrypto.cpp -
trunk/Source/WebCore/PlatformGTK.cmake
r208948 r209390 400 400 crypto/CryptoAlgorithmRegistry.cpp 401 401 crypto/CryptoKey.cpp 402 crypto/CryptoKeyPair.cpp403 402 crypto/SubtleCrypto.cpp 404 403 crypto/WebKitSubtleCrypto.cpp -
trunk/Source/WebCore/PlatformMac.cmake
r209126 r209390 181 181 crypto/CryptoAlgorithmRegistry.cpp 182 182 crypto/CryptoKey.cpp 183 crypto/CryptoKeyPair.cpp184 183 crypto/SubtleCrypto.cpp 185 184 crypto/WebKitSubtleCrypto.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r209346 r209390 6262 6262 E1F1E82F0C3C2BB9006DB391 /* XSLTExtensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1F1E82D0C3C2BB9006DB391 /* XSLTExtensions.cpp */; }; 6263 6263 E1F1E8300C3C2BB9006DB391 /* XSLTExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F1E82E0C3C2BB9006DB391 /* XSLTExtensions.h */; }; 6264 E1F80B8718317252007885C3 /* CryptoKeyPair.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1F80B8518317252007885C3 /* CryptoKeyPair.cpp */; }; 6265 E1F80B8818317252007885C3 /* CryptoKeyPair.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F80B8618317252007885C3 /* CryptoKeyPair.h */; }; 6266 E1F80B8A183172A2007885C3 /* JSCryptoKeyPairCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1F80B89183172A2007885C3 /* JSCryptoKeyPairCustom.cpp */; }; 6264 E1F80B8818317252007885C3 /* CryptoKeyPair.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F80B8618317252007885C3 /* CryptoKeyPair.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6267 6265 E1F80B8D183172B5007885C3 /* JSCryptoKeyPair.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1F80B8B183172B5007885C3 /* JSCryptoKeyPair.cpp */; }; 6268 6266 E1F80B8E183172B5007885C3 /* JSCryptoKeyPair.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F80B8C183172B5007885C3 /* JSCryptoKeyPair.h */; }; … … 9771 9769 5DB1BC6910715A6400EFAA49 /* TransformSourceLibxslt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformSourceLibxslt.cpp; sourceTree = "<group>"; }; 9772 9770 5DFEBAB618592B6D00C75BEB /* WebKitAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitAvailability.h; sourceTree = "<group>"; }; 9773 5E16A2E21BFA64FB0029A21E /* MediaEndpointPeerConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaEndpointPeerConnection.cpp; sourceTree = "<group>"; };9774 5E16A2E31BFA64FB0029A21E /* MediaEndpointPeerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaEndpointPeerConnection.h; sourceTree = "<group>"; };9771 5E16A2E21BFA64FB0029A21E /* MediaEndpointPeerConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = MediaEndpointPeerConnection.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 9772 5E16A2E31BFA64FB0029A21E /* MediaEndpointPeerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = MediaEndpointPeerConnection.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 9775 9773 5E2C434D1BCEE2E50001E2BC /* PeerConnectionBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeerConnectionBackend.h; sourceTree = "<group>"; }; 9776 9774 5E2C434F1BCEE2E50001E2BC /* RTCConfiguration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCConfiguration.cpp; sourceTree = "<group>"; }; … … 14262 14260 E1F1E82E0C3C2BB9006DB391 /* XSLTExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XSLTExtensions.h; sourceTree = "<group>"; }; 14263 14261 E1F80B8418317247007885C3 /* CryptoKeyPair.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = CryptoKeyPair.idl; sourceTree = "<group>"; }; 14264 E1F80B8518317252007885C3 /* CryptoKeyPair.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptoKeyPair.cpp; sourceTree = "<group>"; };14265 14262 E1F80B8618317252007885C3 /* CryptoKeyPair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoKeyPair.h; sourceTree = "<group>"; }; 14266 E1F80B89183172A2007885C3 /* JSCryptoKeyPairCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCryptoKeyPairCustom.cpp; sourceTree = "<group>"; };14267 14263 E1F80B8B183172B5007885C3 /* JSCryptoKeyPair.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCryptoKeyPair.cpp; sourceTree = "<group>"; }; 14268 14264 E1F80B8C183172B5007885C3 /* JSCryptoKeyPair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCryptoKeyPair.h; sourceTree = "<group>"; }; … … 22051 22047 7CEF26181D6A92E300BE905D /* JSCryptoCustom.cpp */, 22052 22048 E157A8E618184C67009F821D /* JSCryptoKeyCustom.cpp */, 22053 E1F80B89183172A2007885C3 /* JSCryptoKeyPairCustom.cpp */,22054 22049 BC46C1ED0C0DDBDF0020CFC3 /* JSCSSRuleCustom.cpp */, 22055 22050 AD726FE916D9F40A003A4E6D /* JSCSSRuleCustom.h */, … … 23200 23195 E157A8DC18172C2C009F821D /* CryptoKey.idl */, 23201 23196 E125F85D182C2DF600D84CD9 /* CryptoKeyData.h */, 23202 E1F80B8518317252007885C3 /* CryptoKeyPair.cpp */,23203 23197 E1F80B8618317252007885C3 /* CryptoKeyPair.h */, 23204 23198 E1F80B8418317247007885C3 /* CryptoKeyPair.idl */, … … 29033 29027 E125F8351822F18A00D84CD9 /* CryptoKeyHMAC.cpp in Sources */, 29034 29028 E19AC3F9182566F700349426 /* CryptoKeyMac.cpp in Sources */, 29035 E1F80B8718317252007885C3 /* CryptoKeyPair.cpp in Sources */,29036 29029 57E2336B1DCC262400F28D01 /* CryptoKeyRSA.cpp in Sources */, 29037 29030 E164FAA518315E1A00DB4E61 /* CryptoKeyRSAMac.cpp in Sources */, … … 29814 29807 E157A8E818184C67009F821D /* JSCryptoKeyCustom.cpp in Sources */, 29815 29808 E1F80B8D183172B5007885C3 /* JSCryptoKeyPair.cpp in Sources */, 29816 E1F80B8A183172A2007885C3 /* JSCryptoKeyPairCustom.cpp in Sources */,29817 29809 E125F85118283A5600D84CD9 /* JSCryptoKeySerializationJWK.cpp in Sources */, 29818 29810 E125F83D182411E700D84CD9 /* JSCryptoOperationData.cpp in Sources */, -
trunk/Source/WebCore/bindings/generic/IDLTypes.h
r209303 r209390 41 41 namespace WebCore { 42 42 43 class Dictionary; 44 class EventListener; 45 class XPathNSResolver; 46 47 template <typename Value> class DOMPromise; 43 template<typename> class DOMPromise; 48 44 49 45 template<typename T> 50 46 struct IDLType { 51 47 using ImplementationType = T; 48 using ParameterType = T; 52 49 53 50 using NullableType = std::optional<ImplementationType>; … … 88 85 89 86 struct IDLString : IDLType<String> { 87 using ParameterType = const String&; 88 90 89 using NullableType = String; 91 90 static String nullValue() { return String(); } … … 101 100 template<typename T> struct IDLWrapper : IDLType<RefPtr<T>> { 102 101 using RawType = T; 102 103 using ParameterType = T&; 104 103 105 using NullableType = RefPtr<T>; 104 105 106 static inline std::nullptr_t nullValue() { return nullptr; } 106 107 template<typename U> static inline bool isNullValue(U&& value) { return !value; } … … 112 113 template<typename T> struct IDLCallbackFunction : IDLWrapper<T> { }; 113 114 114 template<typename T> struct IDLDictionary : IDLType<T> { }; 115 template<typename T> struct IDLDictionary : IDLType<T> { 116 using ParameterType = const T&; 117 }; 118 115 119 template<typename T> struct IDLEnumeration : IDLType<T> { }; 116 120 … … 121 125 template<typename T> struct IDLSequence : IDLType<Vector<typename T::ImplementationType>> { 122 126 using InnerType = T; 127 128 using ParameterType = const Vector<typename T::ImplementationType>&; 123 129 }; 124 130 125 131 template<typename T> struct IDLFrozenArray : IDLType<Vector<typename T::ImplementationType>> { 126 132 using InnerType = T; 133 134 using ParameterType = const Vector<typename T::ImplementationType>&; 127 135 }; 128 136 … … 130 138 using KeyType = K; 131 139 using ValueType = V; 140 141 using ParameterType = const HashMap<typename K::ImplementationType, typename V::ImplementationType>&; 132 142 }; 133 143 … … 142 152 struct IDLUnion : IDLType<Variant<typename Ts::ImplementationType...>> { 143 153 using TypeList = brigand::list<Ts...>; 154 155 using ParameterType = const Variant<typename Ts::ImplementationType...>&; 144 156 }; 145 157 -
trunk/Source/WebCore/bindings/js/JSCustomElementRegistryCustom.cpp
r208841 r209390 172 172 173 173 if (registry.findInterface(localName)) { 174 DeferredPromise::create(globalObject, promiseDeferred)->resolve( nullptr);174 DeferredPromise::create(globalObject, promiseDeferred)->resolve(); 175 175 return promiseDeferred.promise(); 176 176 } -
trunk/Source/WebCore/bindings/js/JSDOMConvert.h
r209303 r209390 1067 1067 }; 1068 1068 1069 template<typename T> struct JSConverter<IDLDictionary<T>> { 1070 static constexpr bool needsState = true; 1071 static constexpr bool needsGlobalObject = true; 1072 1073 static JSC::JSValue convert(JSC::ExecState& state, JSDOMGlobalObject& globalObject, const T& dictionary) 1074 { 1075 return convertDictionaryToJS(state, globalObject, dictionary); 1076 } 1077 }; 1078 1069 1079 // MARK: - 1070 1080 // MARK: Enumeration type -
trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp
r206976 r209390 90 90 } 91 91 92 void DeferredPromise::reject() 93 { 94 if (isSuspended()) 95 return; 96 97 ASSERT(m_deferred); 98 ASSERT(m_globalObject); 99 auto& state = *m_globalObject->globalExec(); 100 JSC::JSLockHolder locker(&state); 101 reject(state, JSC::jsUndefined()); 102 } 103 104 void DeferredPromise::reject(std::nullptr_t) 105 { 106 if (isSuspended()) 107 return; 108 109 ASSERT(m_deferred); 110 ASSERT(m_globalObject); 111 auto& state = *m_globalObject->globalExec(); 112 JSC::JSLockHolder locker(&state); 113 reject(state, JSC::jsNull()); 114 } 115 92 116 void DeferredPromise::reject(Exception&& exception) 93 117 { … … 114 138 } 115 139 140 void DeferredPromise::reject(const JSC::PrivateName& privateName) 141 { 142 if (isSuspended()) 143 return; 144 145 ASSERT(m_deferred); 146 ASSERT(m_globalObject); 147 JSC::ExecState* state = m_globalObject->globalExec(); 148 JSC::JSLockHolder locker(state); 149 reject(*state, toJS(state, m_globalObject.get(), privateName)); 150 } 151 116 152 void rejectPromiseWithExceptionIfAny(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSPromiseDeferred& promiseDeferred) 117 153 { … … 125 161 scope.clearException(); 126 162 127 DeferredPromise::create(globalObject, promiseDeferred)->reject (error);163 DeferredPromise::create(globalObject, promiseDeferred)->reject<IDLAny>(error); 128 164 } 129 165 … … 167 203 promise->reject(SYNTAX_ERR); 168 204 else 169 promise->resolve (value);205 promise->resolve<IDLAny>(value); 170 206 } 171 207 … … 173 209 { 174 210 if (!arrayBuffer) { 175 promise->reject< JSValue>(createOutOfMemoryError(promise->globalObject()->globalExec()));211 promise->reject<IDLAny>(createOutOfMemoryError(promise->globalObject()->globalExec())); 176 212 return; 177 213 } 178 promise->resolve (arrayBuffer);214 promise->resolve<IDLInterface<ArrayBuffer>>(*arrayBuffer); 179 215 } 180 216 -
trunk/Source/WebCore/bindings/js/JSDOMPromise.h
r208985 r209390 27 27 28 28 #include "ActiveDOMCallback.h" 29 #include "JSDOM Binding.h"29 #include "JSDOMConvert.h" 30 30 #include <heap/StrongInlines.h> 31 31 #include <runtime/JSPromiseDeferred.h> … … 33 33 namespace WebCore { 34 34 35 template<typename DOMClass>36 struct TypeInspector {37 private:38 template<typename T> static constexpr auto testIsVector(int) -> decltype(std::declval<T>().shrinkToFit(), bool()) { return true; }39 template<typename T> static constexpr bool testIsVector(...) { return false; }40 41 template<typename T> static constexpr auto testIsRef(int) -> decltype(T::isRef) { return true; }42 template<typename T> static constexpr bool testIsRef(...) { return false; }43 44 template<typename T> static constexpr auto testIsRefPtr(int) -> decltype(T::isRefPtr) { return true; }45 template<typename T> static constexpr bool testIsRefPtr(...) { return false; }46 47 public:48 static constexpr bool isRefOrRefPtr = testIsRef<DOMClass>(0) || testIsRefPtr<DOMClass>(0);49 static constexpr bool isPassByValueType = std::is_pointer<DOMClass>::value50 || std::is_same<DOMClass, std::nullptr_t>::value51 || std::is_same<DOMClass, JSC::JSValue>::value52 || std::is_same<DOMClass, bool>::value;53 static constexpr bool isPassByConstRefType = testIsVector<DOMClass>(0)54 || std::is_same<DOMClass, String>::value;55 };56 57 template<typename DOMClass, typename Enable = void>58 struct PromiseResultInspector {59 public:60 static constexpr bool passByValue = false;61 static constexpr bool passByRef = true;62 static constexpr bool passByURef = false;63 static constexpr bool passByConstRef = false;64 65 typedef DOMClass& Type;66 };67 68 template<>69 struct PromiseResultInspector<void> {70 public:71 typedef int Type;72 };73 74 template<typename DOMClass>75 struct PromiseResultInspector<DOMClass, typename std::enable_if<TypeInspector<DOMClass>::isPassByValueType>::type> {76 public:77 static constexpr bool passByValue = true;78 static constexpr bool passByRef = false;79 static constexpr bool passByURef = false;80 static constexpr bool passByConstRef = false;81 82 typedef DOMClass Type;83 };84 85 template<typename DOMClass>86 struct PromiseResultInspector<DOMClass, typename std::enable_if<TypeInspector<DOMClass>::isPassByConstRefType>::type> {87 public:88 static constexpr bool passByValue = false;89 static constexpr bool passByRef = false;90 static constexpr bool passByURef = false;91 static constexpr bool passByConstRef = true;92 93 typedef const DOMClass& Type;94 };95 96 template<typename DOMClass>97 struct PromiseResultInspector<DOMClass, typename std::enable_if<TypeInspector<DOMClass>::isRefOrRefPtr>::type> {98 static constexpr bool passByValue = false;99 static constexpr bool passByRef = false;100 static constexpr bool passByURef = true;101 static constexpr bool passByConstRef = false;102 };103 104 35 class DeferredPromise : public RefCounted<DeferredPromise>, public ActiveDOMCallback { 105 36 public: … … 111 42 ~DeferredPromise(); 112 43 113 template<class ResolveResultType> typename std::enable_if<PromiseResultInspector<ResolveResultType>::passByValue, void>::type 114 resolve(ResolveResultType result) { resolveWithValue(result); } 115 template<class ResolveResultType> typename std::enable_if<PromiseResultInspector<ResolveResultType>::passByRef, void>::type 116 resolve(ResolveResultType& result) { resolveWithValue(result); } 117 template<class ResolveResultType> typename std::enable_if<PromiseResultInspector<ResolveResultType>::passByURef, void>::type 118 resolve(ResolveResultType&& result) { resolveWithValue(std::forward<ResolveResultType>(result)); } 119 template<class ResolveResultType> typename std::enable_if<PromiseResultInspector<ResolveResultType>::passByConstRef, void>::type 120 resolve(const ResolveResultType& result) { resolveWithValue(result); } 121 122 template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByValue, void>::type 123 reject(RejectResultType result) { rejectWithValue(result); } 124 template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByRef, void>::type 125 reject(RejectResultType& result) { rejectWithValue(result); } 126 template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByURef, void>::type 127 reject(RejectResultType&& result) { rejectWithValue(std::forward<RejectResultType>(result)); } 128 template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByConstRef, void>::type 129 reject(const RejectResultType& result) { rejectWithValue(result); } 130 131 template<class ResolveResultType> void resolveWithNewlyCreated(Ref<ResolveResultType>&&); 132 44 template<class IDLType> 45 void resolve(typename IDLType::ParameterType value) 46 { 47 if (isSuspended()) 48 return; 49 ASSERT(m_deferred); 50 ASSERT(m_globalObject); 51 JSC::ExecState* exec = m_globalObject->globalExec(); 52 JSC::JSLockHolder locker(exec); 53 resolve(*exec, toJS<IDLType>(*exec, *m_globalObject.get(), std::forward<typename IDLType::ParameterType>(value))); 54 } 55 56 void resolve() 57 { 58 if (isSuspended()) 59 return; 60 ASSERT(m_deferred); 61 ASSERT(m_globalObject); 62 JSC::ExecState* exec = m_globalObject->globalExec(); 63 JSC::JSLockHolder locker(exec); 64 resolve(*exec, JSC::jsUndefined()); 65 } 66 67 template<class IDLType> 68 void resolveWithNewlyCreated(typename IDLType::ParameterType value) 69 { 70 if (isSuspended()) 71 return; 72 ASSERT(m_deferred); 73 ASSERT(m_globalObject); 74 JSC::ExecState* exec = m_globalObject->globalExec(); 75 JSC::JSLockHolder locker(exec); 76 resolve(*exec, toJSNewlyCreated<IDLType>(*exec, *m_globalObject.get(), std::forward<typename IDLType::ParameterType>(value))); 77 } 78 79 template<class IDLType> 80 void reject(typename IDLType::ParameterType value) 81 { 82 if (isSuspended()) 83 return; 84 ASSERT(m_deferred); 85 ASSERT(m_globalObject); 86 JSC::ExecState* exec = m_globalObject->globalExec(); 87 JSC::JSLockHolder locker(exec); 88 reject(*exec, toJS<IDLType>(*exec, *m_globalObject.get(), std::forward<typename IDLType::ParameterType>(value))); 89 } 90 91 void reject(); 92 void reject(std::nullptr_t); 133 93 void reject(Exception&&); 134 94 void reject(ExceptionCode, const String& = { }); 95 void reject(const JSC::PrivateName&); 135 96 136 97 JSC::JSValue promise() const; … … 151 112 void reject(JSC::ExecState& state, JSC::JSValue resolution) { callFunction(state, m_deferred->reject(), resolution); } 152 113 153 template<class RejectResultType> void rejectWithValue(RejectResultType&&);154 template<class ResolveResultType> void resolveWithValue(ResolveResultType&&);155 156 114 JSC::Weak<JSC::JSPromiseDeferred> m_deferred; 157 115 JSC::Weak<JSDOMGlobalObject> m_globalObject; 158 116 }; 117 118 class DOMPromiseBase { 119 public: 120 DOMPromiseBase(Ref<DeferredPromise>&& genericPromise) 121 : m_promiseDeferred(WTFMove(genericPromise)) 122 { 123 } 124 125 DOMPromiseBase(DOMPromiseBase&& promise) 126 : m_promiseDeferred(WTFMove(promise.m_promiseDeferred)) 127 { 128 } 129 130 DOMPromiseBase(const DOMPromiseBase& other) 131 : m_promiseDeferred(other.m_promiseDeferred.copyRef()) 132 { 133 } 134 135 DOMPromiseBase& operator=(const DOMPromiseBase& other) 136 { 137 m_promiseDeferred = other.m_promiseDeferred.copyRef(); 138 return *this; 139 } 140 141 DOMPromiseBase& operator=(DOMPromiseBase&& other) 142 { 143 m_promiseDeferred = WTFMove(other.m_promiseDeferred); 144 return *this; 145 } 146 147 void reject() 148 { 149 m_promiseDeferred->reject(); 150 } 151 152 template<typename... ErrorType> 153 void reject(ErrorType&&... error) 154 { 155 m_promiseDeferred->reject(std::forward<ErrorType>(error)...); 156 } 157 158 template<typename IDLType> 159 void rejectType(typename IDLType::ParameterType value) 160 { 161 m_promiseDeferred->reject<IDLType>(std::forward<typename IDLType::ParameterType>(value)); 162 } 163 164 JSC::JSValue promise() const { return m_promiseDeferred->promise(); }; 165 166 protected: 167 Ref<DeferredPromise> m_promiseDeferred; 168 }; 169 170 template<typename IDLType> 171 class DOMPromise : public DOMPromiseBase { 172 public: 173 using DOMPromiseBase::DOMPromiseBase; 174 using DOMPromiseBase::operator=; 175 using DOMPromiseBase::promise; 176 using DOMPromiseBase::reject; 177 178 void resolve(typename IDLType::ParameterType value) 179 { 180 m_promiseDeferred->resolve<IDLType>(std::forward<typename IDLType::ParameterType>(value)); 181 } 182 }; 183 184 template<> class DOMPromise<void> : public DOMPromiseBase { 185 public: 186 using DOMPromiseBase::DOMPromiseBase; 187 using DOMPromiseBase::operator=; 188 using DOMPromiseBase::promise; 189 using DOMPromiseBase::reject; 190 191 void resolve() 192 { 193 m_promiseDeferred->resolve(); 194 } 195 }; 196 159 197 160 198 Ref<DeferredPromise> createDeferredPromise(JSC::ExecState&, JSDOMWindow&); … … 203 241 } 204 242 205 // At the moment, Value cannot be a Ref<T> or RefPtr<T>, it should be a DOM class.206 template<typename Value> class DOMPromise {207 public:208 DOMPromise(Ref<DeferredPromise>&& genericPromise) : m_promiseDeferred(WTFMove(genericPromise)) { }209 DOMPromise(DOMPromise&& promise) : m_promiseDeferred(WTFMove(promise.m_promiseDeferred)) { }210 DOMPromise(const DOMPromise& other) : m_promiseDeferred(other.m_promiseDeferred.copyRef()) { }211 212 DOMPromise& operator=(const DOMPromise& other)213 {214 m_promiseDeferred = other.copyRef();215 return *this;216 }217 218 DOMPromise& operator=(DOMPromise&& other)219 {220 m_promiseDeferred = WTFMove(other.m_promiseDeferred);221 return *this;222 }223 224 template<typename T = Value>225 typename std::enable_if<!std::is_void<T>::value, void>::type resolve(typename PromiseResultInspector<Value>::Type value) { m_promiseDeferred->resolve(value); }226 227 template<typename T = Value>228 typename std::enable_if<std::is_void<T>::value, void>::type resolve() { m_promiseDeferred->resolve(nullptr); }229 230 template<typename... ErrorType> void reject(ErrorType&&... error) { m_promiseDeferred->reject(std::forward<ErrorType>(error)...); }231 232 JSC::JSValue promise() const { return m_promiseDeferred->promise(); };233 234 private:235 Ref<DeferredPromise> m_promiseDeferred;236 };237 238 template<class ResolveResultType>239 inline void DeferredPromise::resolveWithValue(ResolveResultType&& result)240 {241 if (isSuspended())242 return;243 ASSERT(m_globalObject);244 JSC::ExecState* exec = m_globalObject->globalExec();245 JSC::JSLockHolder locker(exec);246 resolve(*exec, toJS(exec, m_globalObject.get(), std::forward<ResolveResultType>(result)));247 }248 249 template<class ResolveResultType>250 inline void DeferredPromise::resolveWithNewlyCreated(Ref<ResolveResultType>&& result)251 {252 if (isSuspended())253 return;254 ASSERT(m_deferred);255 ASSERT(m_globalObject);256 JSC::ExecState* exec = m_globalObject->globalExec();257 JSC::JSLockHolder locker(exec);258 resolve(*exec, toJSNewlyCreated(exec, m_globalObject.get(), WTFMove(result)));259 }260 261 template<class RejectResultType>262 inline void DeferredPromise::rejectWithValue(RejectResultType&& result)263 {264 if (isSuspended())265 return;266 ASSERT(m_deferred);267 ASSERT(m_globalObject);268 JSC::ExecState* exec = m_globalObject->globalExec();269 JSC::JSLockHolder locker(exec);270 reject(*exec, toJS(exec, m_globalObject.get(), std::forward<RejectResultType>(result)));271 }272 273 template<>274 inline void DeferredPromise::resolve(bool result)275 {276 if (isSuspended())277 return;278 ASSERT(m_deferred);279 ASSERT(m_globalObject);280 JSC::ExecState* exec = m_globalObject->globalExec();281 JSC::JSLockHolder locker(exec);282 resolve(*exec, JSC::jsBoolean(result));283 }284 285 template<>286 inline void DeferredPromise::resolve(JSC::JSValue value)287 {288 if (isSuspended())289 return;290 ASSERT(m_deferred);291 ASSERT(m_globalObject);292 JSC::ExecState* exec = m_globalObject->globalExec();293 JSC::JSLockHolder locker(exec);294 resolve(*exec, value);295 }296 297 template<>298 inline void DeferredPromise::reject(JSC::JSValue value)299 {300 if (isSuspended())301 return;302 ASSERT(m_deferred);303 ASSERT(m_globalObject);304 JSC::ExecState* exec = m_globalObject->globalExec();305 JSC::JSLockHolder locker(exec);306 reject(*exec, value);307 }308 309 template<>310 inline void DeferredPromise::resolve(std::nullptr_t)311 {312 if (isSuspended())313 return;314 ASSERT(m_deferred);315 ASSERT(m_globalObject);316 JSC::ExecState* exec = m_globalObject->globalExec();317 JSC::JSLockHolder locker(exec);318 resolve(*exec, JSC::jsUndefined());319 }320 321 template<>322 inline void DeferredPromise::reject(std::nullptr_t)323 {324 if (isSuspended())325 return;326 ASSERT(m_deferred);327 ASSERT(m_globalObject);328 JSC::ExecState* exec = m_globalObject->globalExec();329 JSC::JSLockHolder locker(exec);330 reject(*exec, JSC::jsNull());331 }332 333 template<>334 inline void DeferredPromise::resolve(const String& result)335 {336 if (isSuspended())337 return;338 ASSERT(m_deferred);339 ASSERT(m_globalObject);340 JSC::ExecState* exec = m_globalObject->globalExec();341 JSC::JSLockHolder locker(exec);342 resolve(*exec, jsString(exec, result));343 }344 345 template<>346 inline void DeferredPromise::reject(const String& result)347 {348 if (isSuspended())349 return;350 ASSERT(m_deferred);351 ASSERT(m_globalObject);352 JSC::ExecState* exec = m_globalObject->globalExec();353 JSC::JSLockHolder locker(exec);354 reject(*exec, jsString(exec, result));355 }356 357 243 } // namespace WebCore -
trunk/Source/WebCore/bindings/js/JSMediaDevicesCustom.cpp
r208985 r209390 32 32 #include "Dictionary.h" 33 33 #include "ExceptionCode.h" 34 #include "JSDOMPromise.h" 34 35 #include "JSMediaDevices.h" 35 36 #include "Logging.h" -
trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp
r209200 r209390 478 478 479 479 if (UNLIKELY(state.argumentCount() < 3)) { 480 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));480 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 481 481 return; 482 482 } … … 523 523 524 524 if (UNLIKELY(state.argumentCount() < 3)) { 525 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));525 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 526 526 return; 527 527 } … … 568 568 569 569 if (UNLIKELY(state.argumentCount() < 3)) { 570 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));570 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 571 571 return; 572 572 } … … 613 613 614 614 if (UNLIKELY(state.argumentCount() < 4)) { 615 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));615 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 616 616 return; 617 617 } … … 643 643 644 644 auto callback = [capturedPromise = promise.copyRef()](bool result) mutable { 645 capturedPromise->resolve (result);645 capturedPromise->resolve<IDLBoolean>(result); 646 646 return; 647 647 }; … … 661 661 662 662 if (UNLIKELY(state.argumentCount() < 2)) { 663 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));663 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 664 664 return; 665 665 } … … 693 693 694 694 if (UNLIKELY(state.argumentCount() < 5)) { 695 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));695 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 696 696 return; 697 697 } … … 710 710 711 711 if (UNLIKELY(state.argumentCount() < 3)) { 712 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));712 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 713 713 return; 714 714 } … … 727 727 728 728 if (UNLIKELY(state.argumentCount() < 3)) { 729 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));729 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 730 730 return; 731 731 } … … 743 743 RETURN_IF_EXCEPTION(scope, void()); 744 744 745 auto callback = [capturedPromise = promise.copyRef()](CryptoKey* key, CryptoKeyPair* keyPair) mutable { 746 ASSERT(key || keyPair); 747 ASSERT(!key || !keyPair); 748 if (key) { 749 if ((key->type() == CryptoKeyType::Private || key->type() == CryptoKeyType::Secret) && !key->usagesBitmap()) { 750 rejectWithException(WTFMove(capturedPromise), SYNTAX_ERR); 751 return; 752 } 753 capturedPromise->resolve(key); 754 } else { 755 if (!keyPair->privateKey()->usagesBitmap()) { 756 rejectWithException(WTFMove(capturedPromise), SYNTAX_ERR); 757 return; 758 } 759 capturedPromise->resolve(keyPair); 760 } 745 auto callback = [capturedPromise = promise.copyRef()](KeyOrKeyPair&& keyOrKeyPair) mutable { 746 WTF::switchOn(keyOrKeyPair, 747 [&capturedPromise] (RefPtr<CryptoKey>& key) { 748 if ((key->type() == CryptoKeyType::Private || key->type() == CryptoKeyType::Secret) && !key->usagesBitmap()) { 749 rejectWithException(WTFMove(capturedPromise), SYNTAX_ERR); 750 return; 751 } 752 capturedPromise->resolve<IDLInterface<CryptoKey>>(*key); 753 }, 754 [&capturedPromise] (CryptoKeyPair& keyPair) { 755 if (!keyPair.privateKey->usagesBitmap()) { 756 rejectWithException(WTFMove(capturedPromise), SYNTAX_ERR); 757 return; 758 } 759 capturedPromise->resolve<IDLDictionary<CryptoKeyPair>>(keyPair); 760 } 761 ); 761 762 }; 762 763 auto exceptionCallback = [capturedPromise = WTFMove(promise)](ExceptionCode ec) mutable { … … 776 777 777 778 if (UNLIKELY(state.argumentCount() < 5)) { 778 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));779 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 779 780 return; 780 781 } … … 803 804 return; 804 805 } 805 capturedPromise->resolve (key);806 capturedPromise->resolve<IDLInterface<CryptoKey>>(key); 806 807 }; 807 808 auto exceptionCallback = [capturedPromise = WTFMove(promise)](ExceptionCode ec) mutable { … … 821 822 822 823 if (UNLIKELY(state.argumentCount() < 2)) { 823 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));824 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 824 825 return; 825 826 } … … 852 853 } 853 854 case SubtleCrypto::KeyFormat::Jwk: 854 capturedPromise->resolve (toJSValueFromJsonWebKey(*(capturedPromise->globalObject()), WTFMove(WTF::get<JsonWebKey>(key))));855 capturedPromise->resolve<IDLAny>(toJSValueFromJsonWebKey(*(capturedPromise->globalObject()), WTFMove(WTF::get<JsonWebKey>(key)))); 855 856 return; 856 857 } … … 873 874 874 875 if (UNLIKELY(state.argumentCount() < 4)) { 875 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));876 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 876 877 return; 877 878 } … … 974 975 975 976 if (UNLIKELY(state.argumentCount() < 7)) { 976 promise->reject< JSValue>(createNotEnoughArgumentsError(&state));977 promise->reject<IDLAny>(createNotEnoughArgumentsError(&state)); 977 978 return; 978 979 } … … 1052 1053 return; 1053 1054 } 1054 promise->resolve (key);1055 promise->resolve<IDLInterface<CryptoKey>>(key); 1055 1056 }; 1056 1057 auto exceptionCallback = [promise = WTFMove(promise)](ExceptionCode ec) mutable { -
trunk/Source/WebCore/bindings/js/JSWebKitSubtleCryptoCustom.cpp
r208985 r209390 179 179 }; 180 180 auto failureCallback = [wrapper]() mutable { 181 wrapper->reject( nullptr);181 wrapper->reject(); // FIXME: This should reject with an Exception. 182 182 }; 183 183 … … 231 231 }; 232 232 auto failureCallback = [wrapper]() mutable { 233 wrapper->reject( nullptr);233 wrapper->reject(); // FIXME: This should reject with an Exception. 234 234 }; 235 235 … … 283 283 }; 284 284 auto failureCallback = [wrapper]() mutable { 285 wrapper->reject( nullptr);285 wrapper->reject(); // FIXME: This should reject with an Exception. 286 286 }; 287 287 … … 338 338 auto promise = wrapper->promise(); 339 339 auto successCallback = [wrapper](bool result) mutable { 340 wrapper->resolve (result);340 wrapper->resolve<IDLBoolean>(result); 341 341 }; 342 342 auto failureCallback = [wrapper]() mutable { 343 wrapper->reject( nullptr);343 wrapper->reject(); // FIXME: This should reject with an Exception. 344 344 }; 345 345 … … 383 383 }; 384 384 auto failureCallback = [wrapper]() mutable { 385 wrapper->reject( nullptr);385 wrapper->reject(); // FIXME: This should reject with an Exception. 386 386 }; 387 387 … … 429 429 RefPtr<DeferredPromise> wrapper = createDeferredPromise(state, domWindow()); 430 430 auto promise = wrapper->promise(); 431 auto successCallback = [wrapper](CryptoKey* key, CryptoKeyPair* keyPair) mutable { 432 ASSERT(key || keyPair); 433 ASSERT(!key || !keyPair); 434 if (key) 435 wrapper->resolve(key); 436 else 437 wrapper->resolve(keyPair); 431 auto successCallback = [wrapper](KeyOrKeyPair&& keyOrKeyPair) mutable { 432 WTF::switchOn(keyOrKeyPair, 433 [&wrapper] (RefPtr<CryptoKey>& key) { 434 wrapper->resolve<IDLInterface<CryptoKey>>(*key); 435 }, 436 [&wrapper] (CryptoKeyPair& keyPair) { 437 wrapper->resolve<IDLDictionary<CryptoKeyPair>>(keyPair); 438 } 439 ); 438 440 }; 439 441 auto failureCallback = [wrapper]() mutable { 440 wrapper->reject( nullptr);442 wrapper->reject(); // FIXME: This should reject with an Exception. 441 443 }; 442 444 … … 556 558 auto promise = wrapper->promise(); 557 559 auto successCallback = [wrapper](CryptoKey& result) mutable { 558 wrapper->resolve (result);560 wrapper->resolve<IDLInterface<CryptoKey>>(result); 559 561 }; 560 562 auto failureCallback = [wrapper]() mutable { 561 wrapper->reject( nullptr);563 wrapper->reject(); // FIXME: This should reject with an Exception. 562 564 }; 563 565 … … 626 628 }; 627 629 auto failureCallback = [wrapper]() mutable { 628 wrapper->reject( nullptr);630 wrapper->reject(); // FIXME: This should reject with an Exception. 629 631 }; 630 632 … … 681 683 }; 682 684 auto encryptFailureCallback = [wrapper]() mutable { 683 wrapper->reject(nullptr);685 wrapper->reject(); // FIXME: This should reject with an Exception. 684 686 }; 685 687 auto result = algorithm->encryptForWrapKey(*parameters, *wrappingKey, std::make_pair(exportedKeyData.data(), exportedKeyData.size()), WTFMove(encryptSuccessCallback), WTFMove(encryptFailureCallback)); 686 688 if (result.hasException()) { 687 689 // FIXME: Report failure details to console, and possibly to calling script once there is a standardized way to pass errors to WebCrypto promise reject functions. 688 wrapper->reject( nullptr);690 wrapper->reject(); // FIXME: This should reject with an Exception. 689 691 } 690 692 }; 691 693 692 694 auto exportFailureCallback = [wrapper]() mutable { 693 wrapper->reject( nullptr);695 wrapper->reject(); // FIXME: This should reject with an Exception. 694 696 }; 695 697 … … 772 774 auto decryptSuccessCallback = [domGlobalObject, keyFormat, unwrappedKeyAlgorithm, unwrappedKeyAlgorithmParameters, extractable, keyUsages, wrapper](const Vector<uint8_t>& result) mutable { 773 775 auto importSuccessCallback = [wrapper](CryptoKey& key) mutable { 774 wrapper->resolve (key);776 wrapper->resolve<IDLInterface<CryptoKey>>(key); 775 777 }; 776 778 auto importFailureCallback = [wrapper]() mutable { 777 wrapper->reject( nullptr);779 wrapper->reject(); // FIXME: This should reject with an Exception. 778 780 }; 779 781 … … 786 788 // FIXME: Report exception details to console, and possibly to calling script once there is a standardized way to pass errors to WebCrypto promise reject functions. 787 789 scope.clearException(); 788 wrapper->reject( nullptr);790 wrapper->reject(); // FIXME: This should reject with an Exception. 789 791 } 790 792 }; 791 793 792 794 auto decryptFailureCallback = [wrapper]() mutable { 793 wrapper->reject( nullptr);795 wrapper->reject(); // FIXME: This should reject with an Exception. 794 796 }; 795 797 -
trunk/Source/WebCore/bindings/js/ScriptModuleLoader.cpp
r208788 r209390 73 73 // value is a Symbol, it is used directly as a module key. 74 74 if (moduleNameValue.isSymbol()) { 75 promise->resolve (asSymbol(moduleNameValue)->privateName());75 promise->resolve<IDLAny>(toJS(exec, &globalObject, asSymbol(moduleNameValue)->privateName())); 76 76 return jsPromise.promise(); 77 77 } … … 89 89 URL absoluteURL(URL(), specifier); 90 90 if (absoluteURL.isValid()) { 91 promise->resolve (absoluteURL.string());91 promise->resolve<IDLDOMString>(absoluteURL.string()); 92 92 return jsPromise.promise(); 93 93 } … … 130 130 } 131 131 132 promise->resolve (completedURL.string());132 promise->resolve<IDLDOMString>(completedURL.string()); 133 133 return jsPromise.promise(); 134 134 } … … 248 248 m_requestURLToResponseURLMap.add(cachedScript.url(), cachedScript.response().url()); 249 249 // FIXME: Let's wrap around ScriptSourceCode to propagate it directly through the module pipeline. 250 promise->resolve (ScriptSourceCode(&cachedScript, JSC::SourceProviderSourceType::Module).source().toString());251 } 252 253 } 250 promise->resolve<IDLDOMString>(ScriptSourceCode(&cachedScript, JSC::SourceProviderSourceType::Module).source().toString()); 251 } 252 253 } -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
r209303 r209390 1205 1205 my $result = ""; 1206 1206 $result .= "#if ${conditionalString}\n\n" if $conditionalString; 1207 $result .= "template<> $className convertDictionary<$className>(JSC::ExecState&, JSC::JSValue);\n\n"; 1207 $result .= "template<> ${className} convertDictionary<$className>(JSC::ExecState&, JSC::JSValue);\n\n"; 1208 1209 if ($dictionary->extendedAttributes->{JSGenerateToJSObject}) { 1210 $result .= "JSC::JSObject* convertDictionaryToJS(JSC::ExecState&, JSDOMGlobalObject&, const ${className}&);\n\n"; 1211 } 1212 1208 1213 $result .= "#endif\n\n" if $conditionalString; 1209 1214 return $result; … … 1248 1253 $result .= " bool isNullOrUndefined = value.isUndefinedOrNull();\n"; 1249 1254 $result .= " auto* object = isNullOrUndefined ? nullptr : value.getObject();\n"; 1255 1250 1256 # 1. If Type(V) is not Undefined, Null or Object, then throw a TypeError. 1251 1257 $result .= " if (UNLIKELY(!isNullOrUndefined && !object)) {\n"; … … 1321 1327 $result .= " return result;\n"; 1322 1328 $result .= "}\n\n"; 1329 1330 if ($dictionary->extendedAttributes->{JSGenerateToJSObject}) { 1331 $result .= "JSC::JSObject* convertDictionaryToJS(JSC::ExecState& state, JSDOMGlobalObject& globalObject, const ${className}& dictionary)\n"; 1332 $result .= "{\n"; 1333 $result .= " auto& vm = state.vm();\n\n"; 1334 1335 # 1. Let O be ! ObjectCreate(%ObjectPrototype%). 1336 $result .= " auto result = constructEmptyObject(&state);\n\n"; 1337 1338 # 2. Let dictionaries be a list consisting of D and all of D’s inherited dictionaries, 1339 # in order from least to most derived. 1340 # NOTE: This was done above. 1341 1342 # 3. For each dictionary dictionary in dictionaries, in order: 1343 foreach my $dictionary (@dictionaries) { 1344 # 3.1. For each dictionary member member declared on dictionary, in lexicographical order: 1345 my @sortedMembers = sort { $a->name cmp $b->name } @{$dictionary->members}; 1346 foreach my $member (@sortedMembers) { 1347 my $key = $member->name; 1348 my $IDLType = GetIDLType($interface, $member->type); 1349 1350 # 1. Let key be the identifier of member. 1351 # 2. If the dictionary member named key is present in V, then: 1352 # 1. Let idlValue be the value of member on V. 1353 # 2. Let value be the result of converting idlValue to an ECMAScript value. 1354 # 3. Perform ! CreateDataProperty(O, key, value). 1355 if (!$member->isRequired && not defined $member->default) { 1356 $result .= " if (dictionary.${key}) {\n"; 1357 $result .= " auto ${key}Value = toJS<$IDLType>(state, globalObject, dictionary.${key});\n"; 1358 $result .= " result->putDirect(vm, JSC::Identifier::fromString(&vm, \"${key}\"), ${key}Value);\n"; 1359 $result .= " }\n"; 1360 } else { 1361 $result .= " auto ${key}Value = toJS<$IDLType>(state, globalObject, dictionary.${key});\n"; 1362 $result .= " result->putDirect(vm, JSC::Identifier::fromString(&vm, \"${key}\"), ${key}Value);\n"; 1363 } 1364 } 1365 } 1366 1367 $result .= " return result;\n"; 1368 $result .= "}\n\n"; 1369 } 1370 1323 1371 $result .= "#endif\n\n" if $conditionalString; 1324 1372 -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
r209303 r209390 680 680 } else 681 681 result.unsignedLargeIntegerWithDefault = 0; 682 return result; 683 } 684 685 template<> JSC::JSObject* convertDictionaryToJS(JSC::ExecState& state, JSDOMGlobalObject&, const TestObj::Dictionary& dictionary) 686 { 687 auto& vm = state.vm(); 688 689 auto result = constructEmptyObject(&state) 690 691 auto anyTypedefValueValue = toJS<IDLAny>(state, globalObject, dictionary.anyTypedefValue); 692 result->putDirect(vm, JSC::Identifier::fromString(&vm, "anyTypedefValue"), anyTypedefValueValue); 693 auto anyValueValue = toJS<IDLAny>(state, globalObject, dictionary.anyValue); 694 result->putDirect(vm, JSC::Identifier::fromString(&vm, "anyValue"), anyValueValue); 695 auto anyValueWithNullDefaultValue = toJS<IDLAny>(state, globalObject, dictionary.anyValueWithNullDefault); 696 result->putDirect(vm, JSC::Identifier::fromString(&vm, "anyValueWithNullDefault"), anyValueWithNullDefaultValue); 697 auto booleanWithDefaultValue = toJS<IDLBoolean>(state, globalObject, dictionary.booleanWithDefault); 698 result->putDirect(vm, JSC::Identifier::fromString(&vm, "booleanWithDefault"), booleanWithDefaultValue); 699 if (dictionary.booleanWithoutDefault) { 700 auto booleanWithoutDefaultValue = toJS<IDLBoolean>(state, globalObject, dictionary.booleanWithoutDefault); 701 result->putDirect(vm, JSC::Identifier::fromString(&vm, "booleanWithoutDefault"), booleanWithoutDefaultValue); 702 } 703 if (dictionary.bufferSourceValue) { 704 auto bufferSourceValueValue = toJS<IDLBufferSource>(state, globalObject, dictionary.bufferSourceValue); 705 result->putDirect(vm, JSC::Identifier::fromString(&vm, "bufferSourceValue"), bufferSourceValueValue); 706 } 707 if (dictionary.dictionaryMember) { 708 auto dictionaryMemberValue = toJS<IDLDictionary<TestObj::DictionaryThatShouldTolerateNull>>(state, globalObject, dictionary.dictionaryMember); 709 result->putDirect(vm, JSC::Identifier::fromString(&vm, "dictionaryMember"), dictionaryMemberValue); 710 } 711 auto enumerationValueWithDefaultValue = toJS<IDLEnumeration<TestObj::EnumType>>(state, globalObject, dictionary.enumerationValueWithDefault); 712 result->putDirect(vm, JSC::Identifier::fromString(&vm, "enumerationValueWithDefault"), enumerationValueWithDefaultValue); 713 auto enumerationValueWithEmptyStringDefaultValue = toJS<IDLEnumeration<TestObj::EnumType>>(state, globalObject, dictionary.enumerationValueWithEmptyStringDefault); 714 result->putDirect(vm, JSC::Identifier::fromString(&vm, "enumerationValueWithEmptyStringDefault"), enumerationValueWithEmptyStringDefaultValue); 715 if (dictionary.enumerationValueWithoutDefault) { 716 auto enumerationValueWithoutDefaultValue = toJS<IDLEnumeration<TestObj::EnumType>>(state, globalObject, dictionary.enumerationValueWithoutDefault); 717 result->putDirect(vm, JSC::Identifier::fromString(&vm, "enumerationValueWithoutDefault"), enumerationValueWithoutDefaultValue); 718 } 719 if (dictionary.integer) { 720 auto integerValue = toJS<IDLLong>(state, globalObject, dictionary.integer); 721 result->putDirect(vm, JSC::Identifier::fromString(&vm, "integer"), integerValue); 722 } 723 auto integerWithDefaultValue = toJS<IDLLong>(state, globalObject, dictionary.integerWithDefault); 724 result->putDirect(vm, JSC::Identifier::fromString(&vm, "integerWithDefault"), integerWithDefaultValue); 725 if (dictionary.largeInteger) { 726 auto largeIntegerValue = toJS<IDLLongLong>(state, globalObject, dictionary.largeInteger); 727 result->putDirect(vm, JSC::Identifier::fromString(&vm, "largeInteger"), largeIntegerValue); 728 } 729 auto largeIntegerWithDefaultValue = toJS<IDLLongLong>(state, globalObject, dictionary.largeIntegerWithDefault); 730 result->putDirect(vm, JSC::Identifier::fromString(&vm, "largeIntegerWithDefault"), largeIntegerWithDefaultValue); 731 auto nullableIntegerWithDefaultValue = toJS<IDLNullable<IDLLong>>(state, globalObject, dictionary.nullableIntegerWithDefault); 732 result->putDirect(vm, JSC::Identifier::fromString(&vm, "nullableIntegerWithDefault"), nullableIntegerWithDefaultValue); 733 auto nullableNodeValue = toJS<IDLNullable<IDLInterface<Node>>>(state, globalObject, dictionary.nullableNode); 734 result->putDirect(vm, JSC::Identifier::fromString(&vm, "nullableNode"), nullableNodeValue); 735 auto nullableStringWithDefaultValue = toJS<IDLNullable<IDLDOMString>>(state, globalObject, dictionary.nullableStringWithDefault); 736 result->putDirect(vm, JSC::Identifier::fromString(&vm, "nullableStringWithDefault"), nullableStringWithDefaultValue); 737 auto nullableUnionMemberValue = toJS<IDLNullable<IDLUnion<IDLLong, IDLInterface<Node>>>>(state, globalObject, dictionary.nullableUnionMember); 738 result->putDirect(vm, JSC::Identifier::fromString(&vm, "nullableUnionMember"), nullableUnionMemberValue); 739 if (dictionary.restrictedDouble) { 740 auto restrictedDoubleValue = toJS<IDLDouble>(state, globalObject, dictionary.restrictedDouble); 741 result->putDirect(vm, JSC::Identifier::fromString(&vm, "restrictedDouble"), restrictedDoubleValue); 742 } 743 auto restrictedDoubleWithDefaultValue = toJS<IDLDouble>(state, globalObject, dictionary.restrictedDoubleWithDefault); 744 result->putDirect(vm, JSC::Identifier::fromString(&vm, "restrictedDoubleWithDefault"), restrictedDoubleWithDefaultValue); 745 if (dictionary.restrictedFloat) { 746 auto restrictedFloatValue = toJS<IDLFloat>(state, globalObject, dictionary.restrictedFloat); 747 result->putDirect(vm, JSC::Identifier::fromString(&vm, "restrictedFloat"), restrictedFloatValue); 748 } 749 auto restrictedFloatWithDefaultValue = toJS<IDLFloat>(state, globalObject, dictionary.restrictedFloatWithDefault); 750 result->putDirect(vm, JSC::Identifier::fromString(&vm, "restrictedFloatWithDefault"), restrictedFloatWithDefaultValue); 751 if (dictionary.sequenceOfStrings) { 752 auto sequenceOfStringsValue = toJS<IDLSequence<IDLDOMString>>(state, globalObject, dictionary.sequenceOfStrings); 753 result->putDirect(vm, JSC::Identifier::fromString(&vm, "sequenceOfStrings"), sequenceOfStringsValue); 754 } 755 if (dictionary.smallIntegerClamped) { 756 auto smallIntegerClampedValue = toJS<IDLByte>(state, globalObject, dictionary.smallIntegerClamped); 757 result->putDirect(vm, JSC::Identifier::fromString(&vm, "smallIntegerClamped"), smallIntegerClampedValue); 758 } 759 if (dictionary.smallIntegerWithDefault) { 760 auto smallIntegerWithDefaultValue = toJS<IDLByte>(state, globalObject, dictionary.smallIntegerWithDefault); 761 result->putDirect(vm, JSC::Identifier::fromString(&vm, "smallIntegerWithDefault"), smallIntegerWithDefaultValue); 762 } 763 if (dictionary.smallUnsignedIntegerEnforcedRange) { 764 auto smallUnsignedIntegerEnforcedRangeValue = toJS<IDLOctet>(state, globalObject, dictionary.smallUnsignedIntegerEnforcedRange); 765 result->putDirect(vm, JSC::Identifier::fromString(&vm, "smallUnsignedIntegerEnforcedRange"), smallUnsignedIntegerEnforcedRangeValue); 766 } 767 auto smallUnsignedIntegerWithDefaultValue = toJS<IDLOctet>(state, globalObject, dictionary.smallUnsignedIntegerWithDefault); 768 result->putDirect(vm, JSC::Identifier::fromString(&vm, "smallUnsignedIntegerWithDefault"), smallUnsignedIntegerWithDefaultValue); 769 auto stringWithDefaultValue = toJS<IDLDOMString>(state, globalObject, dictionary.stringWithDefault); 770 result->putDirect(vm, JSC::Identifier::fromString(&vm, "stringWithDefault"), stringWithDefaultValue); 771 if (dictionary.stringWithoutDefault) { 772 auto stringWithoutDefaultValue = toJS<IDLDOMString>(state, globalObject, dictionary.stringWithoutDefault); 773 result->putDirect(vm, JSC::Identifier::fromString(&vm, "stringWithoutDefault"), stringWithoutDefaultValue); 774 } 775 if (dictionary.unionMember) { 776 auto unionMemberValue = toJS<IDLUnion<IDLLong, IDLInterface<Node>>>(state, globalObject, dictionary.unionMember); 777 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unionMember"), unionMemberValue); 778 } 779 if (dictionary.unrestrictedDouble) { 780 auto unrestrictedDoubleValue = toJS<IDLUnrestrictedDouble>(state, globalObject, dictionary.unrestrictedDouble); 781 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unrestrictedDouble"), unrestrictedDoubleValue); 782 } 783 auto unrestrictedDoubleWithDefaultValue = toJS<IDLUnrestrictedDouble>(state, globalObject, dictionary.unrestrictedDoubleWithDefault); 784 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unrestrictedDoubleWithDefault"), unrestrictedDoubleWithDefaultValue); 785 if (dictionary.unrestrictedFloat) { 786 auto unrestrictedFloatValue = toJS<IDLUnrestrictedFloat>(state, globalObject, dictionary.unrestrictedFloat); 787 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unrestrictedFloat"), unrestrictedFloatValue); 788 } 789 auto unrestrictedFloatWithDefaultValue = toJS<IDLUnrestrictedFloat>(state, globalObject, dictionary.unrestrictedFloatWithDefault); 790 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unrestrictedFloatWithDefault"), unrestrictedFloatWithDefaultValue); 791 if (dictionary.unsignedInteger) { 792 auto unsignedIntegerValue = toJS<IDLUnsignedLong>(state, globalObject, dictionary.unsignedInteger); 793 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unsignedInteger"), unsignedIntegerValue); 794 } 795 auto unsignedIntegerWithDefaultValue = toJS<IDLUnsignedLong>(state, globalObject, dictionary.unsignedIntegerWithDefault); 796 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unsignedIntegerWithDefault"), unsignedIntegerWithDefaultValue); 797 if (dictionary.unsignedLargeInteger) { 798 auto unsignedLargeIntegerValue = toJS<IDLUnsignedLongLong>(state, globalObject, dictionary.unsignedLargeInteger); 799 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unsignedLargeInteger"), unsignedLargeIntegerValue); 800 } 801 auto unsignedLargeIntegerWithDefaultValue = toJS<IDLUnsignedLongLong>(state, globalObject, dictionary.unsignedLargeIntegerWithDefault); 802 result->putDirect(vm, JSC::Identifier::fromString(&vm, "unsignedLargeIntegerWithDefault"), unsignedLargeIntegerWithDefaultValue); 682 803 return result; 683 804 } -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h
r208985 r209390 170 170 template<> TestObj::Dictionary convertDictionary<TestObj::Dictionary>(JSC::ExecState&, JSC::JSValue); 171 171 172 template<> JSC::JSObject* convertDictionaryToJS(JSC::ExecState&, JSDOMGlobalObject&, const TestObj::Dictionary&); 173 172 174 template<> TestObj::DictionaryThatShouldNotTolerateNull convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>(JSC::ExecState&, JSC::JSValue); 173 175 -
trunk/Source/WebCore/bindings/scripts/test/TestObj.idl
r209303 r209390 434 434 typedef any AnyTypedef; 435 435 436 dictionary TestDictionary { 436 [ 437 JSGenerateToJSObject 438 ]dictionary TestDictionary { 437 439 TestEnumType enumerationValueWithoutDefault; 438 440 TestEnumType enumerationValueWithDefault = "enumValue1"; -
trunk/Source/WebCore/crypto/CryptoAlgorithm.h
r209200 r209390 27 27 28 28 #include "CryptoAlgorithmIdentifier.h" 29 #include "CryptoKeyPair.h" 29 30 #include "CryptoKeyUsage.h" 30 31 #include "ExceptionOr.h" … … 42 43 class CryptoAlgorithmParametersDeprecated; 43 44 class CryptoKey; 44 class CryptoKeyPair;45 45 class CryptoKeyData; 46 46 class ScriptExecutionContext; … … 50 50 51 51 using KeyData = Variant<Vector<uint8_t>, JsonWebKey>; 52 using KeyOrKeyPair = Variant<RefPtr<CryptoKey>, CryptoKeyPair>; 52 53 53 54 class CryptoAlgorithm : public RefCounted<CryptoAlgorithm> { … … 59 60 using BoolCallback = WTF::Function<void(bool)>; 60 61 using KeyCallback = WTF::Function<void(CryptoKey&)>; 61 using KeyOrKeyPairCallback = WTF::Function<void( CryptoKey*, CryptoKeyPair*)>;62 using KeyOrKeyPairCallback = WTF::Function<void(KeyOrKeyPair&&)>; 62 63 using VectorCallback = WTF::Function<void(const Vector<uint8_t>&)>; 63 64 using VoidCallback = WTF::Function<void()>; -
trunk/Source/WebCore/crypto/CryptoKeyPair.h
r208646 r209390 26 26 #pragma once 27 27 28 #include "CryptoKey.h"29 28 #include <wtf/RefCounted.h> 30 29 #include <wtf/RefPtr.h> … … 34 33 namespace WebCore { 35 34 36 class CryptoKeyPair : public RefCounted<CryptoKeyPair> { 37 public: 38 static Ref<CryptoKeyPair> create(RefPtr<CryptoKey>&& publicKey, RefPtr<CryptoKey>&& privateKey) 39 { 40 return adoptRef(*new CryptoKeyPair(WTFMove(publicKey), WTFMove(privateKey))); 41 } 42 ~CryptoKeyPair(); 35 class CryptoKey; 43 36 44 CryptoKey* publicKey() { return m_publicKey.get(); } 45 CryptoKey* privateKey() { return m_privateKey.get(); } 46 47 private: 48 CryptoKeyPair(RefPtr<CryptoKey>&& publicKey, RefPtr<CryptoKey>&& privateKey); 49 50 RefPtr<CryptoKey> m_publicKey; 51 RefPtr<CryptoKey> m_privateKey; 37 struct CryptoKeyPair { 38 RefPtr<CryptoKey> publicKey; 39 RefPtr<CryptoKey> privateKey; 52 40 }; 53 41 -
trunk/Source/WebCore/crypto/CryptoKeyPair.idl
r207809 r209390 1 1 /* 2 * Copyright (C) 2013 Apple Inc. All rights reserved.2 * Copyright (C) 2013-2016 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 // FIXME: The spec suggests that CryptoKeyPair should be of type Dictionary27 // as of 11 December 2014: https://www.w3.org/TR/WebCryptoAPI/#keypair28 // Since we don't support convert a Dictionary type object from its native29 // type to JSValue yet, we use a NoInterfaceObject hack for now. See:30 // https://bugs.webkit.org/show_bug.cgi?id=16371131 26 [ 32 27 Conditional=SUBTLE_CRYPTO, 33 ImplementationLacksVTable, 34 JSCustomMarkFunction, 35 NoInterfaceObject 36 ] interface CryptoKeyPair { 37 readonly attribute CryptoKey publicKey; 38 readonly attribute CryptoKey privateKey; 28 JSGenerateToJSObject 29 ] dictionary CryptoKeyPair { 30 CryptoKey publicKey; 31 CryptoKey privateKey; 39 32 }; -
trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp
r209077 r209390 104 104 } 105 105 106 callback( result.get(), nullptr);106 callback(WTFMove(result)); 107 107 } 108 108 … … 213 213 } 214 214 215 callback( result.get(), nullptr);215 callback(WTFMove(result)); 216 216 return { }; 217 217 } -
trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp
r209200 r209390 77 77 } 78 78 79 callback( result.get(), nullptr);79 callback(WTFMove(result)); 80 80 } 81 81 … … 194 194 return { }; 195 195 } 196 callback(result.get(), nullptr); 196 197 callback(WTFMove(result)); 197 198 return { }; 198 199 } -
trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp
r209150 r209390 100 100 } 101 101 102 callback( result.get(), nullptr);102 callback(WTFMove(result)); 103 103 } 104 104 … … 221 221 return { }; 222 222 } 223 callback( result.get(), nullptr);223 callback(WTFMove(result)); 224 224 return { }; 225 225 } -
trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp
r209077 r209390 87 87 } 88 88 89 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair& pair) {90 pair.publicKey ()->setUsagesBitmap(pair.publicKey()->usagesBitmap() & CryptoKeyUsageEncrypt);91 pair.privateKey ()->setUsagesBitmap(pair.privateKey()->usagesBitmap() & CryptoKeyUsageDecrypt);92 capturedCallback( nullptr, &pair);89 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair&& pair) { 90 pair.publicKey->setUsagesBitmap(pair.publicKey->usagesBitmap() & CryptoKeyUsageEncrypt); 91 pair.privateKey->setUsagesBitmap(pair.privateKey->usagesBitmap() & CryptoKeyUsageDecrypt); 92 capturedCallback(WTFMove(pair)); 93 93 }; 94 94 auto failureCallback = [capturedCallback = WTFMove(exceptionCallback)]() { … … 175 175 { 176 176 auto& rsaParameters = downcast<CryptoAlgorithmRsaKeyGenParamsDeprecated>(parameters); 177 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair& pair) {178 capturedCallback( nullptr, &pair);177 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair&& pair) { 178 capturedCallback(WTFMove(pair)); 179 179 }; 180 180 CryptoKeyRSA::generatePair(CryptoAlgorithmIdentifier::RSAES_PKCS1_v1_5, rsaParameters.hash, rsaParameters.hasHash, rsaParameters.modulusLength, rsaParameters.publicExponent, extractable, usages, WTFMove(keyPairCallback), WTFMove(failureCallback), &context); -
trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp
r209150 r209390 96 96 } 97 97 98 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair& pair) {99 pair.publicKey ()->setUsagesBitmap(pair.publicKey()->usagesBitmap() & CryptoKeyUsageVerify);100 pair.privateKey ()->setUsagesBitmap(pair.privateKey()->usagesBitmap() & CryptoKeyUsageSign);101 capturedCallback( nullptr, &pair);98 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair&& pair) { 99 pair.publicKey->setUsagesBitmap(pair.publicKey->usagesBitmap() & CryptoKeyUsageVerify); 100 pair.privateKey->setUsagesBitmap(pair.privateKey->usagesBitmap() & CryptoKeyUsageSign); 101 capturedCallback(WTFMove(pair)); 102 102 }; 103 103 auto failureCallback = [capturedCallback = WTFMove(exceptionCallback)]() { … … 228 228 { 229 229 auto& rsaParameters = downcast<CryptoAlgorithmRsaKeyGenParamsDeprecated>(parameters); 230 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair& pair) {231 capturedCallback( nullptr, &pair);230 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair&& pair) { 231 capturedCallback(WTFMove(pair)); 232 232 }; 233 233 CryptoKeyRSA::generatePair(CryptoAlgorithmIdentifier::RSASSA_PKCS1_v1_5, rsaParameters.hash, rsaParameters.hasHash, rsaParameters.modulusLength, rsaParameters.publicExponent, extractable, usages, WTFMove(keyPairCallback), WTFMove(failureCallback), &context); -
trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp
r209077 r209390 98 98 } 99 99 100 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair& pair) {101 pair.publicKey ()->setUsagesBitmap(pair.publicKey()->usagesBitmap() & (CryptoKeyUsageEncrypt | CryptoKeyUsageWrapKey));102 pair.privateKey ()->setUsagesBitmap(pair.privateKey()->usagesBitmap() & (CryptoKeyUsageDecrypt | CryptoKeyUsageUnwrapKey));103 capturedCallback( nullptr, &pair);100 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair&& pair) { 101 pair.publicKey->setUsagesBitmap(pair.publicKey->usagesBitmap() & (CryptoKeyUsageEncrypt | CryptoKeyUsageWrapKey)); 102 pair.privateKey->setUsagesBitmap(pair.privateKey->usagesBitmap() & (CryptoKeyUsageDecrypt | CryptoKeyUsageUnwrapKey)); 103 capturedCallback(WTFMove(pair)); 104 104 }; 105 105 auto failureCallback = [capturedCallback = WTFMove(exceptionCallback)]() { … … 241 241 { 242 242 auto& rsaParameters = downcast<CryptoAlgorithmRsaKeyGenParamsDeprecated>(parameters); 243 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair& pair) {244 capturedCallback( nullptr, &pair);243 auto keyPairCallback = [capturedCallback = WTFMove(callback)](CryptoKeyPair&& pair) { 244 capturedCallback(WTFMove(pair)); 245 245 }; 246 246 CryptoKeyRSA::generatePair(CryptoAlgorithmIdentifier::RSA_OAEP, rsaParameters.hash, rsaParameters.hasHash, rsaParameters.modulusLength, rsaParameters.publicExponent, extractable, usages, WTFMove(keyPairCallback), WTFMove(failureCallback), &context); -
trunk/Source/WebCore/crypto/keys/CryptoKeyRSA.h
r208985 r209390 44 44 45 45 class CryptoKeyDataRSAComponents; 46 class CryptoKeyPair;47 46 class PromiseWrapper; 48 47 class ScriptExecutionContext; 49 48 49 struct CryptoKeyPair; 50 50 struct JsonWebKey; 51 51 … … 98 98 size_t keySizeInBits() const; 99 99 100 using KeyPairCallback = WTF::Function<void(CryptoKeyPair& )>;100 using KeyPairCallback = WTF::Function<void(CryptoKeyPair&&)>; 101 101 using VoidCallback = WTF::Function<void()>; 102 102 static void generatePair(CryptoAlgorithmIdentifier, CryptoAlgorithmIdentifier hash, bool hasHash, unsigned modulusLength, const Vector<uint8_t>& publicExponent, bool extractable, CryptoKeyUsageBitmap, KeyPairCallback&&, VoidCallback&& failureCallback, ScriptExecutionContext*); -
trunk/Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp
r208891 r209390 271 271 auto publicKey = CryptoKeyRSA::create(algorithm, hash, hasHash, CryptoKeyType::Public, ccPublicKey, true, usage); 272 272 auto privateKey = CryptoKeyRSA::create(algorithm, hash, hasHash, CryptoKeyType::Private, ccPrivateKey, extractable, usage); 273 (*localCallback)(CryptoKeyPair::create(WTFMove(publicKey), WTFMove(privateKey))); 273 274 (*localCallback)(CryptoKeyPair { WTFMove(publicKey), WTFMove(privateKey) }); 275 274 276 delete localCallback; 275 277 delete localFailureCallback; -
trunk/Source/WebCore/css/FontFace.h
r208985 r209390 66 66 LoadStatus status() const; 67 67 68 typedef DOMPromise<FontFace&> Promise;68 using Promise = DOMPromise<IDLInterface<FontFace>>; 69 69 std::optional<Promise>& promise() { return m_promise; } 70 70 void registerLoaded(Promise&&); -
trunk/Source/WebCore/css/FontFaceSet.cpp
r208985 r209390 134 134 135 135 if (matchingFaces.isEmpty()) { 136 promise.resolve( Vector<RefPtr<FontFace>>());136 promise.resolve({ }); 137 137 return; 138 138 } -
trunk/Source/WebCore/css/FontFaceSet.h
r208985 r209390 47 47 void clear(); 48 48 49 typedef DOMPromise<Vector<RefPtr<FontFace>>> LoadPromise;49 using LoadPromise = DOMPromise<IDLSequence<IDLInterface<FontFace>>>; 50 50 void load(const String& font, const String& text, LoadPromise&&); 51 51 ExceptionOr<bool> check(const String& font, const String& text); … … 54 54 LoadStatus status() const; 55 55 56 typedef DOMPromise<FontFaceSet&> ReadyPromise;56 using ReadyPromise = DOMPromise<IDLInterface<FontFaceSet>>; 57 57 void registerReady(ReadyPromise&&); 58 58 -
trunk/Source/WebCore/dom/CustomElementRegistry.cpp
r208716 r209390 78 78 79 79 if (auto promise = m_promiseMap.take(localName)) 80 promise.value()->resolve( nullptr);80 promise.value()->resolve(); 81 81 } 82 82 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r209206 r209390 55 55 #include "HTMLVideoElement.h" 56 56 #include "JSDOMError.h" 57 #include "JSDOMPromise.h" 57 58 #include "JSHTMLMediaElement.h" 58 59 #include "Language.h" … … 978 979 979 980 for (auto& promise : pendingPlayPromises) 980 promise.reject (error);981 promise.rejectType<IDLInterface<DOMError>>(error); 981 982 } 982 983 -
trunk/Source/WebCore/html/HTMLMediaElement.h
r208851 r209390 33 33 #include "GenericTaskQueue.h" 34 34 #include "HTMLMediaElementEnums.h" 35 #include "JSDOMPromise.h"36 35 #include "MediaCanStartListener.h" 37 36 #include "MediaControllerInterface.h" … … 60 59 class AudioTrackPrivate; 61 60 class DOMError; 61 class DeferredPromise; 62 62 class DisplaySleepDisabler; 63 63 class Event; … … 87 87 class VideoTrackPrivate; 88 88 class WebKitMediaKeys; 89 90 template<typename> class DOMPromise; 89 91 90 92 #if ENABLE(VIDEO_TRACK) -
trunk/Source/WebCore/html/MediaController.cpp
r208096 r209390 31 31 #include "Clock.h" 32 32 #include "EventNames.h" 33 #include "ExceptionCode.h" 33 34 #include "HTMLMediaElement.h" 34 35 #include "TimeRanges.h" -
trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
r208910 r209390 62 62 #include <JavaScriptCore/JSCellInlines.h> 63 63 #include <JavaScriptCore/JSGenericTypedArrayViewInlines.h> 64 #include <heap/HeapInlines.h> 64 65 65 66 namespace WebCore { -
trunk/Source/WebCore/html/track/TextTrack.cpp
r207907 r209390 37 37 38 38 #include "Event.h" 39 #include "ExceptionCode.h" 39 40 #include "HTMLMediaElement.h" 40 41 #include "SourceBuffer.h" -
trunk/Source/WebKit2/CMakeLists.txt
r208388 r209390 93 93 "${WEBCORE_DIR}/bridge/jsc" 94 94 "${WEBCORE_DIR}/contentextensions" 95 "${WEBCORE_DIR}/crypto" 96 "${WEBCORE_DIR}/crypto/algorithms" 97 "${WEBCORE_DIR}/crypto/keys" 98 "${WEBCORE_DIR}/crypto/parameters" 95 99 "${WEBCORE_DIR}/css" 96 100 "${WEBCORE_DIR}/css/parser" -
trunk/Source/WebKit2/ChangeLog
r209378 r209390 1 2016-12-06 Sam Weinig <sam@webkit.org> 2 3 [WebIDL] Add support for converting dictionaries to JS 4 https://bugs.webkit.org/show_bug.cgi?id=165367 5 6 Reviewed by Darin Adler and Alex Christensen. 7 8 * CMakeLists.txt: 9 Add missing directories to look in for headers. 10 1 11 2016-12-05 Tim Horton <timothy_horton@apple.com> 2 12
Note: See TracChangeset
for help on using the changeset viewer.