Changeset 207407 in webkit


Ignore:
Timestamp:
Oct 17, 2016 4:59:58 AM (7 years ago)
Author:
Konstantin Tokarev
Message:

Eleminate code duplication between ResourceRequest encoding/decoding implementations
https://bugs.webkit.org/show_bug.cgi?id=163507

Reviewed by Carlos Garcia Campos.

ResourceRequestBase::encodeWithoutPlatformData() and Soup implementation of
ArgumentCoder<ResourceRequest>::encodePlatformData() share most of the code,
ditto for decoding implementations.

Source/WebCore:

No new tests needed.

  • platform/network/ResourceRequestBase.h:

(WebCore::ResourceRequestBase::encodeBase):
(WebCore::ResourceRequestBase::decodeBase):
(WebCore::ResourceRequestBase::encodeWithoutPlatformData):
(WebCore::ResourceRequestBase::decodeWithoutPlatformData):

  • platform/network/soup/ResourceRequest.h:

(WebCore::ResourceRequest::encodeWithPlatformData):
(WebCore::ResourceRequest::decodeWithPlatformData):

Source/WebKit2:

  • Shared/soup/WebCoreArgumentCodersSoup.cpp:

(IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
(IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):

Location:
trunk/Source
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r207406 r207407  
     12016-10-17  Konstantin Tokarev  <annulen@yandex.ru>
     2
     3        Eleminate code duplication between ResourceRequest encoding/decoding implementations
     4        https://bugs.webkit.org/show_bug.cgi?id=163507
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        ResourceRequestBase::encodeWithoutPlatformData() and Soup implementation of
     9        ArgumentCoder<ResourceRequest>::encodePlatformData() share most of the code,
     10        ditto for decoding implementations.
     11
     12        No new tests needed.
     13
     14        * platform/network/ResourceRequestBase.h:
     15        (WebCore::ResourceRequestBase::encodeBase):
     16        (WebCore::ResourceRequestBase::decodeBase):
     17        (WebCore::ResourceRequestBase::encodeWithoutPlatformData):
     18        (WebCore::ResourceRequestBase::decodeWithoutPlatformData):
     19        * platform/network/soup/ResourceRequest.h:
     20        (WebCore::ResourceRequest::encodeWithPlatformData):
     21        (WebCore::ResourceRequest::decodeWithPlatformData):
     22
    1232016-10-17  Michael Catanzaro  <mcatanzaro@igalia.com>
    224
  • trunk/Source/WebCore/platform/network/ResourceRequestBase.h

    r207330 r207407  
    207207    void updateResourceRequest(HTTPBodyUpdatePolicy = DoNotUpdateHTTPBody) const;
    208208
     209    template<class Encoder> void encodeBase(Encoder&) const;
     210    template<class Decoder> bool decodeBase(Decoder&);
     211
    209212    // The ResourceRequest subclass may "shadow" this method to compare platform specific fields
    210213    static bool platformCompare(const ResourceRequest&, const ResourceRequest&) { return true; }
     
    251254
    252255template<class Encoder>
    253 void ResourceRequestBase::encodeWithoutPlatformData(Encoder& encoder) const
     256ALWAYS_INLINE void ResourceRequestBase::encodeBase(Encoder& encoder) const
    254257{
    255     ASSERT(!m_httpBody);
    256     ASSERT(!m_platformRequestUpdated);
    257258    encoder << m_url;
    258259    encoder << m_timeoutInterval;
     
    268269
    269270template<class Decoder>
     271ALWAYS_INLINE bool ResourceRequestBase::decodeBase(Decoder& decoder)
     272{
     273    if (!decoder.decode(m_url))
     274        return false;
     275
     276    if (!decoder.decode(m_timeoutInterval))
     277        return false;
     278
     279    String firstPartyForCookies;
     280    if (!decoder.decode(firstPartyForCookies))
     281        return false;
     282    m_firstPartyForCookies = URL(ParsedURLString, firstPartyForCookies);
     283
     284    if (!decoder.decode(m_httpMethod))
     285        return false;
     286
     287    if (!decoder.decode(m_httpHeaderFields))
     288        return false;
     289
     290    if (!decoder.decode(m_responseContentDispositionEncodingFallbackArray))
     291        return false;
     292
     293    ResourceRequestCachePolicy cachePolicy;
     294    if (!decoder.decodeEnum(cachePolicy))
     295        return false;
     296    m_cachePolicy = cachePolicy;
     297
     298    bool allowCookies;
     299    if (!decoder.decode(allowCookies))
     300        return false;
     301    m_allowCookies = allowCookies;
     302
     303    ResourceLoadPriority priority;
     304    if (!decoder.decodeEnum(priority))
     305        return false;
     306    m_priority = priority;
     307
     308    if (!decoder.decodeEnum(m_requester))
     309        return false;
     310
     311    return true;
     312}
     313
     314template<class Encoder>
     315void ResourceRequestBase::encodeWithoutPlatformData(Encoder& encoder) const
     316{
     317    ASSERT(!m_httpBody);
     318    ASSERT(!m_platformRequestUpdated);
     319    encodeBase(encoder);
     320}
     321
     322template<class Decoder>
    270323bool ResourceRequestBase::decodeWithoutPlatformData(Decoder& decoder)
    271324{
    272     if (!decoder.decode(m_url))
    273         return false;
    274 
    275     if (!decoder.decode(m_timeoutInterval))
    276         return false;
    277 
    278     String firstPartyForCookies;
    279     if (!decoder.decode(firstPartyForCookies))
    280         return false;
    281     m_firstPartyForCookies = URL(ParsedURLString, firstPartyForCookies);
    282 
    283     if (!decoder.decode(m_httpMethod))
    284         return false;
    285 
    286     if (!decoder.decode(m_httpHeaderFields))
    287         return false;
    288 
    289     if (!decoder.decode(m_responseContentDispositionEncodingFallbackArray))
    290         return false;
    291 
    292     ResourceRequestCachePolicy cachePolicy;
    293     if (!decoder.decodeEnum(cachePolicy))
    294         return false;
    295     m_cachePolicy = cachePolicy;
    296 
    297     bool allowCookies;
    298     if (!decoder.decode(allowCookies))
    299         return false;
    300     m_allowCookies = allowCookies;
    301 
    302     ResourceLoadPriority priority;
    303     if (!decoder.decodeEnum(priority))
    304         return false;
    305     m_priority = priority;
    306 
    307     if (!decoder.decodeEnum(m_requester))
    308         return false;
    309 
    310     return true;
     325    return decodeBase(decoder);
    311326}
    312327
  • trunk/Source/WebCore/platform/network/soup/ResourceRequest.h

    r206805 r207407  
    107107        GUniquePtr<SoupURI> createSoupURI() const;
    108108
     109        template<class Encoder> void encodeWithPlatformData(Encoder&) const;
     110        template<class Decoder> bool decodeWithPlatformData(Decoder&);
     111
    109112    private:
    110113        friend class ResourceRequestBase;
     
    123126        void doPlatformSetAsIsolatedCopy(const ResourceRequest&) { }
    124127    };
     128
     129template<class Encoder>
     130void ResourceRequest::encodeWithPlatformData(Encoder& encoder) const
     131{
     132    encodeBase(encoder);
     133
     134    // FIXME: Do not encode HTTP message body.
     135    // 1. It can be large and thus costly to send across.
     136    // 2. It is misleading to provide a body with some requests, while others use body streams, which cannot be serialized at all.
     137    encoder << static_cast<bool>(m_httpBody);
     138    if (m_httpBody)
     139        encoder << m_httpBody->flattenToString();
     140
     141    encoder << static_cast<uint32_t>(m_soupFlags);
     142    encoder << m_initiatingPageID;
     143}
     144
     145template<class Decoder>
     146bool ResourceRequest::decodeWithPlatformData(Decoder& decoder)
     147{
     148    if (!decodeBase(decoder))
     149        return false;
     150
     151    bool hasHTTPBody;
     152    if (!decoder.decode(hasHTTPBody))
     153        return false;
     154    if (hasHTTPBody) {
     155        String httpBody;
     156        if (!decoder.decode(httpBody))
     157            return false;
     158        setHTTPBody(FormData::create(httpBody.utf8()));
     159    }
     160
     161    uint32_t soupMessageFlags;
     162    if (!decoder.decode(soupMessageFlags))
     163        return false;
     164    m_soupFlags = static_cast<SoupMessageFlags>(soupMessageFlags);
     165
     166    uint64_t initiatingPageID;
     167    if (!decoder.decode(initiatingPageID))
     168        return false;
     169    m_initiatingPageID = initiatingPageID;
     170
     171    return true;
     172}
     173
    125174
    126175#if SOUP_CHECK_VERSION(2, 43, 1)
  • trunk/Source/WebKit2/ChangeLog

    r207406 r207407  
     12016-10-17  Konstantin Tokarev  <annulen@yandex.ru>
     2
     3        Eleminate code duplication between ResourceRequest encoding/decoding implementations
     4        https://bugs.webkit.org/show_bug.cgi?id=163507
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        ResourceRequestBase::encodeWithoutPlatformData() and Soup implementation of
     9        ArgumentCoder<ResourceRequest>::encodePlatformData() share most of the code,
     10        ditto for decoding implementations.
     11
     12        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
     13        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
     14        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):
     15
    1162016-10-17  Michael Catanzaro  <mcatanzaro@igalia.com>
    217
  • trunk/Source/WebKit2/Shared/soup/WebCoreArgumentCodersSoup.cpp

    r204678 r207407  
    4242void ArgumentCoder<ResourceRequest>::encodePlatformData(Encoder& encoder, const ResourceRequest& resourceRequest)
    4343{
    44     encoder << resourceRequest.url().string();
    45     encoder << resourceRequest.httpMethod();
    46     encoder << resourceRequest.httpHeaderFields();
    47     encoder << resourceRequest.timeoutInterval();
    48 
    49     // FIXME: Do not encode HTTP message body.
    50     // 1. It can be large and thus costly to send across.
    51     // 2. It is misleading to provide a body with some requests, while others use body streams, which cannot be serialized at all.
    52     FormData* httpBody = resourceRequest.httpBody();
    53     encoder << static_cast<bool>(httpBody);
    54     if (httpBody)
    55         encoder << httpBody->flattenToString();
    56 
    57     encoder << resourceRequest.firstPartyForCookies().string();
    58     encoder << resourceRequest.allowCookies();
    59     encoder.encodeEnum(resourceRequest.priority());
    60     encoder.encodeEnum(resourceRequest.cachePolicy());
    61     encoder.encodeEnum(resourceRequest.requester());
    62 
    63     encoder << static_cast<uint32_t>(resourceRequest.soupMessageFlags());
    64     encoder << resourceRequest.initiatingPageID();
     44    resourceRequest.encodeWithPlatformData(encoder);
    6545}
    6646
    6747bool ArgumentCoder<ResourceRequest>::decodePlatformData(Decoder& decoder, ResourceRequest& resourceRequest)
    6848{
    69     String url;
    70     if (!decoder.decode(url))
    71         return false;
    72     resourceRequest.setURL(URL(URL(), url));
    73 
    74     String httpMethod;
    75     if (!decoder.decode(httpMethod))
    76         return false;
    77     resourceRequest.setHTTPMethod(httpMethod);
    78 
    79     HTTPHeaderMap headers;
    80     if (!decoder.decode(headers))
    81         return false;
    82     resourceRequest.setHTTPHeaderFields(WTFMove(headers));
    83 
    84     double timeoutInterval;
    85     if (!decoder.decode(timeoutInterval))
    86         return false;
    87     resourceRequest.setTimeoutInterval(timeoutInterval);
    88 
    89     bool hasHTTPBody;
    90     if (!decoder.decode(hasHTTPBody))
    91         return false;
    92     if (hasHTTPBody) {
    93         String httpBody;
    94         if (!decoder.decode(httpBody))
    95             return false;
    96         resourceRequest.setHTTPBody(FormData::create(httpBody.utf8()));
    97     }
    98 
    99     String firstPartyForCookies;
    100     if (!decoder.decode(firstPartyForCookies))
    101         return false;
    102     resourceRequest.setFirstPartyForCookies(URL(URL(), firstPartyForCookies));
    103 
    104     bool allowCookies;
    105     if (!decoder.decode(allowCookies))
    106         return false;
    107     resourceRequest.setAllowCookies(allowCookies);
    108 
    109     ResourceLoadPriority priority;
    110     if (!decoder.decodeEnum(priority))
    111         return false;
    112     resourceRequest.setPriority(priority);
    113 
    114     ResourceRequestCachePolicy cachePolicy;
    115     if (!decoder.decodeEnum(cachePolicy))
    116         return false;
    117     resourceRequest.setCachePolicy(cachePolicy);
    118 
    119     ResourceRequest::Requester requester;
    120     if (!decoder.decodeEnum(requester))
    121         return false;
    122     resourceRequest.setRequester(requester);
    123 
    124     uint32_t soupMessageFlags;
    125     if (!decoder.decode(soupMessageFlags))
    126         return false;
    127     resourceRequest.setSoupMessageFlags(static_cast<SoupMessageFlags>(soupMessageFlags));
    128 
    129     uint64_t initiatingPageID;
    130     if (!decoder.decode(initiatingPageID))
    131         return false;
    132     resourceRequest.setInitiatingPageID(initiatingPageID);
    133 
    134     return true;
     49    return resourceRequest.decodeWithPlatformData(decoder);
    13550}
    13651
Note: See TracChangeset for help on using the changeset viewer.