Title: [222269] trunk/Source/WebCore
Revision
222269
Author
[email protected]
Date
2017-09-20 10:31:06 -0700 (Wed, 20 Sep 2017)

Log Message

[Curl] improve the implementation of FormDataStream
https://bugs.webkit.org/show_bug.cgi?id=177111

Patch by Basuke Suzuki <[email protected]> on 2017-09-20
Reviewed by Alex Christensen.

* platform/network/curl/FormDataStreamCurl.cpp:
(WebCore::FormDataStream::read):
(WebCore::FormDataStream::hasMoreElements const):
* platform/network/curl/FormDataStreamCurl.h:
(WebCore::FormDataStream::setHTTPBody):
(WebCore::FormDataStream::FormDataStream): Deleted.
* platform/network/curl/ResourceHandleCurlDelegate.cpp:
(WebCore::ResourceHandleCurlDelegate::ResourceHandleCurlDelegate):
(WebCore::ResourceHandleCurlDelegate::prepareSendData):
(WebCore::ResourceHandleCurlDelegate::didFinish):
(WebCore::ResourceHandleCurlDelegate::didFail):
(WebCore::ResourceHandleCurlDelegate::setupFormData):
* platform/network/curl/ResourceHandleCurlDelegate.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (222268 => 222269)


--- trunk/Source/WebCore/ChangeLog	2017-09-20 17:21:19 UTC (rev 222268)
+++ trunk/Source/WebCore/ChangeLog	2017-09-20 17:31:06 UTC (rev 222269)
@@ -1,3 +1,24 @@
+2017-09-20  Basuke Suzuki  <[email protected]>
+
+        [Curl] improve the implementation of FormDataStream
+        https://bugs.webkit.org/show_bug.cgi?id=177111
+
+        Reviewed by Alex Christensen.
+
+        * platform/network/curl/FormDataStreamCurl.cpp:
+        (WebCore::FormDataStream::read):
+        (WebCore::FormDataStream::hasMoreElements const):
+        * platform/network/curl/FormDataStreamCurl.h:
+        (WebCore::FormDataStream::setHTTPBody):
+        (WebCore::FormDataStream::FormDataStream): Deleted.
+        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
+        (WebCore::ResourceHandleCurlDelegate::ResourceHandleCurlDelegate):
+        (WebCore::ResourceHandleCurlDelegate::prepareSendData):
+        (WebCore::ResourceHandleCurlDelegate::didFinish):
+        (WebCore::ResourceHandleCurlDelegate::didFail):
+        (WebCore::ResourceHandleCurlDelegate::setupFormData):
+        * platform/network/curl/ResourceHandleCurlDelegate.h:
+
 2017-09-20  Miguel Gomez  <[email protected]>
 
         [GTK] Completely garbled display in GMail

Modified: trunk/Source/WebCore/platform/network/curl/FormDataStreamCurl.cpp (222268 => 222269)


--- trunk/Source/WebCore/platform/network/curl/FormDataStreamCurl.cpp	2017-09-20 17:21:19 UTC (rev 222268)
+++ trunk/Source/WebCore/platform/network/curl/FormDataStreamCurl.cpp	2017-09-20 17:31:06 UTC (rev 222269)
@@ -4,6 +4,7 @@
  * Copyright (C) 2007 Alp Toker <[email protected]>
  * Copyright (C) 2007 Holger Hans Peter Freyther
  * Copyright (C) 2008 Collabora Ltd.
+ * Copyright (C) 2017 Sony Interactive Entertainment Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,14 +30,11 @@
  */
 
 #include "config.h"
+#include "FormDataStreamCurl.h"
 
 #if USE(CURL)
 
-#include "FormDataStreamCurl.h"
-
 #include "FormData.h"
-#include "ResourceRequest.h"
-#include <wtf/text/CString.h>
 
 namespace WebCore {
 
@@ -53,8 +51,8 @@
         return 0;
 
     Vector<FormDataElement> elements;
-    if (m_resourceHandle->firstRequest().httpBody())
-        elements = m_resourceHandle->firstRequest().httpBody()->elements();
+    if (m_formData)
+        elements = m_formData->elements();
 
     if (m_formDataElementIndex >= elements.size())
         return 0;
@@ -107,8 +105,8 @@
 bool FormDataStream::hasMoreElements() const
 {
     Vector<FormDataElement> elements;
-    if (m_resourceHandle->firstRequest().httpBody())
-        elements = m_resourceHandle->firstRequest().httpBody()->elements();
+    if (m_formData)
+        elements = m_formData->elements();
 
     return m_formDataElementIndex < elements.size();
 }

Modified: trunk/Source/WebCore/platform/network/curl/FormDataStreamCurl.h (222268 => 222269)


--- trunk/Source/WebCore/platform/network/curl/FormDataStreamCurl.h	2017-09-20 17:21:19 UTC (rev 222268)
+++ trunk/Source/WebCore/platform/network/curl/FormDataStreamCurl.h	2017-09-20 17:31:06 UTC (rev 222269)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008 Apple Inc.  All rights reserved.
+ * Copyright (C) 2017 Sony Interactive Entertainment Inc.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -22,42 +23,32 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-#ifndef FormDataStreamCurl_h
-#define FormDataStreamCurl_h
 
-#include "config.h"
+#pragma once
 
-#include "FileSystem.h"
-#include "ResourceHandle.h"
 #include <stdio.h>
 
 namespace WebCore {
 
+class FormData;
+
 class FormDataStream {
 public:
-    FormDataStream(ResourceHandle* handle)
-        : m_resourceHandle(handle)
-        , m_file(0)
-        , m_formDataElementIndex(0)
-        , m_formDataElementDataOffset(0)
-    {
-    }
-
+    FormDataStream() = default;
     ~FormDataStream();
 
+    void setHTTPBody(FormData* formData) { m_formData = formData; }
     size_t read(void* ptr, size_t blockSize, size_t numberOfBlocks);
     bool hasMoreElements() const;
 
 private:
-    // We can hold a weak reference to our ResourceHandle as it holds a strong reference
-    // to us through its ResourceHandleInternal.
-    ResourceHandle* m_resourceHandle;
+    // We can hold a weak reference to our ResourceRequest as it holds a strong reference
+    // to us through its owner.
+    FormData* m_formData { };
 
-    FILE* m_file;
-    size_t m_formDataElementIndex;
-    size_t m_formDataElementDataOffset;
+    FILE* m_file { };
+    size_t m_formDataElementIndex { 0 };
+    size_t m_formDataElementDataOffset { 0 };
 };
 
 } // namespace WebCore
-
-#endif // FormDataStreamCurl_h

Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp (222268 => 222269)


--- trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp	2017-09-20 17:21:19 UTC (rev 222268)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp	2017-09-20 17:31:06 UTC (rev 222269)
@@ -49,7 +49,6 @@
 
 ResourceHandleCurlDelegate::ResourceHandleCurlDelegate(ResourceHandle* handle)
     : m_handle(handle)
-    , m_formDataStream(handle)
     , m_firstRequest(handle->firstRequest().isolatedCopy())
     , m_customHTTPHeaderFields(m_firstRequest.httpHeaderFields().isolatedCopy())
     , m_shouldUseCredentialStorage(handle->shouldUseCredentialStorage())
@@ -427,13 +426,16 @@
 
     std::unique_lock<Lock> lock(m_workerThreadMutex);
 
-    if (!m_formDataStream.hasMoreElements())
+    if (!m_formDataStream || !m_formDataStream->hasMoreElements()) {
+        m_workerThreadConditionVariable.notifyOne();
         return;
+    }
 
-    size_t size = m_formDataStream.read(buffer, blockSize, numberOfBlocks);
+    size_t size = m_formDataStream->read(buffer, blockSize, numberOfBlocks);
     if (!size) {
         // Something went wrong so cancel the job.
         m_handle->cancel();
+        m_workerThreadConditionVariable.notifyOne();
         return;
     }
 
@@ -445,6 +447,8 @@
 {
     response().setDeprecatedNetworkLoadMetrics(networkLoadMetrics);
 
+    m_formDataStream = nullptr;
+
     if (!m_handle)
         return;
 
@@ -465,6 +469,8 @@
 
 void ResourceHandleCurlDelegate::didFail(const ResourceError& resourceError)
 {
+    m_formDataStream = nullptr;
+
     if (!m_handle)
         return;
 
@@ -620,6 +626,9 @@
             m_curlHandle.setInFileSizeLarge(size);
     }
 
+    m_formDataStream = std::make_unique<FormDataStream>();
+    m_formDataStream->setHTTPBody(m_firstRequest.httpBody());
+
     m_curlHandle.setReadCallbackFunction(willSendDataCallback, this);
 }
 

Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h (222268 => 222269)


--- trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h	2017-09-20 17:21:19 UTC (rev 222268)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h	2017-09-20 17:31:06 UTC (rev 222269)
@@ -42,6 +42,7 @@
 
 class MultipartHandle;
 class ProtectionSpace;
+class ResourceError;
 class ResourceHandle;
 class ThreadSafeDataBuffer;
 
@@ -104,7 +105,7 @@
 
     // Used by main thread.
     ResourceHandle* m_handle;
-    FormDataStream m_formDataStream;
+    std::unique_ptr<FormDataStream> m_formDataStream;
     std::unique_ptr<MultipartHandle> m_multipartHandle;
     unsigned short m_authFailureCount { 0 };
     CurlJobTicket m_job { nullptr };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to