[Streams API] Calling controller.error() should trigger storing an undefined error
authorcalvaris@igalia.com <calvaris@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 16 Jun 2015 17:36:08 +0000 (17:36 +0000)
committercalvaris@igalia.com <calvaris@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 16 Jun 2015 17:36:08 +0000 (17:36 +0000)
https://bugs.webkit.org/show_bug.cgi?id=145976

Reviewed by Darin Adler.

Source/WebCore:

Covered by rebased test.

* bindings/js/JSReadableStreamControllerCustom.cpp:
(WebCore::JSReadableStreamController::error): Storing undefined if no error value passed.
* bindings/js/ReadableJSStream.cpp: Removed storeError(ExecState*).
(WebCore::ReadableJSStream::ReadableJSStream):

LayoutTests:

* streams/readable-stream-controller-error-expected.txt: Rebasing expectation as test is passing now.
* streams/readable-stream-reader-read-expected.txt:
* streams/readable-stream-reader-read.html: Adding test for promise rejection without any parameter.

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

LayoutTests/ChangeLog
LayoutTests/streams/readable-stream-controller-error-expected.txt
LayoutTests/streams/readable-stream-reader-read-expected.txt
LayoutTests/streams/readable-stream-reader-read.html
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSReadableStreamControllerCustom.cpp
Source/WebCore/bindings/js/ReadableJSStream.cpp
Source/WebCore/bindings/js/ReadableJSStream.h

index f95d0cf..35e94c9 100644 (file)
@@ -1,5 +1,16 @@
 2015-06-16  Youenn Fablet <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>
 
+        [Streams API] Calling controller.error() should trigger storing an undefined error
+        https://bugs.webkit.org/show_bug.cgi?id=145976
+
+        Reviewed by Darin Adler.
+
+        * streams/readable-stream-controller-error-expected.txt: Rebasing expectation as test is passing now.
+        * streams/readable-stream-reader-read-expected.txt:
+        * streams/readable-stream-reader-read.html: Adding test for promise rejection without any parameter.
+
+2015-06-16  Youenn Fablet <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>
+
         [Streams API] Sync tests with spec
         https://bugs.webkit.org/show_bug.cgi?id=145839
 
index 7351e4e..f0336e0 100644 (file)
@@ -1,5 +1,5 @@
 
 PASS Erroring a ReadableStream should reject ReadableStreamReader close promise 
 PASS Erroring a ReadableStream should reject ReadableStreamReader close promise 
-FAIL Erroring a ReadableStream without any value assert_equals: expected (undefined) undefined but got (object) object "Error: Error function called."
+PASS Erroring a ReadableStream without any value 
 
index 3af43e1..5479ab5 100644 (file)
@@ -4,4 +4,5 @@ PASS Reading twice on a closed stream
 PASS Reading twice on an errored stream 
 PASS Reading twice on a stream that gets errored 
 PASS Reading within a read promise resolve callback on a stream that gets closed 
+PASS ReadableStream: if start rejects with no parameter, it should error the stream with an undefined error 
 
index 11f5d28..dfd6488 100644 (file)
@@ -159,4 +159,19 @@ test5.step(function() {
     }));
     controller.close();
 });
+
+var test6 = async_test('ReadableStream: if start rejects with no parameter, it should error the stream with an undefined error');
+test6.step(function() {
+    var rs = new ReadableStream({
+        start: function(c) {
+            return Promise.reject();
+        }
+    });
+
+    rs.getReader().read().catch(test6.step_func(function(e) {
+        assert_equals(typeof e, "undefined");
+        test6.done();
+    }));
+});
+
 </script>
index 91d33e1..1db0eca 100644 (file)
@@ -1,3 +1,17 @@
+2015-06-16  Youenn Fablet <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>
+
+        [Streams API] Calling controller.error() should trigger storing an undefined error
+        https://bugs.webkit.org/show_bug.cgi?id=145976
+
+        Reviewed by Darin Adler.
+
+        Covered by rebased test.
+
+        * bindings/js/JSReadableStreamControllerCustom.cpp:
+        (WebCore::JSReadableStreamController::error): Storing undefined if no error value passed.
+        * bindings/js/ReadableJSStream.cpp: Removed storeError(ExecState*).
+        (WebCore::ReadableJSStream::ReadableJSStream):
+
 2015-06-16  Chris Dumez  <cdumez@apple.com>
 
         Purge StyledElement's presentation attribute cache on memory pressure
index f1b587e..12d49cb 100644 (file)
@@ -61,12 +61,12 @@ JSValue JSReadableStreamController::enqueue(ExecState* exec)
     return jsUndefined();
 }
 
-JSValue JSReadableStreamController::error(ExecState* exec)
+JSValue JSReadableStreamController::error(ExecState* state)
 {
     ReadableJSStream& stream = impl().stream();
     if (!stream.isReadable())
-        return exec->vm().throwException(exec, createTypeError(exec, ASCIILiteral("Calling error on a stream which is not readable")));
-    stream.storeError(*exec);
+        return state->vm().throwException(state, createTypeError(state, ASCIILiteral("Calling error on a stream which is not readable")));
+    stream.storeError(*state, state->argument(0));
     return jsUndefined();
 }
 
index 70ce3a1..fdf31b4 100644 (file)
@@ -176,7 +176,7 @@ ReadableJSStream::ReadableJSStream(ScriptExecutionContext& scriptExecutionContex
     // We do not take a Ref to the stream as this would cause a Ref cycle.
     // The resolution callback used jointly with m_errorFunction as promise callbacks should protect the stream instead.
     m_errorFunction.set(state.vm(), JSFunction::create(state.vm(), state.callee()->globalObject(), 1, String(), [this](ExecState* state) {
-        storeError(*state);
+        storeError(*state, state->argument(0));
         return JSValue::encode(jsUndefined());
     }));
 }
@@ -195,11 +195,6 @@ void ReadableJSStream::storeException(JSC::ExecState& state)
     storeError(state, exception);
 }
 
-void ReadableJSStream::storeError(JSC::ExecState& exec)
-{
-    storeError(exec, exec.argumentCount() ? exec.argument(0) : createError(&exec, ASCIILiteral("Error function called.")));
-}
-
 void ReadableJSStream::storeError(JSC::ExecState& exec, JSValue error)
 {
     if (m_error)
index 9356562..f9dd36a 100644 (file)
@@ -56,7 +56,7 @@ public:
 
     JSC::JSValue jsController(JSC::ExecState&, JSDOMGlobalObject*);
 
-    void storeError(JSC::ExecState&);
+    void storeError(JSC::ExecState&, JSC::JSValue);
     JSC::JSValue error() override { return m_error.get(); }
 
     void enqueue(JSC::ExecState&);
@@ -68,7 +68,6 @@ private:
 
     JSC::JSPromise* invoke(JSC::ExecState&, const char*);
     void storeException(JSC::ExecState&);
-    void storeError(JSC::ExecState&, JSC::JSValue);
 
     virtual bool hasValue() const override;
     virtual JSC::JSValue read() override;