Changeset 205251 in webkit


Ignore:
Timestamp:
Aug 31, 2016 9:36:57 AM (8 years ago)
Author:
commit-queue@webkit.org
Message:

[Fetch API] Response bodyUsed should check for its body disturbed state
https://bugs.webkit.org/show_bug.cgi?id=161429

Patch by Youenn Fablet <youenn@apple.com> on 2016-08-31
Reviewed by Alex Christensen.

Source/WebCore:

Test: http/tests/fetch/bodyUsed-worker.html

Implementing bodyUsed as a JS Builtin.
This allows using directly @isReadableStreamDisturbed if response has a body.

Renaming isDisturbed to isDisturbedOrLocked to better match fetch spec terminology.

  • Modules/fetch/FetchBodyOwner.cpp:

(WebCore::FetchBodyOwner::isDisturbedOrLocked): Renaming isDisturbed to isDisturbedOrLocked.
(WebCore::FetchBodyOwner::arrayBuffer): Ditto.
(WebCore::FetchBodyOwner::blob): Ditto.
(WebCore::FetchBodyOwner::formData): Ditto.
(WebCore::FetchBodyOwner::json): Ditto.
(WebCore::FetchBodyOwner::text): Ditto.
(WebCore::FetchBodyOwner::isDisturbed): Ditto.

  • Modules/fetch/FetchBodyOwner.h:

(WebCore::FetchBodyOwner::isDisturbed): Ditto.

  • Modules/fetch/FetchRequest.cpp:

(WebCore::FetchRequest::initializeWith): Ditto.
(WebCore::FetchRequest::clone): Ditto.

  • Modules/fetch/FetchResponse.cpp:

(WebCore::FetchResponse::cloneForJS): Ditto.
(WebCore::FetchResponse::createReadableStreamSource): Only asserting for isDisturbed.

  • Modules/fetch/FetchResponse.idl: Marking bodyUsed as JS builtin.
  • Modules/fetch/FetchResponse.js: Adding bodyUsed.

(bodyUsed):
(clone):

LayoutTests:

  • http/tests/fetch/bodyUsed-expected.txt: Added.
  • http/tests/fetch/bodyUsed-worker-expected.txt: Added.
  • http/tests/fetch/bodyUsed-worker.html: Added.
  • http/tests/fetch/bodyUsed.js: Added.
  • http/tests/fetch/window/body-mixin-expected.txt:
Location:
trunk
Files:
5 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r205250 r205251  
     12016-08-31  Youenn Fablet  <youenn@apple.com>
     2
     3        [Fetch API] Response bodyUsed should check for its body disturbed state
     4        https://bugs.webkit.org/show_bug.cgi?id=161429
     5
     6        Reviewed by Alex Christensen.
     7
     8        * http/tests/fetch/bodyUsed-expected.txt: Added.
     9        * http/tests/fetch/bodyUsed-worker-expected.txt: Added.
     10        * http/tests/fetch/bodyUsed-worker.html: Added.
     11        * http/tests/fetch/bodyUsed.js: Added.
     12        * http/tests/fetch/window/body-mixin-expected.txt:
     13
    1142016-08-31  Youenn Fablet  <youenn@apple.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r205250 r205251  
     12016-08-31  Youenn Fablet  <youenn@apple.com>
     2
     3        [Fetch API] Response bodyUsed should check for its body disturbed state
     4        https://bugs.webkit.org/show_bug.cgi?id=161429
     5
     6        Reviewed by Alex Christensen.
     7
     8        Test: http/tests/fetch/bodyUsed-worker.html
     9
     10        Implementing bodyUsed as a JS Builtin.
     11        This allows using directly @isReadableStreamDisturbed if response has a body.
     12
     13        Renaming isDisturbed to isDisturbedOrLocked to better match fetch spec terminology.
     14
     15        * Modules/fetch/FetchBodyOwner.cpp:
     16        (WebCore::FetchBodyOwner::isDisturbedOrLocked): Renaming isDisturbed to isDisturbedOrLocked.
     17        (WebCore::FetchBodyOwner::arrayBuffer): Ditto.
     18        (WebCore::FetchBodyOwner::blob): Ditto.
     19        (WebCore::FetchBodyOwner::formData): Ditto.
     20        (WebCore::FetchBodyOwner::json): Ditto.
     21        (WebCore::FetchBodyOwner::text): Ditto.
     22        (WebCore::FetchBodyOwner::isDisturbed): Ditto.
     23        * Modules/fetch/FetchBodyOwner.h:
     24        (WebCore::FetchBodyOwner::isDisturbed): Ditto.
     25        * Modules/fetch/FetchRequest.cpp:
     26        (WebCore::FetchRequest::initializeWith): Ditto.
     27        (WebCore::FetchRequest::clone): Ditto.
     28        * Modules/fetch/FetchResponse.cpp:
     29        (WebCore::FetchResponse::cloneForJS): Ditto.
     30        (WebCore::FetchResponse::createReadableStreamSource): Only asserting for isDisturbed.
     31        * Modules/fetch/FetchResponse.idl: Marking bodyUsed as JS builtin.
     32        * Modules/fetch/FetchResponse.js: Adding bodyUsed.
     33        (bodyUsed):
     34        (clone):
     35
    1362016-08-31  Youenn Fablet  <youenn@apple.com>
    237
  • trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp

    r205250 r205251  
    5959}
    6060
    61 bool FetchBodyOwner::isDisturbed() const
     61bool FetchBodyOwner::isDisturbedOrLocked() const
    6262{
    6363    if (m_isDisturbed)
     
    7878        return;
    7979    }
    80     if (isDisturbed()) {
     80    if (isDisturbedOrLocked()) {
    8181        promise.reject(TypeError);
    8282        return;
     
    9292        return;
    9393    }
    94     if (isDisturbed()) {
     94    if (isDisturbedOrLocked()) {
    9595        promise.reject(TypeError);
    9696        return;
     
    106106        return;
    107107    }
    108     if (isDisturbed()) {
     108    if (isDisturbedOrLocked()) {
    109109        promise.reject(TypeError);
    110110        return;
     
    120120        return;
    121121    }
    122     if (isDisturbed()) {
     122    if (isDisturbedOrLocked()) {
    123123        promise.reject(TypeError);
    124124        return;
     
    134134        return;
    135135    }
    136     if (isDisturbed()) {
     136    if (isDisturbedOrLocked()) {
    137137        promise.reject(TypeError);
    138138        return;
  • trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.h

    r204225 r205251  
    4545
    4646    // Exposed Body API
    47     bool isDisturbed() const;
     47    bool isDisturbed() const { return m_isDisturbed; };
    4848
    4949    void arrayBuffer(DeferredWrapper&&);
     
    5252    void json(DeferredWrapper&&);
    5353    void text(DeferredWrapper&&);
     54
     55    bool isDisturbedOrLocked() const;
    5456
    5557    void loadBlob(Blob&, FetchBodyConsumer*);
  • trunk/Source/WebCore/Modules/fetch/FetchRequest.cpp

    r205115 r205251  
    244244FetchHeaders* FetchRequest::initializeWith(FetchRequest& input, const Dictionary& init, ExceptionCode& ec)
    245245{
    246     if (input.isDisturbed()) {
     246    if (input.isDisturbedOrLocked()) {
    247247        ec = TypeError;
    248248        return nullptr;
     
    309309RefPtr<FetchRequest> FetchRequest::clone(ScriptExecutionContext& context, ExceptionCode& ec)
    310310{
    311     if (isDisturbed()) {
     311    if (isDisturbedOrLocked()) {
    312312        ec = TypeError;
    313313        return nullptr;
  • trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp

    r205115 r205251  
    9898{
    9999    ASSERT(scriptExecutionContext());
    100     ASSERT(!isDisturbed());
     100    ASSERT(!isDisturbedOrLocked());
    101101    return adoptRef(*new FetchResponse(*scriptExecutionContext(), FetchBody(m_body), FetchHeaders::create(headers()), ResourceResponse(m_response)));
    102102}
     
    271271{
    272272    ASSERT(!m_readableStreamSource);
    273     ASSERT(!isDisturbed());
     273    ASSERT(!m_isDisturbed);
    274274
    275275    if (body().isEmpty())
  • trunk/Source/WebCore/Modules/fetch/FetchResponse.idl

    r205110 r205251  
    5555
    5656    // Copy of FetchBody IDL as we want to implement some of these as built-ins.
    57     [ImplementedAs=isDisturbed] readonly attribute boolean bodyUsed;
     57    [JSBuiltin] readonly attribute boolean bodyUsed;
    5858    [JSBuiltin] Promise arrayBuffer();
    5959    [JSBuiltin] Promise blob();
  • trunk/Source/WebCore/Modules/fetch/FetchResponse.js

    r205117 r205251  
    6161}
    6262
     63function bodyUsed()
     64{
     65   if (!(this instanceof @Response))
     66        throw @makeGetterTypeError("Response", "bodyUsed");
     67
     68    if (this.@body)
     69        return @isReadableStreamDisturbed(this.@body);
     70
     71    return @Response.prototype.@isDisturbed.@call(this);
     72}
     73
    6374function body()
    6475{
     
    8495        throw @makeThisTypeError("Response", "clone");
    8596
    86     if (@Response.prototype.@isDisturbed.@call(this))
     97    if (@Response.prototype.@isDisturbed.@call(this) || (this.@body && @isReadableStreamLocked(this.@body)))
    8798        throw new @TypeError("Cannot clone a disturbed Response");
    8899
Note: See TracChangeset for help on using the changeset viewer.