Title: [198622] trunk/Source/WebCore
Revision
198622
Author
[email protected]
Date
2016-03-24 03:36:45 -0700 (Thu, 24 Mar 2016)

Log Message

Remove DeferredWrapper::resolve<Vector<unsigned char>>
https://bugs.webkit.org/show_bug.cgi?id=154849

Reviewed by Darin Adler.

Adding fulfillPromiseWithArrayBuffer to resolve a promise with an ArrayBuffer.
If the ArrayBuffer is null, the promise is rejected with an OutOfMemory exception.

Not covered by tests since we would need to make tryCreate return null on failing allocation.

* Modules/fetch/FetchBody.cpp:
(WebCore::FetchBody::processIfEmptyOrDisturbed):
(WebCore::FetchBody::loadedAsArrayBuffer):
* bindings/js/JSDOMPromise.cpp:
(WebCore::fulfillPromiseWithArrayBuffer):
* bindings/js/JSDOMPromise.h:
(WebCore::DeferredWrapper::resolve<JSC::JSValue>): Deleted.
(WebCore::DeferredWrapper::resolve): Deleted.
* bindings/js/JSSubtleCryptoCustom.cpp:
(WebCore::JSSubtleCrypto::encrypt):
(WebCore::JSSubtleCrypto::decrypt):
(WebCore::JSSubtleCrypto::sign):
(WebCore::JSSubtleCrypto::digest):
(WebCore::JSSubtleCrypto::exportKey):
(WebCore::JSSubtleCrypto::wrapKey):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (198621 => 198622)


--- trunk/Source/WebCore/ChangeLog	2016-03-24 09:02:55 UTC (rev 198621)
+++ trunk/Source/WebCore/ChangeLog	2016-03-24 10:36:45 UTC (rev 198622)
@@ -1,3 +1,31 @@
+2016-03-24  Youenn Fablet  <[email protected]>
+
+        Remove DeferredWrapper::resolve<Vector<unsigned char>>
+        https://bugs.webkit.org/show_bug.cgi?id=154849
+
+        Reviewed by Darin Adler.
+
+        Adding fulfillPromiseWithArrayBuffer to resolve a promise with an ArrayBuffer.
+        If the ArrayBuffer is null, the promise is rejected with an OutOfMemory exception.
+
+        Not covered by tests since we would need to make tryCreate return null on failing allocation.
+
+        * Modules/fetch/FetchBody.cpp:
+        (WebCore::FetchBody::processIfEmptyOrDisturbed):
+        (WebCore::FetchBody::loadedAsArrayBuffer):
+        * bindings/js/JSDOMPromise.cpp:
+        (WebCore::fulfillPromiseWithArrayBuffer):
+        * bindings/js/JSDOMPromise.h:
+        (WebCore::DeferredWrapper::resolve<JSC::JSValue>): Deleted.
+        (WebCore::DeferredWrapper::resolve): Deleted.
+        * bindings/js/JSSubtleCryptoCustom.cpp:
+        (WebCore::JSSubtleCrypto::encrypt):
+        (WebCore::JSSubtleCrypto::decrypt):
+        (WebCore::JSSubtleCrypto::sign):
+        (WebCore::JSSubtleCrypto::digest):
+        (WebCore::JSSubtleCrypto::exportKey):
+        (WebCore::JSSubtleCrypto::wrapKey):
+
 2016-03-23  Daniel Bates  <[email protected]>
 
         CSP: Simplify logic for checking policies

Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.cpp (198621 => 198622)


--- trunk/Source/WebCore/Modules/fetch/FetchBody.cpp	2016-03-24 09:02:55 UTC (rev 198621)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.cpp	2016-03-24 10:36:45 UTC (rev 198622)
@@ -97,7 +97,7 @@
             promise.reject<ExceptionCode>(SYNTAX_ERR);
             return true;
         case Consumer::Type::ArrayBuffer:
-            promise.resolve(ArrayBuffer::tryCreate(nullptr, 0));
+            fulfillPromiseWithArrayBuffer(promise, nullptr, 0);
             return true;
         default:
             ASSERT_NOT_REACHED();
@@ -174,7 +174,7 @@
 
     if (type == Consumer::Type::ArrayBuffer) {
         Vector<char> data = ""
-        promise.resolve<RefPtr<ArrayBuffer>>(ArrayBuffer::tryCreate(data.data(), data.size()));
+        fulfillPromiseWithArrayBuffer(promise, data.data(), data.size());
         return;
     }
     String contentType = Blob::normalizedContentType(extractMIMETypeFromMediaType(m_mimeType));
@@ -226,7 +226,7 @@
     ASSERT(m_consumer);
     ASSERT(m_consumer->type == Consumer::Type::Blob || m_consumer->type == Consumer::Type::ArrayBuffer);
     if (m_consumer->type == Consumer::Type::ArrayBuffer)
-        m_consumer->promise.resolve(buffer);
+        fulfillPromiseWithArrayBuffer(m_consumer->promise, buffer.get());
     else {
         ASSERT(m_blob);
         Vector<char> data;

Modified: trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp (198621 => 198622)


--- trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp	2016-03-24 09:02:55 UTC (rev 198621)
+++ trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp	2016-03-24 10:36:45 UTC (rev 198622)
@@ -93,4 +93,18 @@
         promise.resolve(value);
 }
 
+void fulfillPromiseWithArrayBuffer(DeferredWrapper& promise, ArrayBuffer* arrayBuffer)
+{
+    if (!arrayBuffer) {
+        promise.reject<JSValue>(createOutOfMemoryError(promise.globalObject().globalExec()));
+        return;
+    }
+    promise.resolve(arrayBuffer);
 }
+
+void fulfillPromiseWithArrayBuffer(DeferredWrapper& promise, const void* data, size_t length)
+{
+    fulfillPromiseWithArrayBuffer(promise, ArrayBuffer::tryCreate(data, length).get());
+}
+
+}

Modified: trunk/Source/WebCore/bindings/js/JSDOMPromise.h (198621 => 198622)


--- trunk/Source/WebCore/bindings/js/JSDOMPromise.h	2016-03-24 09:02:55 UTC (rev 198621)
+++ trunk/Source/WebCore/bindings/js/JSDOMPromise.h	2016-03-24 10:36:45 UTC (rev 198622)
@@ -56,6 +56,8 @@
 };
 
 void fulfillPromiseWithJSON(DeferredWrapper&, const String&);
+void fulfillPromiseWithArrayBuffer(DeferredWrapper&, ArrayBuffer*);
+void fulfillPromiseWithArrayBuffer(DeferredWrapper&, const void*, size_t);
 void rejectPromiseWithExceptionIfAny(JSC::ExecState&, JSDOMGlobalObject&, JSC::JSPromiseDeferred&);
 
 inline JSC::JSValue callPromiseFunction(JSC::ExecState& state, JSC::EncodedJSValue promiseFunction(JSC::ExecState*, JSC::JSPromiseDeferred*))
@@ -166,16 +168,6 @@
     JSC::JSLockHolder locker(exec);
     resolve(*exec, value);
 }
-template<>
-inline void DeferredWrapper::resolve<Vector<unsigned char>>(const Vector<unsigned char>& result)
-{
-    ASSERT(m_deferred);
-    ASSERT(m_globalObject);
-    JSC::ExecState* exec = m_globalObject->globalExec();
-    JSC::JSLockHolder locker(exec);
-    auto buffer = ArrayBuffer::tryCreate(result.data(), result.size());
-    resolve(*exec, toJS(exec, m_globalObject.get(), buffer.get()));
-}
 
 template<>
 inline void DeferredWrapper::resolve(const std::nullptr_t&)

Modified: trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp (198621 => 198622)


--- trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp	2016-03-24 09:02:55 UTC (rev 198621)
+++ trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp	2016-03-24 10:36:45 UTC (rev 198622)
@@ -167,7 +167,7 @@
     JSPromiseDeferred* promiseDeferred = JSPromiseDeferred::create(&state, globalObject());
     DeferredWrapper wrapper(&state, globalObject(), promiseDeferred);
     auto successCallback = [wrapper](const Vector<uint8_t>& result) mutable {
-        wrapper.resolve(result);
+        fulfillPromiseWithArrayBuffer(wrapper, result.data(), result.size());
     };
     auto failureCallback = [wrapper]() mutable {
         wrapper.reject(nullptr);
@@ -219,7 +219,7 @@
     JSPromiseDeferred* promiseDeferred = JSPromiseDeferred::create(&state, globalObject());
     DeferredWrapper wrapper(&state, globalObject(), promiseDeferred);
     auto successCallback = [wrapper](const Vector<uint8_t>& result) mutable {
-        wrapper.resolve(result);
+        fulfillPromiseWithArrayBuffer(wrapper, result.data(), result.size());
     };
     auto failureCallback = [wrapper]() mutable {
         wrapper.reject(nullptr);
@@ -271,7 +271,7 @@
     JSPromiseDeferred* promiseDeferred = JSPromiseDeferred::create(&state, globalObject());
     DeferredWrapper wrapper(&state, globalObject(), promiseDeferred);
     auto successCallback = [wrapper](const Vector<uint8_t>& result) mutable {
-        wrapper.resolve(result);
+        fulfillPromiseWithArrayBuffer(wrapper, result.data(), result.size());
     };
     auto failureCallback = [wrapper]() mutable {
         wrapper.reject(nullptr);
@@ -371,7 +371,7 @@
     JSPromiseDeferred* promiseDeferred = JSPromiseDeferred::create(&state, globalObject());
     DeferredWrapper wrapper(&state, globalObject(), promiseDeferred);
     auto successCallback = [wrapper](const Vector<uint8_t>& result) mutable {
-        wrapper.resolve(result);
+        fulfillPromiseWithArrayBuffer(wrapper, result.data(), result.size());
     };
     auto failureCallback = [wrapper]() mutable {
         wrapper.reject(nullptr);
@@ -613,7 +613,7 @@
     JSPromiseDeferred* promiseDeferred = JSPromiseDeferred::create(&state, globalObject());
     DeferredWrapper wrapper(&state, globalObject(), promiseDeferred);
     auto successCallback = [wrapper](const Vector<uint8_t>& result) mutable {
-        wrapper.resolve(result);
+        fulfillPromiseWithArrayBuffer(wrapper, result.data(), result.size());
     };
     auto failureCallback = [wrapper]() mutable {
         wrapper.reject(nullptr);
@@ -673,7 +673,7 @@
         auto encryptSuccessCallback = [wrapper, algorithmPtr, parametersPtr](const Vector<uint8_t>& encryptedData) mutable {
             delete algorithmPtr;
             delete parametersPtr;
-            wrapper.resolve(encryptedData);
+            fulfillPromiseWithArrayBuffer(wrapper, encryptedData.data(), encryptedData.size());
         };
         auto encryptFailureCallback = [wrapper, algorithmPtr, parametersPtr]() mutable {
             delete algorithmPtr;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to