Changeset 279472 in webkit


Ignore:
Timestamp:
Jul 1, 2021 10:41:51 AM (13 months ago)
Author:
youenn@apple.com
Message:

ReadableStream.getReader do not throw a proper exception when parameter is of wrong type
https://bugs.webkit.org/show_bug.cgi?id=226220
<rdar://problem/78711382>

Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

  • web-platform-tests/streams/readable-streams/default-reader.any-expected.txt:
  • web-platform-tests/streams/readable-streams/default-reader.any.worker-expected.txt:
  • web-platform-tests/streams/readable-streams/general.any-expected.txt:
  • web-platform-tests/streams/readable-streams/general.any.worker-expected.txt:
  • web-platform-tests/streams/readable-streams/templated.any-expected.txt:
  • web-platform-tests/streams/readable-streams/templated.any.worker-expected.txt:

Source/WebCore:

Covered by rebased tests.

  • Modules/streams/ReadableStream.js:

(getReader):
Tighten option parameter check.
In case mode is bad, fire a type error instead of range error.

LayoutTests:

  • streams/readable-stream-getReader-expected.txt:
  • streams/readable-stream-getReader.html:

Update test to match latest spec.

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r279463 r279472  
     12021-07-01  Youenn Fablet  <youenn@apple.com>
     2
     3        ReadableStream.getReader do not throw a proper exception when parameter is of wrong type
     4        https://bugs.webkit.org/show_bug.cgi?id=226220
     5        <rdar://problem/78711382>
     6
     7        Reviewed by Chris Dumez.
     8
     9        * streams/readable-stream-getReader-expected.txt:
     10        * streams/readable-stream-getReader.html:
     11        Update test to match latest spec.
     12
    1132021-07-01  Alan Bujtas  <zalan@apple.com>
    214
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r279461 r279472  
     12021-07-01  Youenn Fablet  <youenn@apple.com>
     2
     3        ReadableStream.getReader do not throw a proper exception when parameter is of wrong type
     4        https://bugs.webkit.org/show_bug.cgi?id=226220
     5        <rdar://problem/78711382>
     6
     7        Reviewed by Chris Dumez.
     8
     9        * web-platform-tests/streams/readable-streams/default-reader.any-expected.txt:
     10        * web-platform-tests/streams/readable-streams/default-reader.any.worker-expected.txt:
     11        * web-platform-tests/streams/readable-streams/general.any-expected.txt:
     12        * web-platform-tests/streams/readable-streams/general.any.worker-expected.txt:
     13        * web-platform-tests/streams/readable-streams/templated.any-expected.txt:
     14        * web-platform-tests/streams/readable-streams/templated.any.worker-expected.txt:
     15
    1162021-07-01  Youenn Fablet  <youenn@apple.com>
    217
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/default-reader.any-expected.txt

    r275824 r279472  
    3030PASS Reading twice on an errored stream
    3131PASS Reading twice on a stream that gets errored
    32 FAIL getReader() should call ToString() on mode assert_throws_js: getReader() should throw function "() => rs.getReader({ mode })" threw object "RangeError: Invalid mode is specified" ("RangeError") expected instance of function "function TypeError() {
    33     [native code]
    34 }" ("TypeError")
     32PASS getReader() should call ToString() on mode
    3533PASS controller.close() should clear the list of pending read requests
    3634
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/default-reader.any.worker-expected.txt

    r275824 r279472  
    3030PASS Reading twice on an errored stream
    3131PASS Reading twice on a stream that gets errored
    32 FAIL getReader() should call ToString() on mode assert_throws_js: getReader() should throw function "() => rs.getReader({ mode })" threw object "RangeError: Invalid mode is specified" ("RangeError") expected instance of function "function TypeError() {
    33     [native code]
    34 }" ("TypeError")
     32PASS getReader() should call ToString() on mode
    3533PASS controller.close() should clear the list of pending read requests
    3634
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/general.any-expected.txt

    r275824 r279472  
    1010PASS ReadableStream start should be called with the proper thisArg
    1111PASS ReadableStream start controller parameter should be extensible
    12 FAIL default ReadableStream getReader() should only accept mode:undefined assert_throws_js: function "() => (new ReadableStream()).getReader({ mode: 'potato' })" threw object "RangeError: Invalid mode is specified" ("RangeError") expected instance of function "function TypeError() {
    13     [native code]
    14 }" ("TypeError")
     12PASS default ReadableStream getReader() should only accept mode:undefined
    1513PASS ReadableStream should be able to call start method within prototype chain of its source
    1614PASS ReadableStream start should be able to return a promise
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/general.any.worker-expected.txt

    r275824 r279472  
    1010PASS ReadableStream start should be called with the proper thisArg
    1111PASS ReadableStream start controller parameter should be extensible
    12 FAIL default ReadableStream getReader() should only accept mode:undefined assert_throws_js: function "() => (new ReadableStream()).getReader({ mode: 'potato' })" threw object "RangeError: Invalid mode is specified" ("RangeError") expected instance of function "function TypeError() {
    13     [native code]
    14 }" ("TypeError")
     12PASS default ReadableStream getReader() should only accept mode:undefined
    1513PASS ReadableStream should be able to call start method within prototype chain of its source
    1614PASS ReadableStream start should be able to return a promise
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/templated.any-expected.txt

    r267647 r279472  
    22PASS Running templatedRSEmpty with ReadableStream (empty)
    33PASS ReadableStream (empty): instances have the correct methods and properties
    4 FAIL ReadableStream (empty): calling getReader with invalid arguments should throw appropriate errors assert_throws_js: empty string mode should throw function "() => rs.getReader({ mode: '' })" threw object "RangeError: Invalid mode is specified" ("RangeError") expected instance of function "function TypeError() {
    5     [native code]
    6 }" ("TypeError")
     4PASS ReadableStream (empty): calling getReader with invalid arguments should throw appropriate errors
    75PASS Running templatedRSEmptyReader with ReadableStream (empty) reader
    86PASS ReadableStream (empty) reader: instances have the correct methods and properties
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/templated.any.worker-expected.txt

    r267647 r279472  
    22PASS Running templatedRSEmpty with ReadableStream (empty)
    33PASS ReadableStream (empty): instances have the correct methods and properties
    4 FAIL ReadableStream (empty): calling getReader with invalid arguments should throw appropriate errors assert_throws_js: empty string mode should throw function "() => rs.getReader({ mode: '' })" threw object "RangeError: Invalid mode is specified" ("RangeError") expected instance of function "function TypeError() {
    5     [native code]
    6 }" ("TypeError")
     4PASS ReadableStream (empty): calling getReader with invalid arguments should throw appropriate errors
    75PASS Running templatedRSEmptyReader with ReadableStream (empty) reader
    86PASS ReadableStream (empty) reader: instances have the correct methods and properties
  • trunk/LayoutTests/streams/readable-stream-getReader-expected.txt

    r267644 r279472  
    22PASS getReader() should return a ReadableStreamDefaultReader
    33PASS getReader({mode: 'byob'}) should return a TypeError as BYOB reader is not yet implemented
    4 PASS getReader({mode: 'aMode'}) should return a RangeError as 'aMode' is different from undefined and 'byob'
     4PASS getReader({mode: 'aMode'}) should return a TypeError as 'aMode' is different from undefined and 'byob'
    55
  • trunk/LayoutTests/streams/readable-stream-getReader.html

    r205248 r279472  
    1919    const rs = new ReadableStream();
    2020    // Any value different from undefined and 'byob' should throw a TypeError.
    21     assert_throws(new RangeError(), function() { rs.getReader({mode : 'aMode'}) });
    22 }, "getReader({mode: 'aMode'}) should return a RangeError as 'aMode' is different from undefined and 'byob'");
     21    assert_throws(new TypeError(), function() { rs.getReader({mode : 'aMode'}) });
     22}, "getReader({mode: 'aMode'}) should return a TypeError as 'aMode' is different from undefined and 'byob'");
    2323</script>
  • trunk/Source/WebCore/ChangeLog

    r279467 r279472  
     12021-07-01  Youenn Fablet  <youenn@apple.com>
     2
     3        ReadableStream.getReader do not throw a proper exception when parameter is of wrong type
     4        https://bugs.webkit.org/show_bug.cgi?id=226220
     5        <rdar://problem/78711382>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Covered by rebased tests.
     10
     11        * Modules/streams/ReadableStream.js:
     12        (getReader):
     13        Tighten option parameter check.
     14        In case mode is bad, fire a type error instead of range error.
     15
    1162021-07-01  Amir Mark Jr  <amir_mark@apple.com>
    217
  • trunk/Source/WebCore/Modules/streams/ReadableStream.js

    r266283 r279472  
    101101        throw @makeThisTypeError("ReadableStream", "getReader");
    102102
    103     if (options === @undefined)
    104          options = { };
    105 
    106     if (options.mode === @undefined)
     103    const mode = @toDictionary(options, { }, "ReadableStream.getReader takes an object as first argument").mode;
     104    if (mode === @undefined)
    107105        return new @ReadableStreamDefaultReader(this);
    108106
    109107    // String conversion is required by spec, hence double equals.
    110     if (options.mode == 'byob')
     108    if (mode == 'byob')
    111109        return new @ReadableStreamBYOBReader(this);
    112110
    113     @throwRangeError("Invalid mode is specified");
     111    @throwTypeError("Invalid mode is specified");
    114112}
    115113
  • trunk/Source/WebCore/Modules/streams/StreamInternals.js

    r268489 r279472  
    195195    return promise;
    196196}
     197
     198function toDictionary(value, defaultValue, errorMessage)
     199{
     200    if (value === @undefined || value === null)
     201        return defaultValue;
     202    if (!@isObject(value))
     203        @throwTypeError(errorMessage);
     204    return value;
     205}
Note: See TracChangeset for help on using the changeset viewer.