Changeset 222269 in webkit


Ignore:
Timestamp:
Sep 20, 2017 10:31:06 AM (7 years ago)
Author:
commit-queue@webkit.org
Message:

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

Patch by Basuke Suzuki <Basuke Suzuki> 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:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r222264 r222269  
     12017-09-20  Basuke Suzuki  <Basuke.Suzuki@sony.com>
     2
     3        [Curl] improve the implementation of FormDataStream
     4        https://bugs.webkit.org/show_bug.cgi?id=177111
     5
     6        Reviewed by Alex Christensen.
     7
     8        * platform/network/curl/FormDataStreamCurl.cpp:
     9        (WebCore::FormDataStream::read):
     10        (WebCore::FormDataStream::hasMoreElements const):
     11        * platform/network/curl/FormDataStreamCurl.h:
     12        (WebCore::FormDataStream::setHTTPBody):
     13        (WebCore::FormDataStream::FormDataStream): Deleted.
     14        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
     15        (WebCore::ResourceHandleCurlDelegate::ResourceHandleCurlDelegate):
     16        (WebCore::ResourceHandleCurlDelegate::prepareSendData):
     17        (WebCore::ResourceHandleCurlDelegate::didFinish):
     18        (WebCore::ResourceHandleCurlDelegate::didFail):
     19        (WebCore::ResourceHandleCurlDelegate::setupFormData):
     20        * platform/network/curl/ResourceHandleCurlDelegate.h:
     21
    1222017-09-20  Miguel Gomez  <magomez@igalia.com>
    223
  • trunk/Source/WebCore/platform/network/curl/FormDataStreamCurl.cpp

    r168188 r222269  
    55 * Copyright (C) 2007 Holger Hans Peter Freyther
    66 * Copyright (C) 2008 Collabora Ltd.
     7 * Copyright (C) 2017 Sony Interactive Entertainment Inc.
    78 * All rights reserved.
    89 *
     
    3031
    3132#include "config.h"
     33#include "FormDataStreamCurl.h"
    3234
    3335#if USE(CURL)
    3436
    35 #include "FormDataStreamCurl.h"
    36 
    3737#include "FormData.h"
    38 #include "ResourceRequest.h"
    39 #include <wtf/text/CString.h>
    4038
    4139namespace WebCore {
     
    5452
    5553    Vector<FormDataElement> elements;
    56     if (m_resourceHandle->firstRequest().httpBody())
    57         elements = m_resourceHandle->firstRequest().httpBody()->elements();
     54    if (m_formData)
     55        elements = m_formData->elements();
    5856
    5957    if (m_formDataElementIndex >= elements.size())
     
    108106{
    109107    Vector<FormDataElement> elements;
    110     if (m_resourceHandle->firstRequest().httpBody())
    111         elements = m_resourceHandle->firstRequest().httpBody()->elements();
     108    if (m_formData)
     109        elements = m_formData->elements();
    112110
    113111    return m_formDataElementIndex < elements.size();
  • trunk/Source/WebCore/platform/network/curl/FormDataStreamCurl.h

    r165676 r222269  
    11/*
    22 * Copyright (C) 2008 Apple Inc.  All rights reserved.
     3 * Copyright (C) 2017 Sony Interactive Entertainment Inc.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    2324 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2425 */
    25 #ifndef FormDataStreamCurl_h
    26 #define FormDataStreamCurl_h
    2726
    28 #include "config.h"
     27#pragma once
    2928
    30 #include "FileSystem.h"
    31 #include "ResourceHandle.h"
    3229#include <stdio.h>
    3330
    3431namespace WebCore {
    3532
     33class FormData;
     34
    3635class FormDataStream {
    3736public:
    38     FormDataStream(ResourceHandle* handle)
    39         : m_resourceHandle(handle)
    40         , m_file(0)
    41         , m_formDataElementIndex(0)
    42         , m_formDataElementDataOffset(0)
    43     {
    44     }
    45 
     37    FormDataStream() = default;
    4638    ~FormDataStream();
    4739
     40    void setHTTPBody(FormData* formData) { m_formData = formData; }
    4841    size_t read(void* ptr, size_t blockSize, size_t numberOfBlocks);
    4942    bool hasMoreElements() const;
    5043
    5144private:
    52     // We can hold a weak reference to our ResourceHandle as it holds a strong reference
    53     // to us through its ResourceHandleInternal.
    54     ResourceHandle* m_resourceHandle;
     45    // We can hold a weak reference to our ResourceRequest as it holds a strong reference
     46    // to us through its owner.
     47    FormData* m_formData { };
    5548
    56     FILE* m_file;
    57     size_t m_formDataElementIndex;
    58     size_t m_formDataElementDataOffset;
     49    FILE* m_file { };
     50    size_t m_formDataElementIndex { 0 };
     51    size_t m_formDataElementDataOffset { 0 };
    5952};
    6053
    6154} // namespace WebCore
    62 
    63 #endif // FormDataStreamCurl_h
  • trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp

    r222223 r222269  
    5050ResourceHandleCurlDelegate::ResourceHandleCurlDelegate(ResourceHandle* handle)
    5151    : m_handle(handle)
    52     , m_formDataStream(handle)
    5352    , m_firstRequest(handle->firstRequest().isolatedCopy())
    5453    , m_customHTTPHeaderFields(m_firstRequest.httpHeaderFields().isolatedCopy())
     
    428427    std::unique_lock<Lock> lock(m_workerThreadMutex);
    429428
    430     if (!m_formDataStream.hasMoreElements())
    431         return;
    432 
    433     size_t size = m_formDataStream.read(buffer, blockSize, numberOfBlocks);
     429    if (!m_formDataStream || !m_formDataStream->hasMoreElements()) {
     430        m_workerThreadConditionVariable.notifyOne();
     431        return;
     432    }
     433
     434    size_t size = m_formDataStream->read(buffer, blockSize, numberOfBlocks);
    434435    if (!size) {
    435436        // Something went wrong so cancel the job.
    436437        m_handle->cancel();
     438        m_workerThreadConditionVariable.notifyOne();
    437439        return;
    438440    }
     
    445447{
    446448    response().setDeprecatedNetworkLoadMetrics(networkLoadMetrics);
     449
     450    m_formDataStream = nullptr;
    447451
    448452    if (!m_handle)
     
    466470void ResourceHandleCurlDelegate::didFail(const ResourceError& resourceError)
    467471{
     472    m_formDataStream = nullptr;
     473
    468474    if (!m_handle)
    469475        return;
     
    621627    }
    622628
     629    m_formDataStream = std::make_unique<FormDataStream>();
     630    m_formDataStream->setHTTPBody(m_firstRequest.httpBody());
     631
    623632    m_curlHandle.setReadCallbackFunction(willSendDataCallback, this);
    624633}
  • trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h

    r222223 r222269  
    4343class MultipartHandle;
    4444class ProtectionSpace;
     45class ResourceError;
    4546class ResourceHandle;
    4647class ThreadSafeDataBuffer;
     
    105106    // Used by main thread.
    106107    ResourceHandle* m_handle;
    107     FormDataStream m_formDataStream;
     108    std::unique_ptr<FormDataStream> m_formDataStream;
    108109    std::unique_ptr<MultipartHandle> m_multipartHandle;
    109110    unsigned short m_authFailureCount { 0 };
Note: See TracChangeset for help on using the changeset viewer.