Title: [203726] trunk
Revision
203726
Author
[email protected]
Date
2016-07-26 10:13:38 -0700 (Tue, 26 Jul 2016)

Log Message

Unreviewed, rolling out r203719.
https://bugs.webkit.org/show_bug.cgi?id=160200

It is breaking win build (Requested by youenn on #webkit).

Reverted changeset:

"[Fetch API] Response constructor should be able to take a
ReadableStream as body"
https://bugs.webkit.org/show_bug.cgi?id=159804
http://trac.webkit.org/changeset/203719

Modified Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (203725 => 203726)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2016-07-26 17:13:38 UTC (rev 203726)
@@ -1,3 +1,17 @@
+2016-07-26  Commit Queue  <[email protected]>
+
+        Unreviewed, rolling out r203719.
+        https://bugs.webkit.org/show_bug.cgi?id=160200
+
+        It is breaking win build (Requested by youenn on #webkit).
+
+        Reverted changeset:
+
+        "[Fetch API] Response constructor should be able to take a
+        ReadableStream as body"
+        https://bugs.webkit.org/show_bug.cgi?id=159804
+        http://trac.webkit.org/changeset/203719
+
 2016-07-26  Youenn Fablet  <[email protected]>
 
         Remove ClientCredentialPolicy cross-origin option from ResourceLoaderOptions

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume-empty-expected.txt (203725 => 203726)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume-empty-expected.txt	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume-empty-expected.txt	2016-07-26 17:13:38 UTC (rev 203726)
@@ -3,7 +3,7 @@
 PASS Consume response's body as blob 
 PASS Consume response's body as arrayBuffer 
 PASS Consume response's body as json 
-FAIL Consume response's body as formData promise_test: Unhandled rejection with value: "Not implemented"
+FAIL Consume response's body as formData promise_test: Unhandled rejection with value: undefined
 PASS Consume empty blob response body as arrayBuffer 
 PASS Consume empty text response body as arrayBuffer 
 PASS Consume empty blob response body as text 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume-expected.txt (203725 => 203726)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume-expected.txt	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume-expected.txt	2016-07-26 17:13:38 UTC (rev 203726)
@@ -3,13 +3,9 @@
 PASS Consume response's body as blob 
 PASS Consume response's body as arrayBuffer 
 PASS Consume response's body as json 
-FAIL Consume response's body as formData promise_test: Unhandled rejection with value: "Not implemented"
+FAIL Consume response's body as formData promise_test: Unhandled rejection with value: undefined
 PASS Consume blob response's body as blob 
 PASS Consume blob response's body as text 
 PASS Consume blob response's body as json 
 PASS Consume blob response's body as arrayBuffer 
-PASS Consume stream response's body as blob 
-PASS Consume stream response's body as text 
-PASS Consume stream response's body as json 
-PASS Consume stream response's body as arrayBuffer 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume.html (203725 => 203726)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume.html	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-consume.html	2016-07-26 17:13:38 UTC (rev 203726)
@@ -92,25 +92,6 @@
     checkBlobResponseBody(blob, textData, "json", checkBodyJSON);
     checkBlobResponseBody(blob, textData, "arrayBuffer", checkBodyArrayBuffer);
 
-    function checkReadableStreamResponseBody(streamData, bodyType, checkFunction) {
-      promise_test(function(test) {
-        var stream = new ReadableStream({
-          start: function(controller) {
-            controller.enqueue((stringToArray(streamData)));
-            controller.close();
-          }
-        });
-        var response = new Response(stream);
-        assert_false(response.bodyUsed, "bodyUsed is false at init");
-        return checkFunction(response, streamData);
-      }, "Consume stream response's body as " + bodyType);
-    }
-
-    checkReadableStreamResponseBody(textData, "blob", checkBodyBlob);
-    checkReadableStreamResponseBody(textData, "text", checkBodyText);
-    checkReadableStreamResponseBody(textData, "json", checkBodyJSON);
-    checkReadableStreamResponseBody(textData, "arrayBuffer", checkBodyArrayBuffer);
-
     </script>
   </body>
 </html>

Modified: trunk/Source/WebCore/CMakeLists.txt (203725 => 203726)


--- trunk/Source/WebCore/CMakeLists.txt	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/CMakeLists.txt	2016-07-26 17:13:38 UTC (rev 203726)
@@ -818,7 +818,6 @@
 
     Modules/fetch/DOMWindowFetch.cpp
     Modules/fetch/FetchBody.cpp
-    Modules/fetch/FetchBodyConsumer.cpp
     Modules/fetch/FetchBodyOwner.cpp
     Modules/fetch/FetchHeaders.cpp
     Modules/fetch/FetchLoader.cpp

Modified: trunk/Source/WebCore/ChangeLog (203725 => 203726)


--- trunk/Source/WebCore/ChangeLog	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/ChangeLog	2016-07-26 17:13:38 UTC (rev 203726)
@@ -1,3 +1,17 @@
+2016-07-26  Commit Queue  <[email protected]>
+
+        Unreviewed, rolling out r203719.
+        https://bugs.webkit.org/show_bug.cgi?id=160200
+
+        It is breaking win build (Requested by youenn on #webkit).
+
+        Reverted changeset:
+
+        "[Fetch API] Response constructor should be able to take a
+        ReadableStream as body"
+        https://bugs.webkit.org/show_bug.cgi?id=159804
+        http://trac.webkit.org/changeset/203719
+
 2016-07-26  John Wilander  <[email protected]>
 
         Stop supporting compressed character sets BOCU-1 and SCSU

Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.cpp (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchBody.cpp	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.cpp	2016-07-26 17:13:38 UTC (rev 203726)
@@ -39,11 +39,12 @@
 #include "HTTPParsers.h"
 #include "JSBlob.h"
 #include "JSDOMFormData.h"
-#include "JSReadableStream.h"
 #include "ReadableStreamSource.h"
 
 namespace WebCore {
 
+static Ref<Blob> blobFromArrayBuffer(ArrayBuffer*, const String&);
+
 FetchBody::FetchBody(Ref<Blob>&& blob)
     : m_type(Type::Blob)
     , m_mimeType(blob->type())
@@ -74,8 +75,6 @@
         return FetchBody(*JSDOMFormData::toWrapped(value));
     if (value.isString())
         return FetchBody(value.toWTFString(&state));
-    if (value.inherits(JSReadableStream::info()))
-        return { Type::ReadableStream };
     return { };
 }
 
@@ -90,16 +89,13 @@
 void FetchBody::arrayBuffer(FetchBodyOwner& owner, DeferredWrapper&& promise)
 {
     ASSERT(m_type != Type::None);
-    m_consumer.setType(FetchBodyConsumer::Type::ArrayBuffer);
-    consume(owner, WTFMove(promise));
+    consume(owner, Consumer::Type::ArrayBuffer, WTFMove(promise));
 }
 
 void FetchBody::blob(FetchBodyOwner& owner, DeferredWrapper&& promise)
 {
     ASSERT(m_type != Type::None);
-    m_consumer.setType(FetchBodyConsumer::Type::Blob);
-    m_consumer.setContentType(Blob::normalizedContentType(extractMIMETypeFromMediaType(m_mimeType)));
-    consume(owner, WTFMove(promise));
+    consume(owner, Consumer::Type::Blob, WTFMove(promise));
 }
 
 void FetchBody::json(FetchBodyOwner& owner, DeferredWrapper&& promise)
@@ -110,8 +106,7 @@
         fulfillPromiseWithJSON(promise, m_text);
         return;
     }
-    m_consumer.setType(FetchBodyConsumer::Type::JSON);
-    consume(owner, WTFMove(promise));
+    consume(owner, Consumer::Type::JSON, WTFMove(promise));
 }
 
 void FetchBody::text(FetchBodyOwner& owner, DeferredWrapper&& promise)
@@ -122,95 +117,113 @@
         promise.resolve(m_text);
         return;
     }
-    m_consumer.setType(FetchBodyConsumer::Type::Text);
-    consume(owner, WTFMove(promise));
+    consume(owner, Consumer::Type::Text, WTFMove(promise));
 }
 
-void FetchBody::consume(FetchBodyOwner& owner, DeferredWrapper&& promise)
+void FetchBody::consume(FetchBodyOwner& owner, Consumer::Type type, DeferredWrapper&& promise)
 {
-    // This should be handled by FetchBodyOwner
-    ASSERT(m_type != Type::None);
-    // This should be handled by JS built-ins
-    ASSERT(m_type != Type::ReadableStream);
-
-    switch (m_type) {
-    case Type::ArrayBuffer:
-        consumeArrayBuffer(promise);
+    if (m_type == Type::ArrayBuffer) {
+        consumeArrayBuffer(type, promise);
         return;
-    case Type::Text:
-        consumeText(promise);
+    }
+    if (m_type == Type::Text) {
+        consumeText(type, promise);
         return;
-    case Type::Blob:
-        consumeBlob(owner, WTFMove(promise));
+    }
+    if (m_type == Type::Blob) {
+        consumeBlob(owner, type, WTFMove(promise));
         return;
-    case Type::Loading:
-        m_consumePromise = WTFMove(promise);
+    }
+    if (m_type == Type::Loading) {
+        // FIXME: We should be able to change the loading type to text if consumer type is JSON or Text.
+        m_consumer = Consumer({type, WTFMove(promise)});
         return;
-    case Type::Loaded:
-        m_consumer.resolve(promise);
-        return;
-    default:
-        // FIXME: Support other types.
-        promise.reject(0);
     }
+
+    // FIXME: Support other types.
+    promise.reject(0);
 }
 
 #if ENABLE(STREAMS_API)
 void FetchBody::consumeAsStream(FetchBodyOwner& owner, FetchResponseSource& source)
 {
-    // This should be handled by FetchResponse
     ASSERT(m_type != Type::Loading);
-    // This should be handled by JS built-ins
-    ASSERT(m_type != Type::ReadableStream);
 
-    bool closeStream = false;
     switch (m_type) {
     case Type::ArrayBuffer:
         ASSERT(m_data);
-        closeStream = source.enqueue(RefPtr<JSC::ArrayBuffer>(m_data));
-        break;
+        if (source.enqueue(RefPtr<JSC::ArrayBuffer>(m_data)))
+            source.close();
+        return;
     case Type::Text: {
         Vector<uint8_t> data = ""
-        closeStream = source.enqueue(ArrayBuffer::tryCreate(data.data(), data.size()));
-        break;
+        if (source.enqueue(ArrayBuffer::tryCreate(data.data(), data.size())))
+            source.close();
+        return;
     }
     case Type::Blob:
         ASSERT(m_blob);
-        owner.loadBlob(*m_blob, nullptr);
-        break;
+        owner.loadBlob(*m_blob, FetchLoader::Type::Stream);
+        return;
     case Type::None:
-        closeStream = true;
-        break;
-    case Type::Loaded: {
-        closeStream = source.enqueue(m_consumer.takeAsArrayBuffer());
-        break;
-    }
+        source.close();
+        return;
     default:
         source.error(ASCIILiteral("not implemented"));
     }
-
-    if (closeStream)
-        source.close();
 }
 #endif
 
-void FetchBody::consumeArrayBuffer(DeferredWrapper& promise)
+void FetchBody::consumeArrayBuffer(Consumer::Type type, DeferredWrapper& promise)
 {
-    m_consumer.resolveWithData(promise, static_cast<const uint8_t*>(m_data->data()), m_data->byteLength());
+    if (type == Consumer::Type::ArrayBuffer) {
+        fulfillPromiseWithArrayBuffer(promise, m_data.get());
+        return;
+    }
+    if (type == Consumer::Type::Blob) {
+        promise.resolve(blobFromArrayBuffer(m_data.get(), Blob::normalizedContentType(extractMIMETypeFromMediaType(m_mimeType))));
+        return;
+    }
+
+    ASSERT(type == Consumer::Type::Text || type == Consumer::Type::JSON);
+    // FIXME: Do we need TextResourceDecoder to create a String to decode UTF-8 data.
+    fulfillTextPromise(type, TextResourceDecoder::create(ASCIILiteral("text/plain"), "UTF-8")->decodeAndFlush(static_cast<const char*>(m_data->data()), m_data->byteLength()), promise);
 }
 
-void FetchBody::consumeText(DeferredWrapper& promise)
+void FetchBody::consumeText(Consumer::Type type, DeferredWrapper& promise)
 {
-    Vector<uint8_t> data = ""
-    m_consumer.resolveWithData(promise, data.data(), data.size());
+    ASSERT(type == Consumer::Type::ArrayBuffer || type == Consumer::Type::Blob);
+
+    if (type == Consumer::Type::ArrayBuffer) {
+        Vector<uint8_t> data = ""
+        fulfillPromiseWithArrayBuffer(promise, data.data(), data.size());
+        return;
+    }
+    String contentType = Blob::normalizedContentType(extractMIMETypeFromMediaType(m_mimeType));
+    promise.resolve(Blob::create(extractFromText(), contentType));
 }
 
-void FetchBody::consumeBlob(FetchBodyOwner& owner, DeferredWrapper&& promise)
+FetchLoader::Type FetchBody::loadingType(Consumer::Type type)
 {
+    switch (type) {
+    case Consumer::Type::JSON:
+    case Consumer::Type::Text:
+        return FetchLoader::Type::Text;
+    case Consumer::Type::Blob:
+    case Consumer::Type::ArrayBuffer:
+        return FetchLoader::Type::ArrayBuffer;
+    default:
+        ASSERT_NOT_REACHED();
+        return FetchLoader::Type::ArrayBuffer;
+    };
+}
+
+void FetchBody::consumeBlob(FetchBodyOwner& owner, Consumer::Type type, DeferredWrapper&& promise)
+{
     ASSERT(m_blob);
 
-    m_consumePromise = WTFMove(promise);
-    owner.loadBlob(*m_blob, &m_consumer);
+    m_consumer = Consumer({type, WTFMove(promise)});
+    owner.loadBlob(*m_blob, loadingType(type));
 }
 
 Vector<uint8_t> FetchBody::extractFromText() const
@@ -223,23 +236,65 @@
     return value;
 }
 
+static inline Ref<Blob> blobFromArrayBuffer(ArrayBuffer* buffer, const String& contentType)
+{
+    if (!buffer)
+        return Blob::create(Vector<uint8_t>(), contentType);
+
+    // FIXME: We should try to move buffer to Blob without doing this copy.
+    Vector<uint8_t> value(buffer->byteLength());
+    memcpy(value.data(), buffer->data(), buffer->byteLength());
+    return Blob::create(WTFMove(value), contentType);
+}
+
+void FetchBody::fulfillTextPromise(FetchBody::Consumer::Type type, const String& text, DeferredWrapper& promise)
+{
+    ASSERT(type == Consumer::Type::Text || type == Consumer::Type::JSON);
+    if (type == FetchBody::Consumer::Type::Text)
+        promise.resolve(text);
+    else
+        fulfillPromiseWithJSON(promise, text);
+}
+
 void FetchBody::loadingFailed()
 {
-    if (m_consumePromise) {
-        m_consumePromise->reject(0);
-        m_consumePromise = Nullopt;
-    }
+    ASSERT(m_consumer);
+    m_consumer->promise.reject(0);
+    m_consumer = Nullopt;
 }
 
-void FetchBody::loadingSucceeded()
+void FetchBody::loadedAsArrayBuffer(RefPtr<ArrayBuffer>&& buffer)
 {
-    m_type = m_consumer.hasData() ? Type::Loaded : Type::None;
-    if (m_consumePromise) {
-        m_consumer.resolve(*m_consumePromise);
-        m_consumePromise = Nullopt;
+    if (m_type == Type::Loading) {
+        m_type = Type::ArrayBuffer;
+        m_data = buffer;
+        if (m_consumer) {
+            consumeArrayBuffer(m_consumer->type, m_consumer->promise);
+            m_consumer = Nullopt;
+        }
+        return;
     }
+
+    ASSERT(m_consumer);
+    ASSERT(m_consumer->type == Consumer::Type::Blob || m_consumer->type == Consumer::Type::ArrayBuffer);
+    if (m_consumer->type == Consumer::Type::ArrayBuffer)
+        fulfillPromiseWithArrayBuffer(m_consumer->promise, buffer.get());
+    else {
+        ASSERT(m_blob);
+        m_consumer->promise.resolve(blobFromArrayBuffer(buffer.get(), m_blob->type()));
+    }
+    m_consumer = Nullopt;
 }
 
+void FetchBody::loadedAsText(String&& text)
+{
+    ASSERT(m_consumer);
+    ASSERT(m_consumer->type == Consumer::Type::Text || m_consumer->type == Consumer::Type::JSON);
+
+    fulfillTextPromise(m_consumer->type, text, m_consumer->promise);
+    m_consumer = Nullopt;
+}
+
 RefPtr<FormData> FetchBody::bodyForInternalRequest() const
 {
     if (m_type == Type::None)

Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.h (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchBody.h	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.h	2016-07-26 17:13:38 UTC (rev 203726)
@@ -33,7 +33,6 @@
 
 #include "Blob.h"
 #include "DOMFormData.h"
-#include "FetchBodyConsumer.h"
 #include "FetchLoader.h"
 #include "JSDOMPromise.h"
 
@@ -71,15 +70,14 @@
     FetchBody() = default;
 
     void loadingFailed();
-    void loadingSucceeded();
+    void loadedAsArrayBuffer(RefPtr<ArrayBuffer>&&);
+    void loadedAsText(String&&);
 
     RefPtr<FormData> bodyForInternalRequest() const;
 
-    enum class Type { None, ArrayBuffer, Blob, FormData, Text, Loading, Loaded, ReadableStream };
+    enum class Type { None, ArrayBuffer, Loading, Text, Blob, FormData };
     Type type() const { return m_type; }
 
-    FetchBodyConsumer& consumer() { return m_consumer; }
-
 private:
     FetchBody(Ref<Blob>&&);
     FetchBody(Ref<DOMFormData>&&);
@@ -86,12 +84,21 @@
     FetchBody(String&&);
     FetchBody(Type type) : m_type(type) { }
 
-    void consume(FetchBodyOwner&, DeferredWrapper&&);
+    struct Consumer {
+        enum class Type { Text, Blob, JSON, ArrayBuffer };
 
+        Type type;
+        DeferredWrapper promise;
+    };
+    void consume(FetchBodyOwner&, Consumer::Type, DeferredWrapper&&);
+
     Vector<uint8_t> extractFromText() const;
-    void consumeArrayBuffer(DeferredWrapper&);
-    void consumeText(DeferredWrapper&);
-    void consumeBlob(FetchBodyOwner&, DeferredWrapper&&);
+    void consumeArrayBuffer(Consumer::Type, DeferredWrapper&);
+    void consumeText(Consumer::Type, DeferredWrapper&);
+    void consumeBlob(FetchBodyOwner&, Consumer::Type, DeferredWrapper&&);
+    static FetchLoader::Type loadingType(Consumer::Type);
+    static void fulfillTextPromise(FetchBody::Consumer::Type, const String&, DeferredWrapper&);
+    static void fulfillArrayBufferPromise(FetchBody::Consumer::Type, const String&, DeferredWrapper&);
 
     Type m_type { Type::None };
     String m_mimeType;
@@ -102,8 +109,7 @@
     RefPtr<ArrayBuffer> m_data;
     String m_text;
 
-    FetchBodyConsumer m_consumer { FetchBodyConsumer::Type::None };
-    Optional<DeferredWrapper> m_consumePromise;
+    Optional<Consumer> m_consumer;
 };
 
 } // namespace WebCore

Deleted: trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp	2016-07-26 17:13:38 UTC (rev 203726)
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2016 Apple Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted, provided that the following conditions
- * are required to be met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Inc. nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. AND ITS CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "FetchBodyConsumer.h"
-
-#if ENABLE(FETCH_API)
-
-#include "JSBlob.h"
-#include "JSDOMPromise.h"
-
-namespace WebCore {
-
-static inline Ref<Blob> blobFromData(const unsigned char* data, unsigned length, const String& contentType)
-{
-    Vector<uint8_t> value(length);
-    memcpy(value.data(), data, length);
-    return Blob::create(WTFMove(value), contentType);
-}
-
-void FetchBodyConsumer::resolveWithData(DeferredWrapper& promise, const unsigned char* data, unsigned length)
-{
-    switch (m_type) {
-    case Type::ArrayBuffer:
-        fulfillPromiseWithArrayBuffer(promise, data, length);
-        return;
-    case Type::Blob:
-        promise.resolveWithNewlyCreated(blobFromData(data, length, m_contentType));
-        return;
-    case Type::JSON:
-        fulfillPromiseWithJSON(promise, String(data, length));
-        return;
-    case Type::Text:
-        promise.resolve(String(data, length));
-        return;
-    case Type::None:
-        ASSERT_NOT_REACHED();
-        return;
-    }
-}
-
-void FetchBodyConsumer::resolve(DeferredWrapper& promise)
-{
-    ASSERT(m_type != Type::None);
-    switch (m_type) {
-    case Type::ArrayBuffer:
-        fulfillPromiseWithArrayBuffer(promise, takeAsArrayBuffer().get());
-        return;
-    case Type::Blob:
-        promise.resolveWithNewlyCreated(takeAsBlob());
-        return;
-    case Type::JSON:
-        fulfillPromiseWithJSON(promise, takeAsText());
-        return;
-    case Type::Text:
-        promise.resolve(takeAsText());
-        return;
-    case Type::None:
-        ASSERT_NOT_REACHED();
-        return;
-    }
-}
-
-void FetchBodyConsumer::append(const char* data, unsigned length)
-{
-    if (!m_buffer) {
-        m_buffer = SharedBuffer::create(data, length);
-        return;
-    }
-    m_buffer->append(data, length);
-}
-
-void FetchBodyConsumer::append(const unsigned char* data, unsigned length)
-{
-    append(reinterpret_cast<const char*>(data), length);
-}
-
-RefPtr<SharedBuffer> FetchBodyConsumer::takeData()
-{
-    return WTFMove(m_buffer);
-}
-
-RefPtr<JSC::ArrayBuffer> FetchBodyConsumer::takeAsArrayBuffer()
-{
-    if (!m_buffer)
-        return ArrayBuffer::tryCreate(nullptr, 0);
-
-    auto arrayBuffer = m_buffer->createArrayBuffer();
-    m_buffer = nullptr;
-    return arrayBuffer;
-}
-
-Ref<Blob> FetchBodyConsumer::takeAsBlob()
-{
-    ASSERT(m_buffer);
-    if (!m_buffer)
-        return Blob::create();
-
-    // FIXME: We should try to move m_buffer to Blob without doing extra copy.
-    return blobFromData(reinterpret_cast<const unsigned char*>(m_buffer->data()), m_buffer->size(), m_contentType);
-}
-
-String FetchBodyConsumer::takeAsText()
-{
-    if (!m_buffer)
-        return String();
-
-    auto text = String(m_buffer->data(), m_buffer->size());
-    m_buffer = nullptr;
-    return text;
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(FETCH_API)

Deleted: trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.h (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.h	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.h	2016-07-26 17:13:38 UTC (rev 203726)
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2016 Apple Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted, provided that the following conditions
- * are required to be met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Inc. nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. AND ITS CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(FETCH_API)
-
-#include "SharedBuffer.h"
-
-namespace WebCore {
-
-class Blob;
-class DeferredWrapper;
-
-class FetchBodyConsumer {
-public:
-    // Type is used in FetchResponse.js and should be kept synchronized with it.
-    enum class Type { None, ArrayBuffer, Blob, JSON, Text };
-
-    FetchBodyConsumer(Type type) : m_type(type) { }
-
-    void append(const char* data, unsigned);
-    void append(const unsigned char* data, unsigned);
-
-    RefPtr<SharedBuffer> takeData();
-    RefPtr<JSC::ArrayBuffer> takeAsArrayBuffer();
-    Ref<Blob> takeAsBlob();
-    String takeAsText();
-
-    void setContentType(const String& contentType) { m_contentType = contentType; }
-    void setType(Type type) { m_type = type; }
-
-    void clean() { m_buffer = nullptr; }
-
-    void resolve(DeferredWrapper&);
-    void resolveWithData(DeferredWrapper&, const unsigned char*, unsigned);
-
-    bool hasData() const { return !!m_buffer; }
-
-private:
-    Type m_type;
-    String m_contentType;
-    RefPtr<SharedBuffer> m_buffer;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(FETCH_API)

Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp	2016-07-26 17:13:38 UTC (rev 203726)
@@ -138,7 +138,7 @@
     m_body.text(*this, WTFMove(promise));
 }
 
-void FetchBodyOwner::loadBlob(Blob& blob, FetchBodyConsumer* consumer)
+void FetchBodyOwner::loadBlob(Blob& blob, FetchLoader::Type type)
 {
     // Can only be called once for a body instance.
     ASSERT(isDisturbed());
@@ -150,7 +150,7 @@
     }
 
     m_blobLoader = { *this };
-    m_blobLoader->loader = std::make_unique<FetchLoader>(*m_blobLoader, consumer);
+    m_blobLoader->loader = std::make_unique<FetchLoader>(type, *m_blobLoader);
 
     m_blobLoader->loader->start(*scriptExecutionContext(), blob);
     if (!m_blobLoader->loader->isStarted()) {
@@ -169,6 +169,11 @@
     unsetPendingActivity(this);
 }
 
+void FetchBodyOwner::loadedBlobAsText(String&& text)
+{
+    m_body.loadedAsText(WTFMove(text));
+}
+
 void FetchBodyOwner::blobLoadingSucceeded()
 {
     ASSERT(m_body.type() == FetchBody::Type::Blob);
@@ -179,7 +184,7 @@
         m_readableStreamSource = nullptr;
     }
 #endif
-    m_body.loadingSucceeded();
+
     finishBlobLoading();
 }
 

Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.h (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.h	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.h	2016-07-26 17:13:38 UTC (rev 203726)
@@ -52,7 +52,7 @@
     void json(DeferredWrapper&&);
     void text(DeferredWrapper&&);
 
-    void loadBlob(Blob&, FetchBodyConsumer*);
+    void loadBlob(Blob&, FetchLoader::Type);
 
     bool isActive() const { return !!m_blobLoader; }
 
@@ -67,6 +67,8 @@
 
 private:
     // Blob loading routines
+    void loadedBlobAsText(String&&);
+    void loadedBlobAsArrayBuffer(RefPtr<ArrayBuffer>&& buffer) { m_body.loadedAsArrayBuffer(WTFMove(buffer)); }
     void blobChunk(const char*, size_t);
     void blobLoadingSucceeded();
     void blobLoadingFailed();
@@ -76,6 +78,8 @@
         BlobLoader(FetchBodyOwner&);
 
         // FetchLoaderClient API
+        void didFinishLoadingAsText(String&& text) final { owner.loadedBlobAsText(WTFMove(text)); }
+        void didFinishLoadingAsArrayBuffer(RefPtr<ArrayBuffer>&& buffer) final { owner.loadedBlobAsArrayBuffer(WTFMove(buffer)); }
         void didReceiveResponse(const ResourceResponse&) final;
         void didReceiveData(const char* data, size_t size) final { owner.blobChunk(data, size); }
         void didFail() final;

Modified: trunk/Source/WebCore/Modules/fetch/FetchInternals.js (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchInternals.js	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchInternals.js	2016-07-26 17:13:38 UTC (rev 203726)
@@ -51,27 +51,3 @@
         @Headers.prototype.@appendFromJS.@call(headers, name, headersInit[name]);
     }
 }
-
-function consumeStream(response, type)
-{
-    @assert(response instanceof @Response);
-    @assert(response.@body instanceof @ReadableStream);
-
-    if (@isReadableStreamDisturbed(response.@body))
-        return @Promise.@reject(new @TypeError("Cannot consume a disturbed Response body ReadableStream"));
-
-    try {
-        let reader = new @ReadableStreamReader(response.@body);
-
-        @Response.prototype.@startConsumingStream.@call(response, type);
-        let pull = (result) => {
-            if (result.done)
-                return @Response.prototype.@finishConsumingStream.@call(response);
-            @Response.prototype.@consumeChunk.@call(response, result.value);
-            return @Promise.prototype.@then.@call(@readFromReadableStreamReader(reader), pull);
-        }
-        return @Promise.prototype.@then.@call(@readFromReadableStreamReader(reader), pull);
-    } catch(e) {
-        return @Promise.@reject(e);
-    }
-}

Modified: trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp	2016-07-26 17:13:38 UTC (rev 203726)
@@ -89,16 +89,15 @@
     m_isStarted = m_loader;
 }
 
-FetchLoader::FetchLoader(FetchLoaderClient& client, FetchBodyConsumer* consumer)
-    : m_client(client)
-    , m_consumer(consumer)
+FetchLoader::FetchLoader(Type type, FetchLoaderClient& client)
+    : m_type(type)
+    , m_client(client)
 {
 }
 
 void FetchLoader::stop()
 {
-    if (m_consumer)
-        m_consumer->clean();
+    m_data = nullptr;
     if (m_loader)
         m_loader->cancel();
 }
@@ -105,10 +104,9 @@
 
 RefPtr<SharedBuffer> FetchLoader::startStreaming()
 {
-    ASSERT(m_consumer);
-    auto firstChunk = m_consumer->takeData();
-    m_consumer = nullptr;
-    return firstChunk;
+    ASSERT(m_type == Type::ArrayBuffer);
+    m_type = Type::Stream;
+    return WTFMove(m_data);
 }
 
 void FetchLoader::didReceiveResponse(unsigned long, const ResourceResponse& response)
@@ -116,17 +114,29 @@
     m_client.didReceiveResponse(response);
 }
 
+// FIXME: We should make text and blob creation more efficient.
+// We might also want to merge this class with FileReaderLoader.
 void FetchLoader::didReceiveData(const char* value, int size)
 {
-    if (!m_consumer) {
+    if (m_type == Type::Stream) {
         m_client.didReceiveData(value, size);
         return;
     }
-    m_consumer->append(value, size);
+    if (!m_data) {
+        m_data = SharedBuffer::create(value, size);
+        return;
+    }
+    m_data->append(value, size);
 }
 
 void FetchLoader::didFinishLoading(unsigned long, double)
 {
+    if (m_type == Type::ArrayBuffer)
+        m_client.didFinishLoadingAsArrayBuffer(m_data ? m_data->createArrayBuffer() : ArrayBuffer::tryCreate(nullptr, 0));
+    else if (m_type == Type::Text)
+        m_client.didFinishLoadingAsText(m_data ? TextResourceDecoder::create(ASCIILiteral("text/plain"), "UTF-8")->decodeAndFlush(m_data->data(), m_data->size()): String());
+    m_data = nullptr;
+
     m_client.didSucceed();
 }
 

Modified: trunk/Source/WebCore/Modules/fetch/FetchLoader.h (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchLoader.h	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchLoader.h	2016-07-26 17:13:38 UTC (rev 203726)
@@ -26,11 +26,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#pragma once
+#ifndef FetchLoader_h
+#define FetchLoader_h
 
 #if ENABLE(FETCH_API)
 
-#include "FetchBodyConsumer.h"
+#include "SharedBuffer.h"
 #include "ThreadableLoader.h"
 #include "ThreadableLoaderClient.h"
 
@@ -43,8 +44,10 @@
 
 class FetchLoader final : public ThreadableLoaderClient {
 public:
-    FetchLoader(FetchLoaderClient&, FetchBodyConsumer*);
+    enum class Type { ArrayBuffer, Stream, Text };
 
+    FetchLoader(Type, FetchLoaderClient&);
+
     RefPtr<SharedBuffer> startStreaming();
 
     void start(ScriptExecutionContext&, const FetchRequest&);
@@ -60,10 +63,13 @@
     void didFinishLoading(unsigned long, double) final;
     void didFail(const ResourceError&) final;
 
+    Type type() const { return m_type; }
+
 private:
+    Type m_type { Type::ArrayBuffer };
     FetchLoaderClient& m_client;
     RefPtr<ThreadableLoader> m_loader;
-    FetchBodyConsumer* m_consumer;
+    RefPtr<SharedBuffer> m_data;
     bool m_isStarted { false };
 };
 
@@ -70,3 +76,5 @@
 } // namespace WebCore
 
 #endif // ENABLE(FETCH_API)
+
+#endif // FetchLoader_h

Modified: trunk/Source/WebCore/Modules/fetch/FetchLoaderClient.h (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchLoaderClient.h	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchLoaderClient.h	2016-07-26 17:13:38 UTC (rev 203726)
@@ -47,6 +47,8 @@
 
     virtual void didReceiveResponse(const ResourceResponse&) { }
 
+    virtual void didFinishLoadingAsText(String&&) { }
+    virtual void didFinishLoadingAsArrayBuffer(RefPtr<JSC::ArrayBuffer>&&) { }
     virtual void didReceiveData(const char*, size_t) { }
 
     virtual void didSucceed() = 0;

Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp	2016-07-26 17:13:38 UTC (rev 203726)
@@ -34,7 +34,6 @@
 #include "ExceptionCode.h"
 #include "FetchRequest.h"
 #include "HTTPParsers.h"
-#include "JSBlob.h"
 #include "JSFetchResponse.h"
 #include "ScriptExecutionContext.h"
 
@@ -94,11 +93,13 @@
 {
 }
 
-Ref<FetchResponse> FetchResponse::cloneForJS()
+RefPtr<FetchResponse> FetchResponse::clone(ScriptExecutionContext& context, ExceptionCode& ec)
 {
-    ASSERT(scriptExecutionContext());
-    ASSERT(!isDisturbed());
-    return adoptRef(*new FetchResponse(*scriptExecutionContext(), FetchBody(m_body), FetchHeaders::create(headers()), ResourceResponse(m_response)));
+    if (isDisturbed()) {
+        ec = TypeError;
+        return nullptr;
+    }
+    return adoptRef(*new FetchResponse(context, FetchBody(m_body), FetchHeaders::create(headers()), ResourceResponse(m_response)));
 }
 
 void FetchResponse::fetch(ScriptExecutionContext& context, FetchRequest& request, FetchPromise&& promise)
@@ -129,8 +130,6 @@
         m_response.m_readableStreamSource = nullptr;
     }
 #endif
-    m_response.m_body.loadingSucceeded();
-
     if (m_loader->isStarted())
         m_response.m_bodyLoader = Nullopt;
     m_response.unsetPendingActivity(&m_response);
@@ -188,9 +187,14 @@
 #endif
 }
 
+void FetchResponse::BodyLoader::didFinishLoadingAsArrayBuffer(RefPtr<ArrayBuffer>&& buffer)
+{
+    m_response.body().loadedAsArrayBuffer(WTFMove(buffer));
+}
+
 bool FetchResponse::BodyLoader::start(ScriptExecutionContext& context, const FetchRequest& request)
 {
-    m_loader = std::make_unique<FetchLoader>(*this, &m_response.m_body.consumer());
+    m_loader = std::make_unique<FetchLoader>(FetchLoader::Type::ArrayBuffer, *this);
     m_loader->start(context, request);
     return m_loader->isStarted();
 }
@@ -201,46 +205,7 @@
         m_loader->stop();
 }
 
-void FetchResponse::consume(unsigned type, DeferredWrapper&& wrapper)
-{
-    ASSERT(type <= static_cast<unsigned>(FetchBodyConsumer::Type::Text));
-
-    switch (static_cast<FetchBodyConsumer::Type>(type)) {
-    case FetchBodyConsumer::Type::ArrayBuffer:
-        arrayBuffer(WTFMove(wrapper));
-        return;
-    case FetchBodyConsumer::Type::Blob:
-        blob(WTFMove(wrapper));
-        return;
-    case FetchBodyConsumer::Type::JSON:
-        json(WTFMove(wrapper));
-        return;
-    case FetchBodyConsumer::Type::Text:
-        text(WTFMove(wrapper));
-        return;
-    case FetchBodyConsumer::Type::None:
-        ASSERT_NOT_REACHED();
-        return;
-    }
-}
-
 #if ENABLE(STREAMS_API)
-void FetchResponse::startConsumingStream(unsigned type)
-{
-    m_isDisturbed = true;
-    m_consumer.setType(static_cast<FetchBodyConsumer::Type>(type));
-}
-
-void FetchResponse::consumeChunk(Ref<JSC::Uint8Array>&& chunk)
-{
-    m_consumer.append(chunk->data(), chunk->byteLength());
-}
-
-void FetchResponse::finishConsumingStream(DeferredWrapper&& promise)
-{
-    m_consumer.resolve(promise);
-}
-
 void FetchResponse::consumeBodyAsStream()
 {
     ASSERT(m_readableStreamSource);

Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.h (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchResponse.h	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.h	2016-07-26 17:13:38 UTC (rev 203726)
@@ -33,7 +33,6 @@
 #include "FetchBodyOwner.h"
 #include "FetchHeaders.h"
 #include "ResourceResponse.h"
-#include <runtime/TypedArrays.h>
 
 namespace JSC {
 class ArrayBuffer;
@@ -60,13 +59,6 @@
     using FetchPromise = DOMPromise<FetchResponse>;
     static void fetch(ScriptExecutionContext&, FetchRequest&, FetchPromise&&);
 
-    void consume(unsigned, DeferredWrapper&&);
-#if ENABLE(STREAMS_API)
-    void startConsumingStream(unsigned);
-    void consumeChunk(Ref<JSC::Uint8Array>&&);
-    void finishConsumingStream(DeferredWrapper&&);
-#endif
-
     void setStatus(int, const String&, ExceptionCode&);
     void initializeWith(JSC::ExecState&, JSC::JSValue);
 
@@ -78,7 +70,7 @@
     const String& statusText() const { return m_response.httpStatusText(); }
 
     FetchHeaders& headers() { return m_headers; }
-    Ref<FetchResponse> cloneForJS();
+    RefPtr<FetchResponse> clone(ScriptExecutionContext&, ExceptionCode&);
 
 #if ENABLE(STREAMS_API)
     ReadableStreamSource* createReadableStreamSource();
@@ -113,6 +105,7 @@
         void didFail() final;
         void didReceiveResponse(const ResourceResponse&) final;
         void didReceiveData(const char*, size_t) final;
+        void didFinishLoadingAsArrayBuffer(RefPtr<ArrayBuffer>&&) final;
 
         FetchResponse& m_response;
         Optional<FetchPromise> m_promise;
@@ -123,8 +116,6 @@
     Ref<FetchHeaders> m_headers;
     Optional<BodyLoader> m_bodyLoader;
     mutable String m_responseURL;
-
-    FetchBodyConsumer m_consumer { FetchBodyConsumer::Type::ArrayBuffer  };
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.idl (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchResponse.idl	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.idl	2016-07-26 17:13:38 UTC (rev 203726)
@@ -53,25 +53,11 @@
     readonly attribute FetchHeaders headers;
     [JSBuiltin] readonly attribute ReadableStream? body;
 
-    // Copy of FetchBody IDL as we want to implement some of these as built-ins.
-    [ImplementedAs=isDisturbed] readonly attribute boolean bodyUsed;
-    [JSBuiltin] Promise arrayBuffer();
-    [JSBuiltin] Promise blob();
-    [JSBuiltin] Promise formData();
-    [JSBuiltin] Promise json();
-    [JSBuiltin] Promise text();
+    [NewObject, CallWith=ScriptExecutionContext, RaisesException] FetchResponse clone();
 
-    [JSBuiltin] FetchResponse clone();
-
-    [PrivateIdentifier, NewObject] FetchResponse cloneForJS();
-
-    [Conditional=STREAMS_API, PrivateIdentifier] void startConsumingStream(unsigned short type);
-    [Conditional=STREAMS_API, PrivateIdentifier] void consumeChunk(Uint8Array chunk);
-    [Conditional=STREAMS_API, PrivateIdentifier] Promise finishConsumingStream();
-
-    [PrivateIdentifier] Promise consume(unsigned short type);
     [PrivateIdentifier, RaisesException] void setStatus(unsigned short status, DOMString statusText);
     [CallWith=ScriptState, PrivateIdentifier] void initializeWith(any body);
     [PrivateIdentifier, NewObject] ReadableStreamSource createReadableStreamSource();
     [PrivateIdentifier] boolean isDisturbed();
 };
+FetchResponse implements FetchBody;

Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.js (203725 => 203726)


--- trunk/Source/WebCore/Modules/fetch/FetchResponse.js	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.js	2016-07-26 17:13:38 UTC (rev 203726)
@@ -48,12 +48,6 @@
     if (body !== @undefined && body !== null) {
         if (status == 101 || status == 204 || status == 205 || status == 304)
             throw new @TypeError("Response cannot have a body with the given status");
-
-        // FIXME: Use @isReadableStream once it is no longer guarded by STREAMS_API guard.
-        let isBodyReadableStream = (@isObject(body) && !!body.@underlyingSource);
-        if (isBodyReadableStream)
-          this.@body = body;
-
         this.@initializeWith(body);
     }
 
@@ -74,77 +68,3 @@
     }
     return this.@body;
 }
-
-function clone()
-{
-    if (!this instanceof @Response)
-        throw new @TypeError("Function should be called on a Response");
-
-    if (@Response.prototype.@isDisturbed.@call(this))
-        throw new @TypeError("Cannot clone a disturbed Response");
-
-    var cloned = @Response.prototype.@cloneForJS.@call(this);
-    if (this.@body) {
-        var teedReadableStreams = @teeReadableStream(this.@body, false);
-        this.@body = teedReadableStreams[0];
-        cloned.@body = teedReadableStreams[1];
-    }
-    return cloned;
-}
-
-// consume and consumeStream single parameter should be kept in sync with FetchBodyConsumer::Type.
-function arrayBuffer()
-{
-    if (!this instanceof @Response)
-        throw new @TypeError("Function should be called on a Response");
-
-    const arrayBufferConsumerType = 1;
-    if (!this.@body)
-        return @Response.prototype.@consume.@call(this, arrayBufferConsumerType);
-
-    return @consumeStream(this, arrayBufferConsumerType);
-}
-
-function blob()
-{
-    if (!this instanceof @Response)
-        throw new @TypeError("Function should be called on a Response");
-
-    const blobConsumerType = 2;
-    if (!this.@body)
-        return @Response.prototype.@consume.@call(this, blobConsumerType);
-
-    return @consumeStream(this, blobConsumerType);
-}
-
-function formData()
-{
-    if (!this instanceof @Response)
-        throw new @TypeError("Function should be called on a Response");
-
-    return @Promise.@reject("Not implemented");
-}
-
-function json()
-{
-    if (!this instanceof @Response)
-        throw new @TypeError("Function should be called on a Response");
-
-    const jsonConsumerType = 3;
-    if (!this.@body)
-        return @Response.prototype.@consume.@call(this, jsonConsumerType);
-
-    return @consumeStream(this, jsonConsumerType);
-}
-
-function text()
-{
-    if (!this instanceof @Response)
-        throw new @TypeError("Function should be called on a Response");
-
-    const textConsumerType = 4;
-    if (!this.@body)
-        return @Response.prototype.@consume.@call(this, textConsumerType);
-
-    return @consumeStream(this, textConsumerType);
-}

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (203725 => 203726)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2016-07-26 17:13:38 UTC (rev 203726)
@@ -1631,7 +1631,6 @@
 		41BF700F0FE86F61005E8DEC /* PlatformMessagePortChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41BF700D0FE86F61005E8DEC /* PlatformMessagePortChannel.cpp */; };
 		41BF70100FE86F61005E8DEC /* PlatformMessagePortChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 41BF700E0FE86F61005E8DEC /* PlatformMessagePortChannel.h */; };
 		41C760B10EDE03D300C1655F /* ScriptState.h in Headers */ = {isa = PBXBuildFile; fileRef = 41C760B00EDE03D300C1655F /* ScriptState.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		41CF8BE71D46226700707DC9 /* FetchBodyConsumer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41CF8BE41D46222000707DC9 /* FetchBodyConsumer.cpp */; };
 		41D015CA0F4B5C71004A662F /* ContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D015C80F4B5C71004A662F /* ContentType.h */; };
 		41D015CB0F4B5C71004A662F /* ContentType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41D015C90F4B5C71004A662F /* ContentType.cpp */; };
 		41E1B1D00FF5986900576B3B /* AbstractWorker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41E1B1CA0FF5986900576B3B /* AbstractWorker.cpp */; };
@@ -9219,9 +9218,6 @@
 		41BF700D0FE86F61005E8DEC /* PlatformMessagePortChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlatformMessagePortChannel.cpp; path = default/PlatformMessagePortChannel.cpp; sourceTree = "<group>"; };
 		41BF700E0FE86F61005E8DEC /* PlatformMessagePortChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlatformMessagePortChannel.h; path = default/PlatformMessagePortChannel.h; sourceTree = "<group>"; };
 		41C760B00EDE03D300C1655F /* ScriptState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptState.h; sourceTree = "<group>"; };
-		41CF8BE41D46222000707DC9 /* FetchBodyConsumer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FetchBodyConsumer.cpp; sourceTree = "<group>"; };
-		41CF8BE51D46222000707DC9 /* FetchBodyConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FetchBodyConsumer.h; sourceTree = "<group>"; };
-		41CF8BE61D46222C00707DC9 /* FetchInternals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode._javascript_; path = FetchInternals.js; sourceTree = "<group>"; };
 		41D015C80F4B5C71004A662F /* ContentType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentType.h; sourceTree = "<group>"; };
 		41D015C90F4B5C71004A662F /* ContentType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContentType.cpp; sourceTree = "<group>"; };
 		41E1B1CA0FF5986900576B3B /* AbstractWorker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractWorker.cpp; sourceTree = "<group>"; };
@@ -17102,8 +17098,6 @@
 				41F54F7D1C50C4F600338488 /* FetchBody.cpp */,
 				41F54F7E1C50C4F600338488 /* FetchBody.h */,
 				41F54F7F1C50C4F600338488 /* FetchBody.idl */,
-				41CF8BE41D46222000707DC9 /* FetchBodyConsumer.cpp */,
-				41CF8BE51D46222000707DC9 /* FetchBodyConsumer.h */,
 				4147E2B31C89912600A7E715 /* FetchBodyOwner.cpp */,
 				4147E2B21C88337F00A7E715 /* FetchBodyOwner.h */,
 				41F54F821C50C4F600338488 /* FetchHeaders.cpp */,
@@ -17110,7 +17104,6 @@
 				41F54F831C50C4F600338488 /* FetchHeaders.h */,
 				41F54F841C50C4F600338488 /* FetchHeaders.idl */,
 				41F54F851C50C4F600338488 /* FetchHeaders.js */,
-				41CF8BE61D46222C00707DC9 /* FetchInternals.js */,
 				4147E2B41C89912600A7E715 /* FetchLoader.cpp */,
 				4147E2B51C89912600A7E715 /* FetchLoader.h */,
 				4147E2B61C89912600A7E715 /* FetchLoaderClient.h */,
@@ -30779,7 +30772,6 @@
 				BC06EDE30BFD6D0D00856E9D /* JSHTMLTableCellElement.cpp in Sources */,
 				BC06ED9D0BFD660600856E9D /* JSHTMLTableColElement.cpp in Sources */,
 				BC06EE040BFD71AA00856E9D /* JSHTMLTableElement.cpp in Sources */,
-				41CF8BE71D46226700707DC9 /* FetchBodyConsumer.cpp in Sources */,
 				BC06ED9F0BFD660600856E9D /* JSHTMLTableRowElement.cpp in Sources */,
 				BC06ED060BFD5BAE00856E9D /* JSHTMLTableSectionElement.cpp in Sources */,
 				D6489D25166FFCF1007C031B /* JSHTMLTemplateElement.cpp in Sources */,

Modified: trunk/Source/WebCore/bindings/js/JSDOMPromise.h (203725 => 203726)


--- trunk/Source/WebCore/bindings/js/JSDOMPromise.h	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/bindings/js/JSDOMPromise.h	2016-07-26 17:13:38 UTC (rev 203726)
@@ -118,8 +118,6 @@
     template<class RejectResultType> typename std::enable_if<PromiseResultInspector<RejectResultType>::passByConstRef, void>::type
     reject(const RejectResultType& result) { rejectWithValue(result); }
 
-    template<class ResolveResultType> void resolveWithNewlyCreated(Ref<ResolveResultType>&&);
-
     void reject(ExceptionCode, const String& = { });
 
     JSDOMGlobalObject& globalObject() const;
@@ -183,16 +181,6 @@
     resolve(*exec, toJS(exec, m_globalObject.get(), std::forward<ResolveResultType>(result)));
 }
 
-template<class ResolveResultType>
-inline void DeferredWrapper::resolveWithNewlyCreated(Ref<ResolveResultType>&& result)
-{
-    ASSERT(m_deferred);
-    ASSERT(m_globalObject);
-    JSC::ExecState* exec = m_globalObject->globalExec();
-    JSC::JSLockHolder locker(exec);
-    resolve(*exec, toJSNewlyCreated(exec, m_globalObject.get(), WTFMove(result)));
-}
-
 template<class RejectResultType>
 inline void DeferredWrapper::rejectWithValue(RejectResultType&& result)
 {

Modified: trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h (203725 => 203726)


--- trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h	2016-07-26 16:57:24 UTC (rev 203725)
+++ trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h	2016-07-26 17:13:38 UTC (rev 203726)
@@ -35,11 +35,8 @@
     macro(addTrack) \
     macro(appendFromJS) \
     macro(body) \
-    macro(cloneForJS) \
     macro(closeRequested) \
     macro(closedPromiseCapability) \
-    macro(consume) \
-    macro(consumeChunk) \
     macro(controlledReadableStream) \
     macro(controller) \
     macro(createReadableStreamSource) \
@@ -46,7 +43,6 @@
     macro(disturbed) \
     macro(fetchRequest) \
     macro(fillFromJS) \
-    macro(finishConsumingStream) \
     macro(firstReadCallback) \
     macro(getUserMediaFromJS) \
     macro(getRemoteStreams) \
@@ -76,7 +72,6 @@
     macro(setBody) \
     macro(setStatus) \
     macro(state) \
-    macro(startConsumingStream) \
     macro(started) \
     macro(startedPromise) \
     macro(storedError) \
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to