Changeset 183991 in webkit
- Timestamp:
- May 8, 2015 3:44:06 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r183990 r183991 1 2015-05-08 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 [Streams API] ReadableStream constructor start function should be able to error the stream 4 https://bugs.webkit.org/show_bug.cgi?id=141162 5 6 Reviewed by Darin Adler. 7 8 * streams/readable-stream-controller-error-expected.txt: Added. 9 * streams/readable-stream-controller-error.html: Added. 10 * streams/reference-implementation/bad-underlying-sources-expected.txt: 11 * streams/reference-implementation/readable-stream-templated-expected.txt: 12 1 13 2015-05-08 Commit Queue <commit-queue@webkit.org> 2 14 -
trunk/LayoutTests/streams/reference-implementation/bad-underlying-sources-expected.txt
r183395 r183991 22 22 FAIL Underlying source: calling close on an empty canceled stream should not throw cancel is not implemented 23 23 FAIL Underlying source: calling close on a non-empty canceled stream should not throw cancel is not implemented 24 TIMEOUT Underlying source: calling close after error should throw Test timed out 25 TIMEOUT Underlying source: calling error twice should throw the second time Test timed out 24 PASS Underlying source: calling close after error should throw 25 PASS Underlying source: calling error twice should throw the second time 26 26 PASS Underlying source: calling error after close should throw 27 27 -
trunk/LayoutTests/streams/reference-implementation/readable-stream-templated-expected.txt
r183395 r183991 29 29 FAIL cancel() should return a distinct rejected promise each time cancel is not implemented 30 30 FAIL reader cancel() should return a distinct rejected promise each time cancel is not implemented 31 FAIL should be able to acquire multiple readers, since they are all auto-released ReadableStream is locked 31 PASS should be able to acquire multiple readers, since they are all auto-released 32 32 PASS Running templatedRSErrored with ReadableStream (errored via returning a rejected promise in start) 33 33 FAIL getReader() should return a reader that acts errored read is not implemented -
trunk/Source/WebCore/ChangeLog
r183990 r183991 1 2015-05-08 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 [Streams API] ReadableStream constructor start function should be able to error the stream 4 https://bugs.webkit.org/show_bug.cgi?id=141162 5 6 Reviewed by Darin Adler. 7 8 This patch implements the functionality of the ReadableStreamController error function. 9 It basically changes the state of the stream to errored, resolves the ready promise and rejects the closed promise. 10 Adding support to reject promise with any JSValue. 11 12 Support for storing the error is added to both reader and stream. 13 14 Test: streams/readable-stream-controller-error.html and rebased tests 15 16 * Modules/streams/ReadableStream.cpp: 17 (WebCore::ReadableStream::changeStateToErrored): 18 * Modules/streams/ReadableStream.h: 19 * Modules/streams/ReadableStreamReader.cpp: 20 (WebCore::ReadableStreamReader::initialize): 21 (WebCore::ReadableStreamReader::closed): 22 (WebCore::ReadableStreamReader::changeStateToClosed): 23 (WebCore::ReadableStreamReader::changeStateToErrored): 24 * Modules/streams/ReadableStreamReader.h: 25 * bindings/js/JSDOMPromise.h: 26 (WebCore::DeferredWrapper::reject): 27 * bindings/js/JSReadableStreamControllerCustom.cpp: 28 (WebCore::JSReadableStreamController::error): 29 * bindings/js/JSReadableStreamReaderCustom.cpp: 30 (WebCore::JSReadableStreamReader::closed): 31 * bindings/js/ReadableJSStream.cpp: 32 (WebCore::ReadableJSStream::createReader): 33 (WebCore::ReadableJSStream::storeError): 34 (WebCore::ReadableJSStream::Reader::storeError): 35 (WebCore::ReadableJSStream::jsController): Deleted. 36 * bindings/js/ReadableJSStream.h: 37 1 38 2015-05-08 Commit Queue <commit-queue@webkit.org> 2 39 -
trunk/Source/WebCore/Modules/streams/ReadableStream.cpp
r183395 r183991 69 69 } 70 70 71 void ReadableStream::changeStateToErrored() 72 { 73 if (m_state != State::Readable) 74 return; 75 m_state = State::Errored; 76 if (m_reader) 77 m_reader->changeStateToErrored(); 78 ASSERT(!m_reader); 79 } 80 71 81 void ReadableStream::start() 72 82 { -
trunk/Source/WebCore/Modules/streams/ReadableStream.h
r183744 r183991 70 70 void start(); 71 71 void changeStateToClosed(); 72 void changeStateToErrored(); 72 73 73 74 ReadableStreamSource& source() { return m_source.get(); } -
trunk/Source/WebCore/Modules/streams/ReadableStreamReader.cpp
r183395 r183991 70 70 return; 71 71 } 72 if (m_stream->internalState() == ReadableStream::State::Errored) { 73 changeStateToErrored(); 74 return; 75 } 72 76 } 73 77 … … 79 83 } 80 84 81 void ReadableStreamReader::closed(ClosedSuccessCallback successCallback, ClosedErrorCallback )85 void ReadableStreamReader::closed(ClosedSuccessCallback successCallback, ClosedErrorCallback errorCallback) 82 86 { 83 87 if (m_state == State::Closed) { … … 85 89 return; 86 90 } 91 if (m_state == State::Errored) { 92 errorCallback(); 93 return; 94 } 87 95 m_closedSuccessCallback = WTF::move(successCallback); 96 m_closedErrorCallback = WTF::move(errorCallback); 88 97 } 89 98 … … 98 107 } 99 108 ASSERT(!m_closedSuccessCallback); 109 m_closedErrorCallback = nullptr; 110 111 // FIXME: Implement read promise fulfilling. 112 100 113 releaseStream(); 101 // FIXME: Implement read promise fulfilling. 114 } 115 116 void ReadableStreamReader::changeStateToErrored() 117 { 118 ASSERT(m_state == State::Readable); 119 m_state = State::Errored; 120 121 if (m_closedErrorCallback) { 122 ClosedErrorCallback closedErrorCallback = WTF::move(m_closedErrorCallback); 123 closedErrorCallback(); 124 } 125 ASSERT(!m_closedErrorCallback); 126 m_closedSuccessCallback = nullptr; 127 128 // FIXME: Implement read promise rejection. 129 130 releaseStream(); 102 131 } 103 132 -
trunk/Source/WebCore/Modules/streams/ReadableStreamReader.h
r183395 r183991 37 37 #include "ScriptWrappable.h" 38 38 #include <functional> 39 #include <runtime/JSCJSValue.h> 39 40 #include <wtf/Ref.h> 40 41 #include <wtf/RefCounted.h> … … 62 63 63 64 void changeStateToClosed(); 65 void changeStateToErrored(); 66 67 virtual JSC::JSValue error() = 0; 64 68 65 69 protected: … … 78 82 79 83 ClosedSuccessCallback m_closedSuccessCallback; 84 ClosedErrorCallback m_closedErrorCallback; 80 85 }; 81 86 -
trunk/Source/WebCore/bindings/js/JSDOMPromise.h
r183395 r183991 83 83 84 84 template<> 85 inline void DeferredWrapper::reject(const JSC::JSValue& value) 86 { 87 JSC::ExecState* exec = m_globalObject->globalExec(); 88 JSC::JSLockHolder locker(exec); 89 reject(exec, value); 90 } 91 92 template<> 85 93 inline void DeferredWrapper::resolve<String>(const String& result) 86 94 { -
trunk/Source/WebCore/bindings/js/JSReadableStreamControllerCustom.cpp
r183866 r183991 63 63 if (stream.internalState() != ReadableStream::State::Readable) 64 64 return exec->vm().throwException(exec, createTypeError(exec, ASCIILiteral("Calling error on a stream which is not readable"))); 65 notImplemented();65 stream.storeError(*exec); 66 66 return jsUndefined(); 67 67 } -
trunk/Source/WebCore/bindings/js/JSReadableStreamReaderCustom.cpp
r183866 r183991 76 76 }; 77 77 auto failureCallback = [this, wrapper]() mutable { 78 // FIXME: return stored error. 79 wrapper.reject(&impl()); 78 wrapper.reject(impl().error()); 80 79 }; 81 80 -
trunk/Source/WebCore/bindings/js/ReadableJSStream.cpp
r183866 r183991 142 142 Ref<ReadableStreamReader> ReadableJSStream::createReader() 143 143 { 144 return Reader::create(*this); 144 Ref<Reader> reader = Reader::create(*this); 145 if (m_error) 146 reader->storeError(*jsSource().globalObject()->globalExec(), m_error.get()); 147 return static_reference_cast<ReadableStreamReader>(reader); 145 148 } 146 149 … … 162 165 } 163 166 167 void ReadableJSStream::storeError(JSC::ExecState& exec) 168 { 169 if (m_error) 170 return; 171 JSValue error = exec.argumentCount() ? exec.argument(0) : createError(&exec, ASCIILiteral("Error function called.")); 172 m_error.set(exec.vm(), error); 173 174 if (auto reader = static_cast<Reader*>(this->reader())) 175 reader->storeError(exec, error); 176 177 changeStateToErrored(); 178 } 179 164 180 Ref<ReadableJSStream::Reader> ReadableJSStream::Reader::create(ReadableJSStream& stream) 165 181 { … … 172 188 } 173 189 190 void ReadableJSStream::Reader::storeError(JSC::ExecState& exec, JSValue error) 191 { 192 m_error.set(exec.vm(), error); 193 } 194 174 195 } // namespace WebCore 175 196 -
trunk/Source/WebCore/bindings/js/ReadableJSStream.h
r183866 r183991 52 52 public: 53 53 static Ref<Reader> create(ReadableJSStream&); 54 void storeError(JSC::ExecState&, JSC::JSValue); 55 JSC::JSValue error() { return m_error.get(); } 56 54 57 private: 55 58 explicit Reader(ReadableJSStream&); 59 60 JSC::Strong<JSC::Unknown> m_error; 56 61 }; 57 62 … … 76 81 JSC::JSValue jsController(JSC::ExecState&, JSDOMGlobalObject*); 77 82 83 void storeError(JSC::ExecState&); 84 JSC::JSValue error() { return m_error.get(); } 85 78 86 private: 79 87 ReadableJSStream(ScriptExecutionContext&, Ref<ReadableJSStream::Source>&&); 80 88 81 89 std::unique_ptr<ReadableStreamController> m_controller; 90 JSC::Strong<JSC::Unknown> m_error; 82 91 }; 83 92
Note: See TracChangeset
for help on using the changeset viewer.