Changeset 182344 in webkit
- Timestamp:
- Apr 4, 2015 10:16:21 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r182343 r182344 1 2015-04-04 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 [Streams API] Collecting a ReadableStreamReader should not unlock its stream 4 https://bugs.webkit.org/show_bug.cgi?id=143333 5 6 Reviewed by Benjamin Poulain. 7 8 * streams/readablestreamreader-constructor-expected.txt: 9 * streams/readablestreamreader-constructor.html: 10 1 11 2015-04-04 Yusuke Suzuki <utatane.tea@gmail.com> 2 12 -
trunk/LayoutTests/streams/readablestreamreader-constructor-expected.txt
r182180 r182344 4 4 PASS ReadableStreamReader closed should always return the same promise object 5 5 PASS ReadableStream getReader should throw if ReadableStream is locked 6 PASS Collecting a ReadableStreamReader should not unlock its stream. 6 7 -
trunk/LayoutTests/streams/readablestreamreader-constructor.html
r182180 r182344 2 2 <script src='../resources/testharness.js'></script> 3 3 <script src='../resources/testharnessreport.js'></script> 4 <script src='../resources/gc.js'></script> 4 5 <script> 5 6 … … 83 84 }, 'ReadableStream getReader should throw if ReadableStream is locked'); 84 85 86 test(function() { 87 rs = new ReadableStream({}); 88 rs.getReader(); 89 window.gc(); 90 assert_throws(new TypeError(), function() { rs.getReader(); }); 91 }, 'Collecting a ReadableStreamReader should not unlock its stream.'); 92 85 93 </script> -
trunk/Source/WebCore/ChangeLog
r182342 r182344 1 2015-04-04 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 [Streams API] Collecting a ReadableStreamReader should not unlock its stream 4 https://bugs.webkit.org/show_bug.cgi?id=143333 5 6 Reviewed by Benjamin Poulain. 7 8 This patch stores as a boolean whether the stream is locked to a reader. 9 In case the reader forget to unlock the stream, the reader can be collected and destructor called. 10 In that case, the link between reader and stream will be reset but the stream will remain in locked state. 11 12 Covered by new test in streams/readablestreamreader-constructor.html. 13 14 * Modules/streams/ReadableStream.h: 15 (WebCore::ReadableStream::isLocked): 16 (WebCore::ReadableStream::lock): 17 (WebCore::ReadableStream::release): 18 (WebCore::ReadableStream::releaseButKeepLocked): Introduced to cut the link between reader and stream but stil keeping the stream locked. 19 * Modules/streams/ReadableStreamReader.cpp: 20 (WebCore::ReadableStreamReader::~ReadableStreamReader): 21 * bindings/js/JSReadableStreamCustom.cpp: 22 (WebCore::JSReadableStream::getReader): 23 * bindings/js/JSReadableStreamReaderCustom.cpp: 24 (WebCore::constructJSReadableStreamReader): 25 1 26 2015-04-03 Zan Dobersek <zdobersek@igalia.com> 2 27 -
trunk/Source/WebCore/Modules/streams/ReadableStream.h
r182309 r182344 59 59 60 60 ReadableStreamReader* reader() { return m_reader; } 61 void lock(ReadableStreamReader& reader) { m_reader = &reader; }62 void release() { m_reader = nullptr; }63 61 virtual Ref<ReadableStreamReader> createReader() = 0; 62 63 bool isLocked() const { return m_isLocked; } 64 void lock(ReadableStreamReader&); 65 void release(); 66 void releaseButKeepLocked(); 64 67 65 68 State internalState() { return m_state; } … … 76 79 Ref<ReadableStreamSource> m_source; 77 80 ReadableStreamReader* m_reader { nullptr }; 81 bool m_isLocked { false }; 78 82 }; 83 84 inline void ReadableStream::lock(ReadableStreamReader& reader) 85 { 86 m_reader = &reader; 87 m_isLocked = true; 88 } 89 90 inline void ReadableStream::release() 91 { 92 m_reader = nullptr; 93 m_isLocked = false; 94 } 95 96 inline void ReadableStream::releaseButKeepLocked() 97 { 98 m_reader = nullptr; 99 m_isLocked = true; 100 } 101 102 79 103 80 104 } -
trunk/Source/WebCore/Modules/streams/ReadableStreamReader.cpp
r182309 r182344 58 58 #endif 59 59 if (m_stream) { 60 m_stream->release ();60 m_stream->releaseButKeepLocked(); 61 61 m_stream = nullptr; 62 62 } -
trunk/Source/WebCore/bindings/js/JSReadableStreamCustom.cpp
r182309 r182344 55 55 JSValue JSReadableStream::getReader(ExecState* exec) 56 56 { 57 if (impl(). reader())57 if (impl().isLocked()) 58 58 return exec->vm().throwException(exec, createTypeError(exec, ASCIILiteral("ReadableStream is locked"))); 59 59 return toJS(exec, globalObject(), impl().createReader()); -
trunk/Source/WebCore/bindings/js/JSReadableStreamReaderCustom.cpp
r182180 r182344 107 107 return throwVMError(exec, createTypeError(exec, ASCIILiteral("ReadableStreamReader constructor parameter is not a ReadableStream"))); 108 108 109 if (stream->impl(). reader())109 if (stream->impl().isLocked()) 110 110 return throwVMError(exec, createTypeError(exec, ASCIILiteral("ReadableStreamReader constructor parameter is a locked ReadableStream"))); 111 111
Note: See TracChangeset
for help on using the changeset viewer.