⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 227625 in webkit


Ignore:
Timestamp:
Jan 25, 2018, 1:26:36 PM (9 years ago)
Author:
commit-queue@webkit.org
Message:

DocumentLoader should interrupt ongoing load when getting a redirection from network that matches a service worker
​https://bugs.webkit.org/show_bug.cgi?id=182115

Patch by Youenn Fablet <​youenn@apple.com> on 2018-01-25
Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

  • web-platform-tests/service-workers/service-worker/navigation-redirect.https-expected.txt:

Source/WebCore:

Covered by rebased test.

In case a navigation load is going to the network process,
we need to interrupt it if having a redirection that leads to a new request going to a service worker.

  • loader/DocumentLoader.cpp:

(WebCore::DocumentLoader::redirectReceived):

Source/WebKit:

  • WebProcess/Storage/ServiceWorkerClientFetch.cpp:

(WebKit::ServiceWorkerClientFetch::didReceiveResponse):

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r227624 r227625  
     12018-01-25  Youenn Fablet  <youenn@apple.com>
     2
     3        DocumentLoader should interrupt ongoing load when getting a redirection from network that matches a service worker
     4        https://bugs.webkit.org/show_bug.cgi?id=182115
     5
     6        Reviewed by Alex Christensen.
     7
     8        * web-platform-tests/service-workers/service-worker/navigation-redirect.https-expected.txt:
     9
    1102018-01-25  Chris Dumez  <cdumez@apple.com>
    211
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/navigation-redirect.https-expected.txt

    r227543 r227625  
    66PASS Normal redirect to other-origin scope.
    77PASS SW-fallbacked redirect to same-origin out-scope.
    8 FAIL SW-fallbacked redirect to same-origin same-scope. assert_object_equals: Intercepted URLs should match. expected property "1" missing
     8PASS SW-fallbacked redirect to same-origin same-scope.
    99PASS SW-fallbacked redirect to same-origin other-scope.
    1010PASS SW-fallbacked redirect to other-origin out-scope.
  • trunk/Source/WebCore/ChangeLog

    r227624 r227625  
     12018-01-25  Youenn Fablet  <youenn@apple.com>
     2
     3        DocumentLoader should interrupt ongoing load when getting a redirection from network that matches a service worker
     4        https://bugs.webkit.org/show_bug.cgi?id=182115
     5
     6        Reviewed by Alex Christensen.
     7
     8        Covered by rebased test.
     9
     10        In case a navigation load is going to the network process,
     11        we need to interrupt it if having a redirection that leads to a new request going to a service worker.
     12
     13        * loader/DocumentLoader.cpp:
     14        (WebCore::DocumentLoader::redirectReceived):
     15
    1162018-01-25  Chris Dumez  <cdumez@apple.com>
    217
  • trunk/Source/WebCore/loader/DocumentLoader.cpp

    r227531 r227625  
    518518    ASSERT_UNUSED(resource, &resource == m_mainResource);
    519519#if ENABLE(SERVICE_WORKER)
    520     willSendRequest(WTFMove(request), redirectResponse, [completionHandler = WTFMove(completionHandler), protectedThis = makeRef(*this), this] (auto&& request) mutable {
     520    bool isRedirectionFromServiceWorker = redirectResponse.source() == ResourceResponse::Source::ServiceWorker;
     521    willSendRequest(WTFMove(request), redirectResponse, [isRedirectionFromServiceWorker, completionHandler = WTFMove(completionHandler), protectedThis = makeRef(*this), this] (auto&& request) mutable {
    521522        if (request.isNull() || !m_mainDocumentError.isNull() || !m_frame) {
    522523            completionHandler({ });
    … …  
    524525        }
    525526        auto url = request.url();
    526         matchRegistration(url, [request = WTFMove(request), completionHandler = WTFMove(completionHandler), protectedThis = WTFMove(protectedThis), this] (auto&& registrationData) mutable {
     527        matchRegistration(url, [request = WTFMove(request), isRedirectionFromServiceWorker, completionHandler = WTFMove(completionHandler), protectedThis = WTFMove(protectedThis), this] (auto&& registrationData) mutable {
    527528            if (!m_mainDocumentError.isNull() || !m_frame) {
    528529                completionHandler({ });
    529530                return;
    530531            }
    531 
    532             if (areRegistrationsEqual(m_serviceWorkerRegistrationData, registrationData)) {
     532            bool shouldContinueLoad = areRegistrationsEqual(m_serviceWorkerRegistrationData, registrationData)
     533                && isRedirectionFromServiceWorker == !!registrationData;
     534
     535            if (shouldContinueLoad) {
    533536                completionHandler(WTFMove(request));
    534537                return;
  • trunk/Source/WebKit/ChangeLog

    r227621 r227625  
     12018-01-25  Youenn Fablet  <youenn@apple.com>
     2
     3        DocumentLoader should interrupt ongoing load when getting a redirection from network that matches a service worker
     4        https://bugs.webkit.org/show_bug.cgi?id=182115
     5
     6        Reviewed by Alex Christensen.
     7
     8        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
     9        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):
     10
    1112018-01-25  Alex Christensen  <achristensen@webkit.org>
    212
  • trunk/Source/WebKit/WebProcess/Storage/ServiceWorkerClientFetch.cpp

    r227531 r227625  
    109109        return;
    110110    }
     111    response.setSource(ResourceResponse::Source::ServiceWorker);
    111112
    112113    if (response.isRedirection()) {
    … …  
    135136        }
    136137    }
    137     response.setSource(ResourceResponse::Source::ServiceWorker);
    138138
    139139    // As per https://fetch.spec.whatwg.org/#main-fetch step 9, copy request's url list in response's url list if empty.
Note: See TracChangeset for help on using the changeset viewer.