Changeset 198151 in webkit


Ignore:
Timestamp:
Mar 14, 2016 1:13:30 PM (8 years ago)
Author:
youenn.fablet@crf.canon.fr
Message:

[Fetch API] FetchLoader should check for empty bodies
https://bugs.webkit.org/show_bug.cgi?id=155440

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

  • web-platform-tests/fetch/api/request/request-consume-empty-expected.txt:
  • web-platform-tests/fetch/api/request/request-consume-empty.html:
  • web-platform-tests/fetch/api/response/response-consume-empty-expected.txt:
  • web-platform-tests/fetch/api/response/response-consume-empty.html:

Source/WebCore:

Covered by added tests.

  • Modules/fetch/FetchLoader.cpp:

(WebCore::FetchLoader::didFinishLoading): returning empty array buffer/empty string if no data received during loading.

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r198133 r198151  
     12016-03-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>
     2
     3        [Fetch API] FetchLoader should check for empty bodies
     4        https://bugs.webkit.org/show_bug.cgi?id=155440
     5
     6        Reviewed by Darin Adler.
     7
     8        * web-platform-tests/fetch/api/request/request-consume-empty-expected.txt:
     9        * web-platform-tests/fetch/api/request/request-consume-empty.html:
     10        * web-platform-tests/fetch/api/response/response-consume-empty-expected.txt:
     11        * web-platform-tests/fetch/api/response/response-consume-empty.html:
     12
    1132016-03-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>
    214
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-consume-empty-expected.txt

    r198005 r198151  
    55PASS Consume request's body as json
    66FAIL Consume request's body as formData promise_test: Unhandled rejection with value: undefined
     7PASS Consume empty blob request body as arrayBuffer
     8PASS Consume empty text request body as arrayBuffer
     9PASS Consume empty blob request body as text
     10PASS Consume empty text request body as text
    711
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-consume-empty.html

    r198005 r198151  
    6262    }
    6363
    64     function checkRequestBody(bodyType, checkFunction) {
     64    function checkRequestWithNoBody(bodyType, checkFunction) {
    6565      promise_test(function(test) {
    6666        var request = new Request("", {"method": "POST"});
     
    7171
    7272    var formData = new FormData();
    73     checkRequestBody("text", checkBodyText);
    74     checkRequestBody("blob", checkBodyBlob);
    75     checkRequestBody("arrayBuffer", checkBodyArrayBuffer);
    76     checkRequestBody("json", checkBodyJSON);
    77     checkRequestBody("formData", checkBodyFormData);
     73    checkRequestWithNoBody("text", checkBodyText);
     74    checkRequestWithNoBody("blob", checkBodyBlob);
     75    checkRequestWithNoBody("arrayBuffer", checkBodyArrayBuffer);
     76    checkRequestWithNoBody("json", checkBodyJSON);
     77    checkRequestWithNoBody("formData", checkBodyFormData);
    7878
     79    function checkRequestWithEmptyBody(bodyType, body, asText) {
     80      promise_test(function(test) {
     81        var request = new Request("", {"method": "POST", "body" : body});
     82        assert_false(request.bodyUsed, "bodyUsed is false at init");
     83        if (asText) {
     84          return request.text().then(function(bodyAsString) {
     85            assert_equals(bodyAsString.length, 0, "Resolved value should be empty");
     86            assert_true(request.bodyUsed, "bodyUsed is true after being consumed");
     87          });
     88        }
     89        return request.arrayBuffer().then(function(bodyAsArrayBuffer) {
     90          assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be empty");
     91          assert_true(request.bodyUsed, "bodyUsed is true after being consumed");
     92        });
     93      }, "Consume empty " + bodyType + " request body as " + (asText ? "text" : "arrayBuffer"));
     94    }
     95
     96    // FIXME: Add BufferSource, FormData and URLSearchParams.
     97    checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), false);
     98    checkRequestWithEmptyBody("text", "", false);
     99    checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), true);
     100    checkRequestWithEmptyBody("text", "", true);
    79101    </script>
    80102  </body>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume-empty-expected.txt

    r198005 r198151  
    55PASS Consume response's body as json
    66FAIL Consume response's body as formData promise_test: Unhandled rejection with value: undefined
     7PASS Consume empty blob response body as arrayBuffer
     8PASS Consume empty text response body as arrayBuffer
     9PASS Consume empty blob response body as text
     10PASS Consume empty text response body as text
    711
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume-empty.html

    r198005 r198151  
    6262    }
    6363
    64     function checkResponseBody(bodyType, checkFunction) {
     64    function checkResponseWithNoBody(bodyType, checkFunction) {
    6565      promise_test(function(test) {
    6666        var response = new Response();
     
    7171
    7272    var formData = new FormData();
    73     checkResponseBody("text", checkBodyText);
    74     checkResponseBody("blob", checkBodyBlob);
    75     checkResponseBody("arrayBuffer", checkBodyArrayBuffer);
    76     checkResponseBody("json", checkBodyJSON);
    77     checkResponseBody("formData", checkBodyFormData);
     73    checkResponseWithNoBody("text", checkBodyText);
     74    checkResponseWithNoBody("blob", checkBodyBlob);
     75    checkResponseWithNoBody("arrayBuffer", checkBodyArrayBuffer);
     76    checkResponseWithNoBody("json", checkBodyJSON);
     77    checkResponseWithNoBody("formData", checkBodyFormData);
    7878
     79    function checkResponseWithEmptyBody(bodyType, body, asText) {
     80      promise_test(function(test) {
     81        var response = new Response("", {"method": "POST", "body" : body});
     82        assert_false(response.bodyUsed, "bodyUsed is false at init");
     83        if (asText) {
     84          return response.text().then(function(bodyAsString) {
     85            assert_equals(bodyAsString.length, 0, "Resolved value should be empty");
     86            assert_true(response.bodyUsed, "bodyUsed is true after being consumed");
     87          });
     88        }
     89        return response.arrayBuffer().then(function(bodyAsArrayBuffer) {
     90          assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be empty");
     91          assert_true(response.bodyUsed, "bodyUsed is true after being consumed");
     92        });
     93      }, "Consume empty " + bodyType + " response body as " + (asText ? "text" : "arrayBuffer"));
     94    }
     95
     96    // FIXME: Add BufferSource, FormData and URLSearchParams.
     97    checkResponseWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), false);
     98    checkResponseWithEmptyBody("text", "", false);
     99    checkResponseWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), true);
     100    checkResponseWithEmptyBody("text", "", true);
    79101    </script>
    80102  </body>
  • trunk/Source/WebCore/ChangeLog

    r198145 r198151  
     12016-03-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>
     2
     3        [Fetch API] FetchLoader should check for empty bodies
     4        https://bugs.webkit.org/show_bug.cgi?id=155440
     5
     6        Reviewed by Darin Adler.
     7
     8        Covered by added tests.
     9
     10        * Modules/fetch/FetchLoader.cpp:
     11        (WebCore::FetchLoader::didFinishLoading): returning empty array buffer/empty string if no data received during loading.
     12
    1132016-03-14  Chris Dumez  <cdumez@apple.com>
    214
  • trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp

    r198133 r198151  
    101101{
    102102    if (m_type == Type::ArrayBuffer)
    103         m_client.didFinishLoadingAsArrayBuffer(m_data->createArrayBuffer());
     103        m_client.didFinishLoadingAsArrayBuffer(m_data ? m_data->createArrayBuffer() : ArrayBuffer::create(nullptr, 0));
    104104    else
    105         m_client.didFinishLoadingAsText(TextResourceDecoder::create(ASCIILiteral("text/plain"), "UTF-8")->decodeAndFlush(m_data->data(), m_data->size()));
     105        m_client.didFinishLoadingAsText(m_data ? TextResourceDecoder::create(ASCIILiteral("text/plain"), "UTF-8")->decodeAndFlush(m_data->data(), m_data->size()): String());
    106106    m_data = nullptr;
    107107
Note: See TracChangeset for help on using the changeset viewer.