Changeset 246466 in webkit


Ignore:
Timestamp:
Jun 15, 2019 11:20:27 AM (5 years ago)
Author:
commit-queue@webkit.org
Message:

Source/WebCore:
Add tests for prefetch redirects
https://bugs.webkit.org/show_bug.cgi?id=197371

Patch by Rob Buis <rbuis@igalia.com> on 2019-06-15
Reviewed by Youenn Fablet.

Test: http/wpt/prefetch/link-prefetch-main-resource-redirect.html

Allow clearing of the Purpose request header field.

  • platform/network/ResourceRequestBase.cpp:

(WebCore::ResourceRequestBase::clearPurpose):

  • platform/network/ResourceRequestBase.h:

Source/WebKit:
Store prefetch redirects in the prefetch cache
https://bugs.webkit.org/show_bug.cgi?id=197371

Patch by Rob Buis <rbuis@igalia.com> on 2019-06-15
Reviewed by Youenn Fablet.

Store prefetch redirects in the prefetch cache and use them when
navigating.

  • NetworkProcess/NetworkResourceLoader.cpp:

(WebKit::NetworkResourceLoader::retrieveCacheEntry):
(WebKit::NetworkResourceLoader::willSendRedirectedRequest):
(WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):

  • NetworkProcess/NetworkResourceLoader.h:
  • NetworkProcess/cache/PrefetchCache.cpp:

(WebKit::PrefetchCache::Entry::Entry):
(WebKit::PrefetchCache::storeRedirect):

  • NetworkProcess/cache/PrefetchCache.h:

LayoutTests:
Add tests for prefetch redirects
https://bugs.webkit.org/show_bug.cgi?id=197371

Patch by Rob Buis <rbuis@igalia.com> on 2019-06-15
Reviewed by Youenn Fablet.

Add a test to verify prefetch redirections are cached in the prefetch
cache and reused when navigating.

  • http/wpt/prefetch/link-prefetch-main-resource-redirect-expected.txt: Added.
  • http/wpt/prefetch/link-prefetch-main-resource-redirect.html: Added.
  • http/wpt/prefetch/resources/main-resource-redirect-no-prefetch.py: Added.

(main):

  • http/wpt/prefetch/resources/navigate.html: Added.
  • http/wpt/prefetch/resources/prefetched-main-resource-redirect.py: Added.

(main):

  • platform/mac-wk1/TestExpectations:
  • platform/win/TestExpectations:
Location:
trunk
Files:
7 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r246465 r246466  
     12019-06-15  Rob Buis  <rbuis@igalia.com>
     2
     3        Add tests for prefetch redirects
     4        https://bugs.webkit.org/show_bug.cgi?id=197371
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Add a test to verify prefetch redirections are cached in the prefetch
     9        cache and reused when navigating.
     10
     11        * http/wpt/prefetch/link-prefetch-main-resource-redirect-expected.txt: Added.
     12        * http/wpt/prefetch/link-prefetch-main-resource-redirect.html: Added.
     13        * http/wpt/prefetch/resources/main-resource-redirect-no-prefetch.py: Added.
     14        (main):
     15        * http/wpt/prefetch/resources/navigate.html: Added.
     16        * http/wpt/prefetch/resources/prefetched-main-resource-redirect.py: Added.
     17        (main):
     18        * platform/mac-wk1/TestExpectations:
     19        * platform/win/TestExpectations:
     20
    1212019-06-15  Saam Barati  <sbarati@apple.com>
    222
  • trunk/LayoutTests/platform/mac-wk1/TestExpectations

    r246429 r246466  
    734734webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ]
    735735
     736webkit.org/b/197371 http/wpt/prefetch/link-prefetch-main-resource-redirect.html [ Skip ]
     737
    736738webkit.org/b/198177 pointerevents/mouse/compatibility-mouse-events-prevention-mouse-pressed.html [ Skip ]
    737739
  • trunk/LayoutTests/platform/win/TestExpectations

    r246433 r246466  
    44174417webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ]
    44184418
     4419webkit.org/b/197371 http/wpt/prefetch/link-prefetch-main-resource-redirect.html [ Skip ]
     4420
    44194421webkit.org/b/198112 http/tests/security/showModalDialog-sync-cross-origin-page-load2.html [ Skip ]
    44204422
  • trunk/Source/WebCore/ChangeLog

    r246464 r246466  
     12019-06-15  Rob Buis  <rbuis@igalia.com>
     2
     3        Add tests for prefetch redirects
     4        https://bugs.webkit.org/show_bug.cgi?id=197371
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Test: http/wpt/prefetch/link-prefetch-main-resource-redirect.html
     9
     10        Allow clearing of the Purpose request header field.
     11
     12        * platform/network/ResourceRequestBase.cpp:
     13        (WebCore::ResourceRequestBase::clearPurpose):
     14        * platform/network/ResourceRequestBase.h:
     15
    1162019-06-15  Zalan Bujtas  <zalan@apple.com>
    217
  • trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp

    r242891 r246466  
    358358}
    359359
     360void ResourceRequestBase::clearPurpose()
     361{
     362    updateResourceRequest();
     363
     364    m_httpHeaderFields.remove(HTTPHeaderName::Purpose);
     365
     366    m_platformRequestUpdated = false;
     367}
     368
    360369String ResourceRequestBase::httpReferrer() const
    361370{
  • trunk/Source/WebCore/platform/network/ResourceRequestBase.h

    r242899 r246466  
    141141    void clearHTTPAcceptEncoding();
    142142
     143    WEBCORE_EXPORT void clearPurpose();
     144
    143145    const Vector<String>& responseContentDispositionEncodingFallbackArray() const { return m_responseContentDispositionEncodingFallbackArray; }
    144146    WEBCORE_EXPORT void setResponseContentDispositionEncodingFallbackArray(const String& encoding1, const String& encoding2 = String(), const String& encoding3 = String());
  • trunk/Source/WebKit/ChangeLog

    r246456 r246466  
     12019-06-15  Rob Buis  <rbuis@igalia.com>
     2
     3        Store prefetch redirects in the prefetch cache
     4        https://bugs.webkit.org/show_bug.cgi?id=197371
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Store prefetch redirects in the prefetch cache and use them when
     9        navigating.
     10
     11        * NetworkProcess/NetworkResourceLoader.cpp:
     12        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
     13        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
     14        (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
     15        * NetworkProcess/NetworkResourceLoader.h:
     16        * NetworkProcess/cache/PrefetchCache.cpp:
     17        (WebKit::PrefetchCache::Entry::Entry):
     18        (WebKit::PrefetchCache::storeRedirect):
     19        * NetworkProcess/cache/PrefetchCache.h:
     20
    1212019-06-14  Devin Rousso  <drousso@apple.com>
    222
  • trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp

    r245796 r246466  
    215215        ASSERT(m_parameters.options.mode == FetchOptions::Mode::Navigate);
    216216        if (auto session = m_connection->networkProcess().networkSession(sessionID())) {
    217             if (auto entry = session->prefetchCache().take(request.url()))
    218                 m_cache->store(request, entry->response, entry->releaseBuffer(), nullptr);
     217            if (auto entry = session->prefetchCache().take(request.url())) {
     218                if (!entry->redirectRequest.isNull()) {
     219                    auto maxAgeCap = validateCacheEntryForMaxAgeCapValidation(request, entry->redirectRequest, entry->response);
     220                    m_cache->storeRedirect(request, entry->response, entry->redirectRequest, maxAgeCap);
     221                } else
     222                    m_cache->store(request, entry->response, entry->releaseBuffer(), nullptr);
     223            }
    219224        }
    220225    }
     
    641646
    642647            if (m_parameters.options.redirect == FetchOptions::Redirect::Manual) {
    643                 this->didFinishWithRedirectResponse(WTFMove(result->redirectResponse));
     648                this->didFinishWithRedirectResponse(WTFMove(result->request), WTFMove(result->redirectRequest), WTFMove(result->redirectResponse));
    644649                return;
    645650            }
     
    682687}
    683688
    684 void NetworkResourceLoader::didFinishWithRedirectResponse(ResourceResponse&& redirectResponse)
     689void NetworkResourceLoader::didFinishWithRedirectResponse(WebCore::ResourceRequest&& request, WebCore::ResourceRequest&& redirectRequest, ResourceResponse&& redirectResponse)
    685690{
    686691    redirectResponse.setType(ResourceResponse::Type::Opaqueredirect);
    687     didReceiveResponse(WTFMove(redirectResponse), [] (auto) { });
     692    if (!isCrossOriginPrefetch())
     693        didReceiveResponse(WTFMove(redirectResponse), [] (auto) { });
     694    else if (auto session = m_connection->networkProcess().networkSession(sessionID()))
     695        session->prefetchCache().storeRedirect(m_networkLoad->currentRequest().url(), WTFMove(redirectResponse), WTFMove(redirectRequest));
    688696
    689697    WebCore::NetworkLoadMetrics networkLoadMetrics;
  • trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h

    r245796 r246466  
    165165
    166166    void continueWillSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&, Optional<WebCore::AdClickAttribution::Conversion>&&);
    167     void didFinishWithRedirectResponse(WebCore::ResourceResponse&&);
     167    void didFinishWithRedirectResponse(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&);
    168168    WebCore::ResourceResponse sanitizeResponseIfPossible(WebCore::ResourceResponse&&, WebCore::ResourceResponse::SanitizationType);
    169169
  • trunk/Source/WebKit/NetworkProcess/cache/PrefetchCache.cpp

    r245171 r246466  
    3333PrefetchCache::Entry::Entry(WebCore::ResourceResponse&& response, RefPtr<WebCore::SharedBuffer>&& buffer)
    3434    : response(WTFMove(response)), buffer(WTFMove(buffer))
     35{
     36}
     37
     38PrefetchCache::Entry::Entry(WebCore::ResourceResponse&& redirectResponse, WebCore::ResourceRequest&& redirectRequest)
     39    : response(WTFMove(redirectResponse)), redirectRequest(WTFMove(redirectRequest))
    3540{
    3641}
     
    7984}
    8085
     86void PrefetchCache::storeRedirect(const URL& requestUrl, WebCore::ResourceResponse&& redirectResponse, WebCore::ResourceRequest&& redirectRequest)
     87{
     88    if (!m_sessionPrefetches)
     89        m_sessionPrefetches = std::make_unique<PrefetchEntriesMap>();
     90    redirectRequest.clearPurpose();
     91    m_sessionPrefetches->set(requestUrl, std::make_unique<PrefetchCache::Entry>(WTFMove(redirectResponse), WTFMove(redirectRequest)));
     92    m_sessionExpirationList.append(std::make_tuple(requestUrl, WallTime::now()));
     93    if (!m_expirationTimer.isActive())
     94        m_expirationTimer.startOneShot(expirationTimeout);
     95}
     96
    8197void PrefetchCache::clearExpiredEntries()
    8298{
  • trunk/Source/WebKit/NetworkProcess/cache/PrefetchCache.h

    r245053 r246466  
    2626#pragma once
    2727
     28#include <WebCore/ResourceRequest.h>
    2829#include <WebCore/ResourceResponse.h>
    2930#include <WebCore/SharedBuffer.h>
     
    4748    struct Entry {
    4849        Entry(WebCore::ResourceResponse&&, RefPtr<WebCore::SharedBuffer>&&);
     50        Entry(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&);
    4951
    5052        Ref<WebCore::SharedBuffer> releaseBuffer() { return buffer.releaseNonNull(); }
     
    5254        WebCore::ResourceResponse response;
    5355        RefPtr<WebCore::SharedBuffer> buffer;
     56        WebCore::ResourceRequest redirectRequest;
    5457    };
    5558
    5659    std::unique_ptr<Entry> take(const URL&);
    5760    void store(const URL&, WebCore::ResourceResponse&&, RefPtr<WebCore::SharedBuffer>&&);
     61    void storeRedirect(const URL&, WebCore::ResourceResponse&&, WebCore::ResourceRequest&&);
    5862
    5963private:
Note: See TracChangeset for help on using the changeset viewer.