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;