Changeset 181736 in webkit
- Timestamp:
- Mar 19, 2015 1:27:27 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r181734 r181736 1 2015-03-19 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 [Streams API] Update ReadableStream API according new version of the specification 4 https://bugs.webkit.org/show_bug.cgi?id=142822 5 6 Reviewed by Benjamin Poulain. 7 8 Removing tests checking ready and closed. 9 Removing assertions checking read(), ready, closed and state. 10 Adding assertions to test getReader() and parameters of remaining methods. 11 12 * streams/readablestream-constructor-expected.txt: 13 * streams/readablestream-constructor.html: 14 1 15 2015-03-19 Chris Dumez <cdumez@apple.com> 2 16 -
trunk/LayoutTests/streams/readablestream-constructor-expected.txt
r180559 r181736 1 1 2 2 PASS ReadableStream constructor should get an object as argument 3 PASS ReadableStream can be constructed with no arguments 3 4 PASS ReadableStream instances should have the correct list of properties 4 PASS ReadableStream can be constructed with no arguments5 PASS ReadableStream instances have the correct methods and properties6 PASS ReadableStream ready and closed should always return the same promise object7 5 -
trunk/LayoutTests/streams/readablestream-constructor.html
r180559 r181736 11 11 12 12 test(function() { 13 new ReadableStream(); 14 }, 'ReadableStream can be constructed with no arguments'); 15 16 test(function() { 13 17 rs = new ReadableStream(); 14 assert_array_equals(Object.getOwnPropertyNames(rs), ['closed', 'ready']); 15 assert_array_equals(Object.getOwnPropertyNames(Object.getPrototypeOf(rs)), ['constructor','state', 'read', 'cancel', 'pipeTo', 'pipeThrough']); 16 17 assert_true(Object.getOwnPropertyDescriptor(rs, 'closed').enumerable); 18 assert_false(Object.getOwnPropertyDescriptor(rs, 'closed').configurable); 19 20 assert_true(Object.getOwnPropertyDescriptor(rs, 'ready').enumerable); 21 assert_false(Object.getOwnPropertyDescriptor(rs, 'ready').configurable); 22 23 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'state').enumerable); 24 assert_false(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'state').configurable); 25 26 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'read').enumerable); 27 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'read').configurable); 28 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'read').writable); 18 assert_array_equals(Object.getOwnPropertyNames(rs), []); 19 assert_array_equals(Object.getOwnPropertyNames(Object.getPrototypeOf(rs)), ['constructor','cancel', 'getReader', 'pipeTo', 'pipeThrough']); 29 20 30 21 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'cancel').enumerable); 31 22 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'cancel').configurable); 32 23 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'cancel').writable); 24 25 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'getReader').enumerable); 26 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'getReader').configurable); 27 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'getReader').writable); 33 28 34 29 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'pipeTo').enumerable); … … 39 34 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'pipeThrough').configurable); 40 35 assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rs), 'pipeThrough').writable); 36 37 assert_equals(typeof rs.cancel, 'function', 'has an cancel method'); 38 assert_equals(rs.cancel.length, 1); 39 assert_equals(typeof rs.getReader, 'function', 'has a getReader method'); 40 assert_equals(rs.getReader.length, 0); 41 assert_equals(typeof rs.pipeTo, 'function', 'has a pipeTo method'); 42 assert_equals(rs.pipeTo.length, 2); 43 assert_equals(typeof rs.pipeThrough, 'function', 'has a pipeThrough method'); 44 assert_equals(rs.pipeThrough.length, 2); 45 41 46 }, 'ReadableStream instances should have the correct list of properties'); 42 47 43 // The following two tests are derived from https://github.com/whatwg/streams/blob/master/reference-implementation/test/readable-stream.js44 test(function() {45 new ReadableStream();46 }, 'ReadableStream can be constructed with no arguments');47 48 test(function() {49 rs = new ReadableStream();50 assert_equals(typeof rs.read, 'function', 'has a read method');51 assert_equals(typeof rs.cancel, 'function', 'has an cancel method');52 assert_equals(typeof rs.pipeTo, 'function', 'has a pipeTo method');53 assert_equals(typeof rs.pipeThrough, 'function', 'has a pipeThrough method');54 assert_equals(rs.state, 'waiting', 'state starts out waiting');55 assert_exists(rs, 'ready', 'has a ready property');56 assert_equals(typeof rs.ready.then, 'function', 'ready property is a thenable');57 assert_exists(rs, 'closed', 'has a closed property');58 assert_equals(typeof rs.closed.then, 'function', 'closed property is thenable');59 }, 'ReadableStream instances have the correct methods and properties');60 61 test(function() {62 rs = new ReadableStream();63 readyPromise = rs.ready;64 closedPromise = rs.closed;65 66 assert_equals(readyPromise, rs.ready);67 assert_equals(closedPromise, rs.closed);68 69 // We check ReadableStream properties here as ready and closed promises are persistent and need to be stored in some way that is not observable.70 assert_array_equals(Object.keys(rs), ['closed', 'ready']);71 assert_array_equals(Object.getOwnPropertyNames(rs), ['closed', 'ready']);72 }, 'ReadableStream ready and closed should always return the same promise object');73 74 48 </script> -
trunk/Source/WebCore/ChangeLog
r181729 r181736 1 2015-03-19 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 [Streams API] Update ReadableStream API according new version of the specification 4 https://bugs.webkit.org/show_bug.cgi?id=142822 5 6 Reviewed by Benjamin Poulain. 7 8 This patch updates the IDL of ReadableStream according the new version of the spec, which splits functionality between ReadableStream and ReadableStreamReader. 9 In particular, this patch removes read(), ready, closed and state from ReadableStream and it adds the getReader method. 10 11 Covered by updated readablestream-constructor.html test. 12 13 * Modules/streams/ReadableStream.cpp: 14 (WebCore::ReadableStream::ReadableStream): 15 (WebCore::ReadableStream::state): Deleted. 16 (WebCore::ReadableStream::closed): Deleted. 17 (WebCore::ReadableStream::ready): Deleted. 18 * Modules/streams/ReadableStream.h: 19 (WebCore::ReadableStream::internalState): Added to make mac build system happy, to be used by ReadableStreamReader. 20 * Modules/streams/ReadableStream.idl: 21 * bindings/js/JSReadableStreamCustom.cpp: 22 (WebCore::JSReadableStream::cancel): 23 (WebCore::JSReadableStream::getReader): 24 (WebCore::JSReadableStream::read): Deleted. 25 (WebCore::getOrCreatePromiseDeferredFromObject): Deleted. 26 (WebCore::readyPromiseSlotName): Deleted. 27 (WebCore::JSReadableStream::ready): Deleted. 28 (WebCore::closedPromiseSlotName): Deleted. 29 (WebCore::JSReadableStream::closed): Deleted. 30 1 31 2015-03-18 Manuel Rego Casasnovas <rego@igalia.com> 2 32 -
trunk/Source/WebCore/Modules/streams/ReadableStream.cpp
r180801 r181736 50 50 ReadableStream::ReadableStream(ScriptExecutionContext& scriptExecutionContext, Ref<ReadableStreamSource>&& source) 51 51 : ActiveDOMObject(&scriptExecutionContext) 52 , m_state(State:: Waiting)52 , m_state(State::Readable) 53 53 , m_source(WTF::move(source)) 54 54 { … … 63 63 readableStreamCounter.decrement(); 64 64 #endif 65 }66 67 String ReadableStream::state() const68 {69 switch (m_state) {70 case State::Waiting:71 return ASCIILiteral("waiting");72 case State::Closed:73 return ASCIILiteral("closed");74 case State::Readable:75 return ASCIILiteral("readable");76 case State::Errored:77 return ASCIILiteral("errored");78 }79 ASSERT_NOT_REACHED();80 return ASCIILiteral("");81 }82 83 void ReadableStream::closed(SuccessCallback)84 {85 notImplemented();86 }87 88 void ReadableStream::ready(SuccessCallback)89 {90 notImplemented();91 65 } 92 66 -
trunk/Source/WebCore/Modules/streams/ReadableStream.h
r181262 r181736 50 50 public: 51 51 enum class State { 52 Waiting,52 Readable, 53 53 Closed, 54 Readable,55 54 Errored 56 55 }; … … 59 58 virtual ~ReadableStream(); 60 59 61 // JS API implementation. 62 String state() const; 63 64 typedef std::function<void()> SuccessCallback; 65 void closed(SuccessCallback); 66 void ready(SuccessCallback); 60 State internalState() { return m_state; } 67 61 68 62 private: -
trunk/Source/WebCore/Modules/streams/ReadableStream.idl
r179687 r181736 34 34 Conditional=STREAMS_API 35 35 ] interface ReadableStream { 36 readonly attribute ReadableStreamStateType state; 37 38 [Custom, RaisesException] Object read(); 39 // FIXME: Remove RaisesException once cancel is implemented. 36 // FIXME: Remove RaisesException once methods are actually implemented. 40 37 [Custom, RaisesException] Promise cancel(DOMString reason); 41 // FIXME: Remove RaisesException once pipeTo is implemented.38 [Custom, RaisesException] Object getReader(); 42 39 [Custom, RaisesException] Promise pipeTo(any streams, any options); 43 40 [Custom, RaisesException] Object pipeThrough(any dest, any options); 44 45 [CustomGetter] readonly attribute Promise closed;46 [CustomGetter] readonly attribute Promise ready;47 48 41 }; -
trunk/Source/WebCore/bindings/js/JSReadableStreamCustom.cpp
r181262 r181736 43 43 namespace WebCore { 44 44 45 JSValue JSReadableStream:: read(ExecState* exec)45 JSValue JSReadableStream::cancel(ExecState* exec) 46 46 { 47 JSValue error = createError(exec, ASCIILiteral(" readis not implemented"));47 JSValue error = createError(exec, ASCIILiteral("cancel is not implemented")); 48 48 return exec->vm().throwException(exec, error); 49 49 } 50 50 51 static JSPromiseDeferred* getOrCreatePromiseDeferredFromObject(ExecState* exec, JSValue thisObject, JSGlobalObject* globalObject, PrivateName &name)51 JSValue JSReadableStream::getReader(ExecState* exec) 52 52 { 53 JSValue slot = getInternalSlotFromObject(exec, thisObject, name); 54 JSPromiseDeferred* promiseDeferred = slot ? jsDynamicCast<JSPromiseDeferred*>(slot) : nullptr; 55 56 if (!promiseDeferred) { 57 promiseDeferred = JSPromiseDeferred::create(exec, globalObject); 58 setInternalSlotToObject(exec, thisObject, name, promiseDeferred); 59 } 60 return promiseDeferred; 61 } 62 63 static JSC::PrivateName& readyPromiseSlotName() 64 { 65 static NeverDestroyed<JSC::PrivateName> readyPromiseSlotName("readyPromise"); 66 return readyPromiseSlotName; 67 } 68 69 JSValue JSReadableStream::ready(ExecState* exec) const 70 { 71 JSPromiseDeferred* promiseDeferred = getOrCreatePromiseDeferredFromObject(exec, this, globalObject(), readyPromiseSlotName()); 72 DeferredWrapper wrapper(exec, globalObject(), promiseDeferred); 73 auto successCallback = [wrapper, this]() mutable { 74 wrapper.resolve(&impl()); 75 }; 76 impl().ready(WTF::move(successCallback)); 77 78 return wrapper.promise(); 79 } 80 81 static JSC::PrivateName& closedPromiseSlotName() 82 { 83 static NeverDestroyed<JSC::PrivateName> closedPromiseSlotName("closedPromise"); 84 return closedPromiseSlotName; 85 } 86 87 JSValue JSReadableStream::closed(ExecState* exec) const 88 { 89 JSPromiseDeferred* promiseDeferred = getOrCreatePromiseDeferredFromObject(exec, this, globalObject(), closedPromiseSlotName()); 90 DeferredWrapper wrapper(exec, globalObject(), promiseDeferred); 91 auto successCallback = [wrapper, this]() mutable { 92 wrapper.resolve(&impl()); 93 }; 94 impl().closed(WTF::move(successCallback)); 95 96 return wrapper.promise(); 97 } 98 99 JSValue JSReadableStream::cancel(ExecState* exec) 100 { 101 JSValue error = createError(exec, ASCIILiteral("cancel is not implemented")); 53 JSValue error = createError(exec, ASCIILiteral("getReader is not implemented")); 102 54 return exec->vm().throwException(exec, error); 103 55 }
Note: See TracChangeset
for help on using the changeset viewer.