Title: [198890] trunk/Source/WebCore
Revision
198890
Author
[email protected]
Date
2016-03-31 03:31:28 -0700 (Thu, 31 Mar 2016)

Log Message

[Fetch API] Move isDisturbed handling to FetchBodyOwner
https://bugs.webkit.org/show_bug.cgi?id=155968

Reviewed by Darin Adler.

Moved isDisturbed handling in FetchBodyOwner.
This includes promise rejection in case of disturbed bodies.

No behavior change observable from user scripts.

* Modules/fetch/FetchBody.cpp:
(WebCore::FetchBody::arrayBuffer):
(WebCore::FetchBody::blob):
(WebCore::FetchBody::json):
(WebCore::FetchBody::text):
(WebCore::FetchBody::extractFromBody):
(WebCore::FetchBody::consume):
(WebCore::FetchBody::consumeArrayBuffer):
(WebCore::FetchBody::processIfEmptyOrDisturbed): Deleted.
* Modules/fetch/FetchBody.h:
(WebCore::FetchBody::isEmpty): Deleted.
* Modules/fetch/FetchBodyOwner.cpp:
(WebCore::FetchBodyOwner::arrayBuffer):
(WebCore::FetchBodyOwner::blob):
(WebCore::FetchBodyOwner::formData):
(WebCore::FetchBodyOwner::json):
(WebCore::FetchBodyOwner::text):
* Modules/fetch/FetchBodyOwner.h:
(WebCore::FetchBodyOwner::isDisturbed):
(WebCore::FetchBodyOwner::setDisturbed):
* Modules/fetch/FetchRequest.cpp:
(WebCore::FetchRequest::create):
* Modules/fetch/FetchResponse.cpp:
(WebCore::FetchResponse::clone):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (198889 => 198890)


--- trunk/Source/WebCore/ChangeLog	2016-03-31 08:31:25 UTC (rev 198889)
+++ trunk/Source/WebCore/ChangeLog	2016-03-31 10:31:28 UTC (rev 198890)
@@ -1,5 +1,42 @@
 2016-03-31  Youenn Fablet  <[email protected]>
 
+        [Fetch API] Move isDisturbed handling to FetchBodyOwner
+        https://bugs.webkit.org/show_bug.cgi?id=155968
+
+        Reviewed by Darin Adler.
+
+        Moved isDisturbed handling in FetchBodyOwner.
+        This includes promise rejection in case of disturbed bodies.
+
+        No behavior change observable from user scripts.
+
+        * Modules/fetch/FetchBody.cpp:
+        (WebCore::FetchBody::arrayBuffer):
+        (WebCore::FetchBody::blob):
+        (WebCore::FetchBody::json):
+        (WebCore::FetchBody::text):
+        (WebCore::FetchBody::extractFromBody):
+        (WebCore::FetchBody::consume):
+        (WebCore::FetchBody::consumeArrayBuffer):
+        (WebCore::FetchBody::processIfEmptyOrDisturbed): Deleted.
+        * Modules/fetch/FetchBody.h:
+        (WebCore::FetchBody::isEmpty): Deleted.
+        * Modules/fetch/FetchBodyOwner.cpp:
+        (WebCore::FetchBodyOwner::arrayBuffer):
+        (WebCore::FetchBodyOwner::blob):
+        (WebCore::FetchBodyOwner::formData):
+        (WebCore::FetchBodyOwner::json):
+        (WebCore::FetchBodyOwner::text):
+        * Modules/fetch/FetchBodyOwner.h:
+        (WebCore::FetchBodyOwner::isDisturbed):
+        (WebCore::FetchBodyOwner::setDisturbed):
+        * Modules/fetch/FetchRequest.cpp:
+        (WebCore::FetchRequest::create):
+        * Modules/fetch/FetchResponse.cpp:
+        (WebCore::FetchResponse::clone):
+
+2016-03-31  Youenn Fablet  <[email protected]>
+
         Remove forEach use from Fetch Headers builtin constructor
         https://bugs.webkit.org/show_bug.cgi?id=155967
 

Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.cpp (198889 => 198890)


--- trunk/Source/WebCore/Modules/fetch/FetchBody.cpp	2016-03-31 08:31:25 UTC (rev 198889)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.cpp	2016-03-31 10:31:28 UTC (rev 198890)
@@ -33,7 +33,6 @@
 
 #include "DOMRequestState.h"
 #include "Dictionary.h"
-#include "ExceptionCode.h"
 #include "FetchBodyOwner.h"
 #include "FormData.h"
 #include "HTTPParsers.h"
@@ -82,60 +81,24 @@
     if (!body)
         return { };
 
-    body->m_isDisturbed = true;
     return FetchBody(WTFMove(*body));
 }
 
-bool FetchBody::processIfEmptyOrDisturbed(Consumer::Type type, DeferredWrapper& promise)
-{
-    if (m_type == Type::None) {
-        switch (type) {
-        case Consumer::Type::Text:
-            promise.resolve(String());
-            return true;
-        case Consumer::Type::Blob:
-            promise.resolve<RefPtr<Blob>>(Blob::create());
-            return true;
-        case Consumer::Type::JSON:
-            promise.reject<ExceptionCode>(SYNTAX_ERR);
-            return true;
-        case Consumer::Type::ArrayBuffer:
-            fulfillPromiseWithArrayBuffer(promise, nullptr, 0);
-            return true;
-        default:
-            ASSERT_NOT_REACHED();
-            promise.reject<ExceptionCode>(0);
-            return true;
-        };
-    }
-
-    if (m_isDisturbed) {
-        promise.reject<ExceptionCode>(TypeError);
-        return true;
-    }
-    m_isDisturbed = true;
-    return false;
-}
-
 void FetchBody::arrayBuffer(FetchBodyOwner& owner, DeferredWrapper&& promise)
 {
-    if (processIfEmptyOrDisturbed(Consumer::Type::ArrayBuffer, promise))
-        return;
+    ASSERT(m_type != Type::None);
     consume(owner, Consumer::Type::ArrayBuffer, WTFMove(promise));
 }
 
 void FetchBody::blob(FetchBodyOwner& owner, DeferredWrapper&& promise)
 {
-    if (processIfEmptyOrDisturbed(Consumer::Type::Blob, promise))
-        return;
-
+    ASSERT(m_type != Type::None);
     consume(owner, Consumer::Type::Blob, WTFMove(promise));
 }
 
 void FetchBody::json(FetchBodyOwner& owner, DeferredWrapper&& promise)
 {
-    if (processIfEmptyOrDisturbed(Consumer::Type::JSON, promise))
-        return;
+    ASSERT(m_type != Type::None);
 
     if (m_type == Type::Text) {
         fulfillPromiseWithJSON(promise, m_text);
@@ -146,8 +109,7 @@
 
 void FetchBody::text(FetchBodyOwner& owner, DeferredWrapper&& promise)
 {
-    if (processIfEmptyOrDisturbed(Consumer::Type::Text, promise))
-        return;
+    ASSERT(m_type != Type::None);
 
     if (m_type == Type::Text) {
         promise.resolve(m_text);

Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.h (198889 => 198890)


--- trunk/Source/WebCore/Modules/fetch/FetchBody.h	2016-03-31 08:31:25 UTC (rev 198889)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.h	2016-03-31 10:31:28 UTC (rev 198890)
@@ -54,7 +54,6 @@
     void text(FetchBodyOwner&, DeferredWrapper&&);
     void formData(FetchBodyOwner&, DeferredWrapper&& promise) { promise.reject<ExceptionCode>(0); }
 
-    bool isDisturbed() const { return m_isDisturbed; }
     bool isEmpty() const { return m_type == Type::None; }
 
     void setMimeType(const String& mimeType) { m_mimeType = mimeType; }
@@ -88,7 +87,6 @@
     void consume(FetchBodyOwner&, Consumer::Type, DeferredWrapper&&);
 
     Vector<uint8_t> extractFromText() const;
-    bool processIfEmptyOrDisturbed(Consumer::Type, DeferredWrapper&);
     void consumeArrayBuffer(Consumer::Type, DeferredWrapper&);
     void consumeText(Consumer::Type, DeferredWrapper&);
     void consumeBlob(FetchBodyOwner&, Consumer::Type, DeferredWrapper&&);
@@ -98,7 +96,6 @@
 
     Type m_type { Type::None };
     String m_mimeType;
-    bool m_isDisturbed { false };
 
     // FIXME: Add support for BufferSource and URLSearchParams.
     RefPtr<Blob> m_blob;

Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp (198889 => 198890)


--- trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp	2016-03-31 08:31:25 UTC (rev 198889)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp	2016-03-31 10:31:28 UTC (rev 198890)
@@ -31,7 +31,9 @@
 
 #if ENABLE(FETCH_API)
 
+#include "ExceptionCode.h"
 #include "FetchLoader.h"
+#include "JSBlob.h"
 #include "ResourceResponse.h"
 
 namespace WebCore {
@@ -53,10 +55,80 @@
     ASSERT(!m_blobLoader);
 }
 
+void FetchBodyOwner::arrayBuffer(DeferredWrapper&& promise)
+{
+    if (m_body.isEmpty()) {
+        fulfillPromiseWithArrayBuffer(promise, nullptr, 0);
+        return;
+    }
+    if (isDisturbed()) {
+        promise.reject<ExceptionCode>(TypeError);
+        return;
+    }
+    m_isDisturbed = true;
+    m_body.arrayBuffer(*this, WTFMove(promise));
+}
+
+void FetchBodyOwner::blob(DeferredWrapper&& promise)
+{
+    if (m_body.isEmpty()) {
+        promise.resolve<RefPtr<Blob>>(Blob::create());
+        return;
+    }
+    if (isDisturbed()) {
+        promise.reject<ExceptionCode>(TypeError);
+        return;
+    }
+    m_isDisturbed = true;
+    m_body.blob(*this, WTFMove(promise));
+}
+
+void FetchBodyOwner::formData(DeferredWrapper&& promise)
+{
+    if (m_body.isEmpty()) {
+        promise.reject<ExceptionCode>(0);
+        return;
+    }
+    if (isDisturbed()) {
+        promise.reject<ExceptionCode>(TypeError);
+        return;
+    }
+    m_isDisturbed = true;
+    m_body.formData(*this, WTFMove(promise));
+}
+
+void FetchBodyOwner::json(DeferredWrapper&& promise)
+{
+    if (m_body.isEmpty()) {
+        promise.reject<ExceptionCode>(SYNTAX_ERR);
+        return;
+    }
+    if (isDisturbed()) {
+        promise.reject<ExceptionCode>(TypeError);
+        return;
+    }
+    m_isDisturbed = true;
+    m_body.json(*this, WTFMove(promise));
+}
+
+void FetchBodyOwner::text(DeferredWrapper&& promise)
+{
+    if (m_body.isEmpty()) {
+        promise.resolve(String());
+        return;
+    }
+    if (isDisturbed()) {
+        promise.reject<ExceptionCode>(TypeError);
+        return;
+    }
+    m_isDisturbed = true;
+    m_body.text(*this, WTFMove(promise));
+}
+
 void FetchBodyOwner::loadBlob(Blob& blob, FetchLoader::Type type)
 {
     // Can only be called once for a body instance.
-    ASSERT(m_body.isDisturbed());
+    ASSERT(isDisturbed());
     ASSERT(!m_blobLoader);
 
     if (!scriptExecutionContext()) {

Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.h (198889 => 198890)


--- trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.h	2016-03-31 08:31:25 UTC (rev 198889)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.h	2016-03-31 10:31:28 UTC (rev 198890)
@@ -43,13 +43,14 @@
     FetchBodyOwner(ScriptExecutionContext&, FetchBody&&);
 
     // Exposed Body API
-    bool isDisturbed() const { return m_body.isDisturbed(); }
-    void arrayBuffer(DeferredWrapper&& promise) { m_body.arrayBuffer(*this, WTFMove(promise)); }
-    void blob(DeferredWrapper&& promise) { m_body.blob(*this, WTFMove(promise)); }
-    void formData(DeferredWrapper&& promise) { m_body.formData(*this, WTFMove(promise)); }
-    void json(DeferredWrapper&& promise) { m_body.json(*this, WTFMove(promise)); }
-    void text(DeferredWrapper&& promise) { m_body.text(*this, WTFMove(promise)); }
+    bool isDisturbed() const { return m_isDisturbed; }
 
+    void arrayBuffer(DeferredWrapper&&);
+    void blob(DeferredWrapper&&);
+    void formData(DeferredWrapper&&);
+    void json(DeferredWrapper&&);
+    void text(DeferredWrapper&&);
+
     void loadBlob(Blob&, FetchLoader::Type);
 
     bool isActive() const { return !!m_blobLoader; }
@@ -61,6 +62,8 @@
     // ActiveDOMObject API
     void stop() override;
 
+    void setDisturbed() { m_isDisturbed = true; }
+
 private:
     // Blob loading routines
     void loadedBlobAsText(String&&);
@@ -85,6 +88,7 @@
 
 protected:
     FetchBody m_body;
+    bool m_isDisturbed { false };
 
 private:
     Optional<BlobLoader> m_blobLoader;

Modified: trunk/Source/WebCore/Modules/fetch/FetchRequest.cpp (198889 => 198890)


--- trunk/Source/WebCore/Modules/fetch/FetchRequest.cpp	2016-03-31 08:31:25 UTC (rev 198889)
+++ trunk/Source/WebCore/Modules/fetch/FetchRequest.cpp	2016-03-31 10:31:28 UTC (rev 198890)
@@ -295,6 +295,9 @@
         return nullptr;
     }
 
+    if (!input.m_body.isEmpty())
+        input.setDisturbed();
+
     return adoptRef(*new FetchRequest(context, WTFMove(body), headers.releaseNonNull(), WTFMove(internalRequest)));
 }
 

Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp (198889 => 198890)


--- trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp	2016-03-31 08:31:25 UTC (rev 198889)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp	2016-03-31 10:31:28 UTC (rev 198890)
@@ -118,7 +118,7 @@
 
 RefPtr<FetchResponse> FetchResponse::clone(ScriptExecutionContext& context, ExceptionCode& ec)
 {
-    if (m_body.isDisturbed() || m_isLocked) {
+    if (isDisturbed() || m_isLocked) {
         ec = TypeError;
         return nullptr;
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to