Changeset 200766 in webkit
- Timestamp:
- May 12, 2016, 2:36:00 AM (9 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r200755 r200766 1 2016-05-12 Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 DOMPromise should only restrict the resolution type 4 https://bugs.webkit.org/show_bug.cgi?id=157307 5 6 Reviewed by Darin Adler. 7 8 Removing from DOMPromise the rejection template parameter. 9 Supported rejection types are integers (Exception codes) and DOM objects (DOMError typically). 10 11 Updated toJS and DeferredWrapper to accept Ref<>&& and RefPtr<>&&. 12 Previously Ref<>&& were not accepted and only "const RefPtr<>&" was accepted. 13 This in turn created an unecessary churn count when calling toJS. 14 15 Changes also allow in most cases to remove the need for explictly declaring the 16 rejection/resolution type. 17 18 Minor refactoring of FontFaceSet promise handling to use DOMPromise in lieu of DeferredWrapper. 19 20 Covered by existing tests. 21 Changes should not be visible from user scripts. 22 23 * Modules/fetch/FetchBody.cpp: 24 (WebCore::FetchBody::consume): 25 (WebCore::FetchBody::consumeText): 26 (WebCore::blobFromArrayBuffer): 27 (WebCore::FetchBody::loadingFailed): 28 * Modules/fetch/FetchBody.h: 29 (WebCore::FetchBody::formData): 30 * Modules/fetch/FetchBodyOwner.cpp: 31 (WebCore::FetchBodyOwner::arrayBuffer): 32 (WebCore::FetchBodyOwner::blob): 33 (WebCore::FetchBodyOwner::formData): 34 (WebCore::FetchBodyOwner::json): 35 (WebCore::FetchBodyOwner::text): 36 * Modules/fetch/FetchResponse.cpp: 37 (WebCore::FetchResponse::BodyLoader::didReceiveResponse): 38 * Modules/fetch/FetchResponse.h: 39 * Modules/mediastream/MediaDevices.h: 40 * Modules/mediastream/PeerConnectionBackend.h: 41 * Modules/mediastream/UserMediaRequest.cpp: 42 (WebCore::UserMediaRequest::didCreateStream): 43 * Modules/streams/ReadableStreamSource.h: 44 * Modules/webaudio/AudioContext.h: 45 * bindings/js/JSDOMBinding.h: 46 (WebCore::toJS): 47 (WebCore::jsPair): 48 * bindings/js/JSDOMPromise.cpp: 49 (WebCore::fulfillPromiseWithJSON): 50 * bindings/js/JSDOMPromise.h: 51 (WebCore::TypeInspector::decltype): 52 (WebCore::TypeInspector::testIsVector): 53 (WebCore::TypeInspector::testIsRefOrRefPtr): 54 (WebCore::DeferredWrapper::resolve): 55 (WebCore::DeferredWrapper::reject): 56 (WebCore::DOMPromise::resolve): 57 (WebCore::DOMPromise::reject): 58 (WebCore::DeferredWrapper::resolveWithValue): 59 (WebCore::DeferredWrapper::rejectWithValue): 60 (WebCore::callPromiseFunction): 61 * bindings/js/JSSubtleCryptoCustom.cpp: 62 (WebCore::JSSubtleCrypto::importKey): 63 (WebCore::JSSubtleCrypto::unwrapKey): 64 * css/FontFace.h: 65 * css/FontFaceSet.cpp: 66 (WebCore::FontFaceSet::PendingPromise::PendingPromise): 67 (WebCore::FontFaceSet::load): 68 (WebCore::FontFaceSet::registerReady): 69 * css/FontFaceSet.h: 70 * html/HTMLMediaElement.h: 71 1 72 2016-05-12 Manuel Rego Casasnovas <rego@igalia.com> 2 73 -
trunk/Source/WebCore/Modules/fetch/FetchBody.cpp
r199641 r200766 44 44 namespace WebCore { 45 45 46 static Ref Ptr<Blob> blobFromArrayBuffer(ArrayBuffer*, const String&);46 static Ref<Blob> blobFromArrayBuffer(ArrayBuffer*, const String&); 47 47 48 48 FetchBody::FetchBody(Ref<Blob>&& blob) … … 142 142 143 143 // FIXME: Support other types. 144 promise.reject <ExceptionCode>(0);144 promise.reject(0); 145 145 } 146 146 … … 201 201 } 202 202 String contentType = Blob::normalizedContentType(extractMIMETypeFromMediaType(m_mimeType)); 203 promise.resolve <RefPtr<Blob>>(Blob::create(extractFromText(), contentType));203 promise.resolve(Blob::create(extractFromText(), contentType)); 204 204 } 205 205 … … 237 237 } 238 238 239 static inline Ref Ptr<Blob> blobFromArrayBuffer(ArrayBuffer* buffer, const String& contentType)239 static inline Ref<Blob> blobFromArrayBuffer(ArrayBuffer* buffer, const String& contentType) 240 240 { 241 241 if (!buffer) … … 260 260 { 261 261 ASSERT(m_consumer); 262 m_consumer->promise.reject <ExceptionCode>(0);262 m_consumer->promise.reject(0); 263 263 m_consumer = Nullopt; 264 264 } -
trunk/Source/WebCore/Modules/fetch/FetchBody.h
r199641 r200766 54 54 void json(FetchBodyOwner&, DeferredWrapper&&); 55 55 void text(FetchBodyOwner&, DeferredWrapper&&); 56 void formData(FetchBodyOwner&, DeferredWrapper&& promise) { promise.reject <ExceptionCode>(0); }56 void formData(FetchBodyOwner&, DeferredWrapper&& promise) { promise.reject(0); } 57 57 58 58 #if ENABLE(STREAMS_API) -
trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp
r199641 r200766 76 76 } 77 77 if (isDisturbed()) { 78 promise.reject <ExceptionCode>(TypeError);78 promise.reject(TypeError); 79 79 return; 80 80 } … … 86 86 { 87 87 if (m_body.isEmpty()) { 88 promise.resolve <RefPtr<Blob>>(Blob::create());89 return; 90 } 91 if (isDisturbed()) { 92 promise.reject <ExceptionCode>(TypeError);88 promise.resolve(Blob::create()); 89 return; 90 } 91 if (isDisturbed()) { 92 promise.reject(TypeError); 93 93 return; 94 94 } … … 100 100 { 101 101 if (m_body.isEmpty()) { 102 promise.reject <ExceptionCode>(0);103 return; 104 } 105 if (isDisturbed()) { 106 promise.reject <ExceptionCode>(TypeError);102 promise.reject(0); 103 return; 104 } 105 if (isDisturbed()) { 106 promise.reject(TypeError); 107 107 return; 108 108 } … … 114 114 { 115 115 if (m_body.isEmpty()) { 116 promise.reject <ExceptionCode>(SYNTAX_ERR);117 return; 118 } 119 if (isDisturbed()) { 120 promise.reject <ExceptionCode>(TypeError);116 promise.reject(SYNTAX_ERR); 117 return; 118 } 119 if (isDisturbed()) { 120 promise.reject(TypeError); 121 121 return; 122 122 } … … 132 132 } 133 133 if (isDisturbed()) { 134 promise.reject <ExceptionCode>(TypeError);134 promise.reject(TypeError); 135 135 return; 136 136 } -
trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp
r200361 r200766 214 214 m_response.m_headers->filterAndFill(resourceResponse.httpHeaderFields(), FetchHeaders::Guard::Response); 215 215 216 std::exchange(m_promise, Nullopt)->resolve( &m_response);216 std::exchange(m_promise, Nullopt)->resolve(m_response); 217 217 } 218 218 -
trunk/Source/WebCore/Modules/fetch/FetchResponse.h
r200361 r200766 55 55 static RefPtr<FetchResponse> redirect(ScriptExecutionContext&, const String&, int, ExceptionCode&); 56 56 57 using FetchPromise = DOMPromise< RefPtr<FetchResponse>, ExceptionCode>;57 using FetchPromise = DOMPromise<FetchResponse>; 58 58 static void fetch(ScriptExecutionContext&, FetchRequest&, const Dictionary&, FetchPromise&&); 59 59 static void fetch(ScriptExecutionContext&, const String&, const Dictionary&, FetchPromise&&); -
trunk/Source/WebCore/Modules/mediastream/MediaDevices.h
r192746 r200766 59 59 Document* document() const; 60 60 61 typedef DOMPromise< RefPtr<MediaStream>, RefPtr<NavigatorUserMediaError>> Promise;62 typedef DOMPromise<MediaDeviceInfoVector , ExceptionCode> EnumerateDevicesPromise;61 typedef DOMPromise<MediaStream> Promise; 62 typedef DOMPromise<MediaDeviceInfoVector> EnumerateDevicesPromise; 63 63 64 64 void getUserMedia(const Dictionary&, Promise&&, ExceptionCode&) const; -
trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h
r198492 r200766 54 54 55 55 namespace PeerConnection { 56 typedef DOMPromise<R efPtr<RTCSessionDescription>, RefPtr<DOMError>> SessionDescriptionPromise;57 typedef DOMPromise<std::nullptr_t , RefPtr<DOMError>> VoidPromise;58 typedef DOMPromise<R efPtr<RTCStatsResponse>, RefPtr<DOMError>> StatsPromise;56 typedef DOMPromise<RTCSessionDescription> SessionDescriptionPromise; 57 typedef DOMPromise<std::nullptr_t> VoidPromise; 58 typedef DOMPromise<RTCStatsResponse> StatsPromise; 59 59 } 60 60 -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r198082 r200766 173 173 174 174 // 4 - Create the MediaStream and pass it to the success callback. 175 Ref Ptr<MediaStream> stream = MediaStream::create(*m_scriptExecutionContext, privateStream);175 Ref<MediaStream> stream = MediaStream::create(*m_scriptExecutionContext, privateStream); 176 176 if (m_audioConstraints) { 177 177 for (auto& track : stream->getAudioTracks()) { -
trunk/Source/WebCore/Modules/streams/ReadableStreamSource.h
r199704 r200766 45 45 virtual ~ReadableStreamSource() { } 46 46 47 typedef DOMPromise<std::nullptr_t , ExceptionCode> Promise;47 typedef DOMPromise<std::nullptr_t> Promise; 48 48 49 49 void start(ReadableStreamController&&, Promise&&); -
trunk/Source/WebCore/Modules/webaudio/AudioContext.h
r200361 r200766 110 110 using ActiveDOMObject::resume; 111 111 112 typedef DOMPromise<std::nullptr_t , ExceptionCode> Promise;112 typedef DOMPromise<std::nullptr_t> Promise; 113 113 114 114 void suspend(Promise&&); -
trunk/Source/WebCore/bindings/js/JSDOMBinding.h
r200619 r200766 252 252 JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, JSC::ArrayBufferView*); 253 253 JSC::JSValue toJS(JSC::ExecState*, JSC::JSGlobalObject*, JSC::ArrayBufferView*); 254 template<typename T> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, RefPtr<T>); 254 template<typename T> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, RefPtr<T>&); 255 template<typename T> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, RefPtr<T>&&); 255 256 template<typename T> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, PassRefPtr<T>); 256 257 template<typename T> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const Vector<T>&); … … 268 269 269 270 JSC::JSValue jsPair(JSC::ExecState&, JSDOMGlobalObject*, JSC::JSValue, JSC::JSValue); 270 template<typename FirstType, typename SecondType> JSC::JSValue jsPair(JSC::ExecState&, JSDOMGlobalObject*, const FirstType&, constSecondType&);271 template<typename FirstType, typename SecondType> JSC::JSValue jsPair(JSC::ExecState&, JSDOMGlobalObject*, FirstType&, SecondType&); 271 272 272 273 RefPtr<JSC::ArrayBufferView> toArrayBufferView(JSC::JSValue); … … 541 542 } 542 543 543 template<typename T> inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, RefPtr<T> ptr) 544 template<typename T> inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, RefPtr<T>& ptr) 545 { 546 return toJS(exec, globalObject, ptr.get()); 547 } 548 549 template<typename T> inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, RefPtr<T>&& ptr) 544 550 { 545 551 return toJS(exec, globalObject, ptr.get()); … … 645 651 } 646 652 647 template<typename FirstType, typename SecondType> inline JSC::JSValue jsPair(JSC::ExecState& state, JSDOMGlobalObject* globalObject, const FirstType& value1, constSecondType& value2)653 template<typename FirstType, typename SecondType> inline JSC::JSValue jsPair(JSC::ExecState& state, JSDOMGlobalObject* globalObject, FirstType& value1, SecondType& value2) 648 654 { 649 655 return jsPair(state, globalObject, toJS(&state, globalObject, value1), toJS(&state, globalObject, value2)); -
trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp
r200546 r200766 89 89 JSC::JSValue value = parseAsJSON(promise.globalObject().globalExec(), data); 90 90 if (!value) 91 promise.reject <ExceptionCode>(SYNTAX_ERR);91 promise.reject(SYNTAX_ERR); 92 92 else 93 93 promise.resolve(value); -
trunk/Source/WebCore/bindings/js/JSDOMPromise.h
r200546 r200766 34 34 namespace WebCore { 35 35 36 template<typename DOMClass> 37 struct TypeInspector { 38 private: 39 template<typename T> static constexpr auto testIsVector(int) -> decltype(std::declval<T>().shrinkToFit(), bool()) { return true; } 40 template<typename T> static constexpr bool testIsVector(...) { return false; } 41 42 template<typename T> static constexpr auto testIsRefOrRefPtr(int) -> decltype(std::declval<T>().leakRef(), bool()) { return true; } 43 template<typename T> static constexpr bool testIsRefOrRefPtr(...) { return false; } 44 45 public: 46 static constexpr bool isRefOrRefPtr = testIsRefOrRefPtr<DOMClass>(0); 47 static constexpr bool isPassByValueType = std::is_pointer<DOMClass>::value 48 || std::is_same<DOMClass, std::nullptr_t>::value 49 || std::is_same<DOMClass, JSC::JSValue>::value 50 || std::is_same<DOMClass, bool>::value; 51 static constexpr bool isPassByConstRefType = testIsVector<DOMClass>(0) 52 || std::is_same<DOMClass, String>::value; 53 }; 54 55 template<typename DOMClass, typename Enable = void> 56 struct PromiseResultInspector { 57 public: 58 static constexpr bool passByValue = false; 59 static constexpr bool passByRef = true; 60 static constexpr bool passByURef = false; 61 static constexpr bool passByConstRef = false; 62 63 typedef DOMClass& Type; 64 }; 65 66 template<typename DOMClass> 67 struct PromiseResultInspector<DOMClass, typename std::enable_if<TypeInspector<DOMClass>::isPassByValueType>::type> { 68 public: 69 static constexpr bool passByValue = true; 70 static constexpr bool passByRef = false; 71 static constexpr bool passByURef = false; 72 static constexpr bool passByConstRef = false; 73 74 typedef DOMClass Type; 75 }; 76 77 template<typename DOMClass> 78 struct PromiseResultInspector<DOMClass, typename std::enable_if<TypeInspector<DOMClass>::isPassByConstRefType>::type> { 79 public: 80 static constexpr bool passByValue = false; 81 static constexpr bool passByRef = false; 82 static constexpr bool passByURef = false; 83 static constexpr bool passByConstRef = true; 84 85 typedef const DOMClass& Type; 86 }; 87 88 template<typename DOMClass> 89 struct PromiseResultInspector<DOMClass, typename std::enable_if<TypeInspector<DOMClass>::isRefOrRefPtr>::type> { 90 static constexpr bool passByValue = false; 91 static constexpr bool passByRef = false; 92 static constexpr bool passByURef = true; 93 static constexpr bool passByConstRef = false; 94 }; 95 36 96 class DeferredWrapper { 37 97 public: 38 98 DeferredWrapper(JSC::ExecState*, JSDOMGlobalObject*, JSC::JSPromiseDeferred*); 39 99 40 template<class ResolveResultType> 41 void resolve(const ResolveResultType&); 42 43 template<class RejectResultType> 44 void reject(const RejectResultType&); 100 template<class ResolveResultType> typename std::enable_if<PromiseResultInspector<ResolveResultType>::passByValue, void>::type 101 resolve(ResolveResultType result) { resolveWithValue(result); } 102 template<class ResolveResultType> typename std::enable_if<PromiseResultInspector<ResolveResultType>::passByRef, void>::type 103 resolve(ResolveResultType& result) { resolveWithValue(result); } 104 template<class ResolveResultType> typename std::enable_if<PromiseResultInspector<ResolveResultType>::passByURef, void>::type 105 resolve(ResolveResultType&& result) { resolveWithValue(std::forward<ResolveResultType>(result)); } 106 template<class ResolveResultType> typename std::enable_if<PromiseResultInspector<ResolveResultType>::passByConstRef, void>::type 107 resolve(const ResolveResultType& result) { resolveWithValue(result); } 108 109 template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByValue, void>::type 110 reject(RejectResultType result) { rejectWithValue(result); } 111 template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByRef, void>::type 112 reject(RejectResultType& result) { rejectWithValue(result); } 113 template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByURef, void>::type 114 reject(RejectResultType&& result) { rejectWithValue(std::forward<RejectResultType>(result)); } 115 template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByConstRef, void>::type 116 reject(const RejectResultType& result) { rejectWithValue(result); } 117 118 void reject(ExceptionCode); 45 119 46 120 JSDOMGlobalObject& globalObject() const; … … 52 126 void reject(JSC::ExecState& state, JSC::JSValue resolution) { callFunction(state, m_deferred->reject(), resolution); } 53 127 128 template<class RejectResultType> void rejectWithValue(RejectResultType&&); 129 template<class ResolveResultType> void resolveWithValue(ResolveResultType&&); 130 54 131 JSC::Strong<JSDOMGlobalObject> m_globalObject; 55 132 JSC::Strong<JSC::JSPromiseDeferred> m_deferred; … … 72 149 } 73 150 74 template <typename Value , typename Error>151 template <typename Value> 75 152 class DOMPromise { 76 153 public: … … 81 158 DOMPromise& operator=(DOMPromise const&) = default; 82 159 83 void resolve(const Value& value) { m_wrapper.resolve<Value>(value); } 84 void reject(const Error& error) { m_wrapper.reject<Error>(error); } 160 void resolve(typename PromiseResultInspector<Value>::Type value) { m_wrapper.resolve(value); } 161 162 template<typename ErrorType> void reject(ErrorType&& error) { m_wrapper.reject(std::forward<ErrorType>(error)); } 85 163 86 164 private: … … 88 166 }; 89 167 168 inline void DeferredWrapper::reject(ExceptionCode ec) 169 { 170 ASSERT(m_deferred); 171 ASSERT(m_globalObject); 172 JSC::ExecState* exec = m_globalObject->globalExec(); 173 JSC::JSLockHolder locker(exec); 174 reject(*exec, createDOMException(exec, ec)); 175 } 176 90 177 template<class ResolveResultType> 91 inline void DeferredWrapper::resolve (const ResolveResultType& result)92 { 93 ASSERT(m_deferred); 94 ASSERT(m_globalObject); 95 JSC::ExecState* exec = m_globalObject->globalExec(); 96 JSC::JSLockHolder locker(exec); 97 resolve(*exec, toJS(exec, m_globalObject.get(), result));178 inline void DeferredWrapper::resolveWithValue(ResolveResultType&& result) 179 { 180 ASSERT(m_deferred); 181 ASSERT(m_globalObject); 182 JSC::ExecState* exec = m_globalObject->globalExec(); 183 JSC::JSLockHolder locker(exec); 184 resolve(*exec, toJS(exec, m_globalObject.get(), std::forward<ResolveResultType>(result))); 98 185 } 99 186 100 187 template<class RejectResultType> 101 inline void DeferredWrapper::reject(const RejectResultType& result) 102 { 103 ASSERT(m_deferred); 104 ASSERT(m_globalObject); 105 JSC::ExecState* exec = m_globalObject->globalExec(); 106 JSC::JSLockHolder locker(exec); 107 reject(*exec, toJS(exec, m_globalObject.get(), result)); 108 } 109 110 template<> 111 inline void DeferredWrapper::reject(const std::nullptr_t&) 188 inline void DeferredWrapper::rejectWithValue(RejectResultType&& result) 189 { 190 ASSERT(m_deferred); 191 ASSERT(m_globalObject); 192 JSC::ExecState* exec = m_globalObject->globalExec(); 193 JSC::JSLockHolder locker(exec); 194 reject(*exec, toJS(exec, m_globalObject.get(), std::forward<RejectResultType>(result))); 195 } 196 197 template<> 198 inline void DeferredWrapper::resolve(bool result) 199 { 200 ASSERT(m_deferred); 201 ASSERT(m_globalObject); 202 JSC::ExecState* exec = m_globalObject->globalExec(); 203 JSC::JSLockHolder locker(exec); 204 resolve(*exec, JSC::jsBoolean(result)); 205 } 206 207 template<> 208 inline void DeferredWrapper::resolve(JSC::JSValue value) 209 { 210 ASSERT(m_deferred); 211 ASSERT(m_globalObject); 212 JSC::ExecState* exec = m_globalObject->globalExec(); 213 JSC::JSLockHolder locker(exec); 214 resolve(*exec, value); 215 } 216 217 template<> 218 inline void DeferredWrapper::reject(JSC::JSValue value) 219 { 220 ASSERT(m_deferred); 221 ASSERT(m_globalObject); 222 JSC::ExecState* exec = m_globalObject->globalExec(); 223 JSC::JSLockHolder locker(exec); 224 reject(*exec, value); 225 } 226 227 template<> 228 inline void DeferredWrapper::resolve(std::nullptr_t) 229 { 230 ASSERT(m_deferred); 231 ASSERT(m_globalObject); 232 JSC::ExecState* exec = m_globalObject->globalExec(); 233 JSC::JSLockHolder locker(exec); 234 resolve(*exec, JSC::jsUndefined()); 235 } 236 237 template<> 238 inline void DeferredWrapper::reject(std::nullptr_t) 112 239 { 113 240 ASSERT(m_deferred); … … 119 246 120 247 template<> 121 inline void DeferredWrapper::reject(const JSC::JSValue& value) 122 { 123 ASSERT(m_deferred); 124 ASSERT(m_globalObject); 125 JSC::ExecState* exec = m_globalObject->globalExec(); 126 JSC::JSLockHolder locker(exec); 127 reject(*exec, value); 128 } 129 130 template<> 131 inline void DeferredWrapper::reject<ExceptionCode>(const ExceptionCode& ec) 132 { 133 ASSERT(m_deferred); 134 ASSERT(m_globalObject); 135 JSC::ExecState* exec = m_globalObject->globalExec(); 136 JSC::JSLockHolder locker(exec); 137 reject(*exec, createDOMException(exec, ec)); 138 } 139 140 template<> 141 inline void DeferredWrapper::resolve<String>(const String& result) 248 inline void DeferredWrapper::resolve(const String& result) 142 249 { 143 250 ASSERT(m_deferred); … … 149 256 150 257 template<> 151 inline void DeferredWrapper::resolve<bool>(const bool& result) 152 { 153 ASSERT(m_deferred); 154 ASSERT(m_globalObject); 155 JSC::ExecState* exec = m_globalObject->globalExec(); 156 JSC::JSLockHolder locker(exec); 157 resolve(*exec, JSC::jsBoolean(result)); 158 } 159 160 template<> 161 inline void DeferredWrapper::resolve<JSC::JSValue>(const JSC::JSValue& value) 162 { 163 ASSERT(m_deferred); 164 ASSERT(m_globalObject); 165 JSC::ExecState* exec = m_globalObject->globalExec(); 166 JSC::JSLockHolder locker(exec); 167 resolve(*exec, value); 168 } 169 170 template<> 171 inline void DeferredWrapper::resolve(const std::nullptr_t&) 172 { 173 ASSERT(m_deferred); 174 ASSERT(m_globalObject); 175 JSC::ExecState* exec = m_globalObject->globalExec(); 176 JSC::JSLockHolder locker(exec); 177 resolve(*exec, JSC::jsUndefined()); 178 } 179 180 template<> 181 inline void DeferredWrapper::reject<String>(const String& result) 258 inline void DeferredWrapper::reject(const String& result) 182 259 { 183 260 ASSERT(m_deferred); -
trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp
r198622 r200766 551 551 DeferredWrapper wrapper(&state, globalObject(), promiseDeferred); 552 552 auto successCallback = [wrapper](CryptoKey& result) mutable { 553 wrapper.resolve( &result);553 wrapper.resolve(result); 554 554 }; 555 555 auto failureCallback = [wrapper]() mutable { … … 786 786 auto decryptSuccessCallback = [domGlobalObject, keyFormat, unwrappedKeyAlgorithmPtr, unwrappedKeyAlgorithmParametersPtr, extractable, keyUsages, wrapper](const Vector<uint8_t>& result) mutable { 787 787 auto importSuccessCallback = [wrapper](CryptoKey& key) mutable { 788 wrapper.resolve( &key);788 wrapper.resolve(key); 789 789 }; 790 790 auto importFailureCallback = [wrapper]() mutable { -
trunk/Source/WebCore/css/FontFace.h
r200555 r200766 66 66 LoadStatus status() const; 67 67 68 typedef DOMPromise<FontFace& , ExceptionCode> Promise;68 typedef DOMPromise<FontFace&> Promise; 69 69 void registerLoaded(Promise&&); 70 70 -
trunk/Source/WebCore/css/FontFaceSet.cpp
r200619 r200766 84 84 } 85 85 86 FontFaceSet::PendingPromise::PendingPromise( Promise&& promise)86 FontFaceSet::PendingPromise::PendingPromise(LoadPromise&& promise) 87 87 : promise(WTFMove(promise)) 88 88 { … … 124 124 } 125 125 126 void FontFaceSet::load(const String& font, const String& text, DeferredWrapper&& promise)126 void FontFaceSet::load(const String& font, const String& text, LoadPromise&& promise) 127 127 { 128 128 ExceptionCode ec = 0; … … 143 143 for (auto& face : matchingFaces) { 144 144 if (face.get().status() == CSSFontFace::Status::Failure) { 145 promise.reject(DOMCoreException::create(ExceptionCodeDescription(NETWORK_ERR)) .ptr());145 promise.reject(DOMCoreException::create(ExceptionCodeDescription(NETWORK_ERR))); 146 146 return; 147 147 } … … 168 168 } 169 169 170 void FontFaceSet::registerReady( Promise&& promise)170 void FontFaceSet::registerReady(ReadyPromise&& promise) 171 171 { 172 172 ASSERT(!m_promise); -
trunk/Source/WebCore/css/FontFaceSet.h
r200619 r200766 48 48 void clear(); 49 49 50 void load(const String& font, const String& text, DeferredWrapper&& promise); 50 typedef DOMPromise<Vector<RefPtr<FontFace>>> LoadPromise; 51 void load(const String& font, const String& text, LoadPromise&&); 51 52 bool check(const String& font, const String& text, ExceptionCode&); 52 53 … … 54 55 LoadStatus status() const; 55 56 56 typedef DOMPromise<FontFaceSet& , DOMCoreException&>Promise;57 void registerReady( Promise&&);57 typedef DOMPromise<FontFaceSet&> ReadyPromise; 58 void registerReady(ReadyPromise&&); 58 59 59 60 CSSFontFaceSet& backing() { return m_backing; } … … 75 76 private: 76 77 struct PendingPromise : RefCounted<PendingPromise> { 77 typedef DOMPromise<Vector<RefPtr<FontFace>>&, DOMCoreException&> Promise; 78 static Ref<PendingPromise> create(Promise&& promise) 78 static Ref<PendingPromise> create(LoadPromise&& promise) 79 79 { 80 80 return adoptRef(*new PendingPromise(WTFMove(promise))); … … 83 83 84 84 private: 85 PendingPromise( Promise&&);85 PendingPromise(LoadPromise&&); 86 86 87 87 public: 88 88 Vector<RefPtr<FontFace>> faces; 89 Promise promise;89 LoadPromise promise; 90 90 bool hasReachedTerminalState { false }; 91 91 }; … … 111 111 Ref<CSSFontFaceSet> m_backing; 112 112 HashMap<RefPtr<CSSFontFace>, Vector<Ref<PendingPromise>>> m_pendingPromises; 113 Optional< Promise> m_promise;113 Optional<ReadyPromise> m_promise; 114 114 bool m_isReady { false }; 115 115 }; -
trunk/Source/WebCore/html/HTMLMediaElement.h
r200638 r200766 213 213 void setLoop(bool b); 214 214 215 typedef DOMPromise<std::nullptr_t , DOMError&> PlayPromise;215 typedef DOMPromise<std::nullptr_t> PlayPromise; 216 216 void play(PlayPromise&&); 217 217
Note:
See TracChangeset
for help on using the changeset viewer.