[Streams API] Remove ReadableStreamController.enqueue() custom binding
authoryouenn.fablet@crf.canon.fr <youenn.fablet@crf.canon.fr@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Jul 2015 19:27:24 +0000 (19:27 +0000)
committeryouenn.fablet@crf.canon.fr <youenn.fablet@crf.canon.fr@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Jul 2015 19:27:24 +0000 (19:27 +0000)
https://bugs.webkit.org/show_bug.cgi?id=146455

Reviewed by Darin Adler.

Made enqueue not custom. Updated error to use Default=Undefined in IDL.

No change in behavior.

* Modules/streams/ReadableStreamController.h:
(WebCore::ReadableStreamController::error): Removed unneeded variation of error.
(WebCore::ReadableStreamController::enqueue): Calling ReadableJSStream enqueue method.
* Modules/streams/ReadableStreamController.idl: Updated error with Default=Undefined and made enqueue not custom.
* bindings/js/JSDOMBinding.cpp:
(WebCore::createDOMException): Adding support for RangeError exceptions.
* bindings/js/JSReadableStreamControllerCustom.cpp:
(WebCore::constructJSReadableStreamController): Deleted.
* bindings/js/ReadableJSStream.cpp:
(WebCore::ReadableJSStream::error): Updated to pass error value as parameter.
(WebCore::ReadableJSStream::enqueue): Added exception throwing through ExceptionCode.
(WebCore::ReadableJSStream::retrieveChunkSize): Ditto.
* bindings/js/ReadableJSStream.h:
* dom/ExceptionCode.h: Adding RangeError.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186231 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/Modules/streams/ReadableStreamController.h
Source/WebCore/Modules/streams/ReadableStreamController.idl
Source/WebCore/bindings/js/JSDOMBinding.cpp
Source/WebCore/bindings/js/JSReadableStreamControllerCustom.cpp
Source/WebCore/bindings/js/ReadableJSStream.cpp
Source/WebCore/bindings/js/ReadableJSStream.h
Source/WebCore/dom/ExceptionCode.h

index 33fee24..99ac1cd 100644 (file)
@@ -1,3 +1,29 @@
+2015-07-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>
+
+        [Streams API] Remove ReadableStreamController.enqueue() custom binding
+        https://bugs.webkit.org/show_bug.cgi?id=146455
+
+        Reviewed by Darin Adler.
+
+        Made enqueue not custom. Updated error to use Default=Undefined in IDL.
+
+        No change in behavior.
+
+        * Modules/streams/ReadableStreamController.h:
+        (WebCore::ReadableStreamController::error): Removed unneeded variation of error.
+        (WebCore::ReadableStreamController::enqueue): Calling ReadableJSStream enqueue method.
+        * Modules/streams/ReadableStreamController.idl: Updated error with Default=Undefined and made enqueue not custom.
+        * bindings/js/JSDOMBinding.cpp:
+        (WebCore::createDOMException): Adding support for RangeError exceptions.
+        * bindings/js/JSReadableStreamControllerCustom.cpp:
+        (WebCore::constructJSReadableStreamController): Deleted.
+        * bindings/js/ReadableJSStream.cpp:
+        (WebCore::ReadableJSStream::error): Updated to pass error value as parameter.
+        (WebCore::ReadableJSStream::enqueue): Added exception throwing through ExceptionCode.
+        (WebCore::ReadableJSStream::retrieveChunkSize): Ditto.
+        * bindings/js/ReadableJSStream.h:
+        * dom/ExceptionCode.h: Adding RangeError.
+
 2015-07-02  Brady Eidson  <beidson@apple.com>
 
         [Content Extensions] Block synchronous XMLHTTPRequest.
index 6f21f29..a4c3bec 100644 (file)
@@ -48,8 +48,9 @@ public:
 
     ReadableJSStream& stream() { return m_stream; }
 
-    void error(JSC::ExecState* state, ExceptionCode& ec) { m_stream.error(*state, ec); }
-    void error(JSC::ExecState* state, JSC::JSValue, ExceptionCode& ec) { m_stream.error(*state, ec); }
+    void error(JSC::ExecState* state, JSC::JSValue value, ExceptionCode& ec) { m_stream.error(*state, value, ec); }
+
+    void enqueue(JSC::ExecState* state, JSC::JSValue value) { m_stream.enqueue(*state, value); }
 
     void ref() { m_stream.ref(); }
     void deref() { m_stream.deref(); }
index 57f5666..30b8c8b 100644 (file)
@@ -33,9 +33,9 @@
     ImplementationLacksVTable,
     NoInterfaceObject
 ] interface ReadableStreamController {
-    [Custom, RaisesException] boolean enqueue(any chunk);
+    [CallWith=ScriptState] void enqueue([Default=Undefined] optional any chunk);
     [RaisesException] void close();
-    [CallWith=ScriptState, RaisesException] void error(optional any error);
+    [CallWith=ScriptState, RaisesException] void error([Default=Undefined] optional any error);
 
     readonly attribute double desiredSize;
 };
index 1b6454d..5a41b46 100644 (file)
@@ -224,6 +224,9 @@ JSValue createDOMException(ExecState* exec, ExceptionCode ec)
     // FIXME: Handle other WebIDL exception types.
     if (ec == TypeError)
         return createTypeError(exec);
+    if (ec == RangeError)
+        return createRangeError(exec, ASCIILiteral("Bad value"));
+
 
     // FIXME: All callers to setDOMException need to pass in the right global object
     // for now, we're going to assume the lexicalGlobalObject.  Which is wrong in cases like this:
index 14cc166..3817e33 100644 (file)
@@ -40,17 +40,6 @@ using namespace JSC;
 
 namespace WebCore {
 
-JSValue JSReadableStreamController::enqueue(ExecState* exec)
-{
-    ReadableJSStream& stream = impl().stream();
-    if (stream.isErrored())
-        return exec->vm().throwException(exec, stream.error());
-    if (stream.isCloseRequested())
-        return exec->vm().throwException(exec, createTypeError(exec, ASCIILiteral("Calling enqueue on a stream which is closing")));
-    stream.enqueue(*exec);
-    return jsUndefined();
-}
-
 EncodedJSValue JSC_HOST_CALL constructJSReadableStreamController(ExecState* exec)
 {
     return throwVMError(exec, createTypeError(exec, ASCIILiteral("ReadableStreamController constructor should not be called directly")));
index a7d21b2..5381254 100644 (file)
@@ -298,13 +298,13 @@ void ReadableJSStream::close(ExceptionCode& ec)
     changeStateToClosed();
 }
 
-void ReadableJSStream::error(JSC::ExecState& state, ExceptionCode& ec)
+void ReadableJSStream::error(JSC::ExecState& state, JSC::JSValue value, ExceptionCode& ec)
 {
     if (!isReadable()) {
         ec = TypeError;
         return;
     }
-    storeError(state, state.argument(0));
+    storeError(state, value);
 }
 
 void ReadableJSStream::storeException(JSC::ExecState& state)
@@ -338,24 +338,27 @@ JSValue ReadableJSStream::read()
     return chunk.value.get();
 }
 
-void ReadableJSStream::enqueue(ExecState& state)
+void ReadableJSStream::enqueue(JSC::ExecState& state, JSC::JSValue chunk)
 {
-    ASSERT(!isCloseRequested());
-
+    if (isErrored()) {
+        throwVMError(&state, error());
+        return;
+    }
+    if (isCloseRequested()) {
+        throwVMError(&state, createDOMException(&state, TypeError));
+        return;
+    }
     if (!isReadable())
         return;
 
-    JSValue chunk = state.argument(0);
     if (resolveReadCallback(chunk)) {
         pull();
         return;
     }
 
     double size = retrieveChunkSize(state, chunk);
-    if (state.hadException()) {
-        storeError(state, state.exception()->value());
+    if (state.hadException())
         return;
-    }
 
     m_chunkQueue.append({ JSC::Strong<JSC::Unknown>(state.vm(), chunk), size });
     m_totalQueueSize += size;
@@ -372,15 +375,20 @@ double ReadableJSStream::retrieveChunkSize(ExecState& state, JSValue chunk)
     arguments.append(chunk);
 
     JSValue sizeValue = callFunction(state, m_sizeFunction.get(), jsUndefined(), arguments);
-    if (state.hadException())
+    if (state.hadException()) {
+        storeError(state, state.exception()->value());
         return 0;
+    }
 
     double size = sizeValue.toNumber(&state);
-    if (state.hadException())
+    if (state.hadException()) {
+        storeError(state, state.exception()->value());
         return 0;
+    }
 
     if (!std::isfinite(size) || size < 0) {
-        throwVMError(&state, createRangeError(&state, ASCIILiteral("Incorrect double value")));
+        storeError(state, createDOMException(&state, RangeError));
+        throwVMError(&state, error());
         return 0;
     }
 
index 15fde32..4eaa493 100644 (file)
@@ -62,8 +62,8 @@ public:
     void storeError(JSC::ExecState&, JSC::JSValue);
     JSC::JSValue error() override { return m_error.get(); }
 
-    void enqueue(JSC::ExecState&);
-    void error(JSC::ExecState&, ExceptionCode&);
+    void enqueue(JSC::ExecState&, JSC::JSValue);
+    void error(JSC::ExecState&, JSC::JSValue, ExceptionCode&);
 
     double desiredSize() const { return m_highWaterMark - m_totalQueueSize; }
 
index 9bb4064..4325b83 100644 (file)
@@ -65,6 +65,7 @@ namespace WebCore {
         // WebIDL exception types, handled by the binding layer.
         // FIXME: Add GeneralError, EvalError, etc. when implemented in the bindings.
         TypeError = 105,
+        RangeError = 106,
     };
 
 } // namespace WebCore