Changeset 293418 in webkit


Ignore:
Timestamp:
Apr 26, 2022 12:34:40 AM (3 months ago)
Author:
youenn@apple.com
Message:

Service Worker loads should not expose some ResourceTiming information
https://bugs.webkit.org/show_bug.cgi?id=239608

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

  • web-platform-tests/service-workers/service-worker/resource-timing-fetch-variants.https-expected.txt:

Source/WebCore:

Filter out some resource timing info when the load is served from a service worker.
While we could do the filtering on service worker side, it is best to do it within PerformanceResourceTiming
as native clients might still want to use non filtered data in case the service worker is returning a network load
as the response.

Covered by rebased test.

  • loader/ResourceTiming.cpp:

(WebCore::ResourceTiming::ResourceTiming):

  • loader/ResourceTiming.h:

(WebCore::ResourceTiming::isLoadedFromServiceWorker const):

  • page/PerformanceResourceTiming.cpp:

(WebCore::PerformanceResourceTiming::nextHopProtocol const):
(WebCore::PerformanceResourceTiming::redirectStart const):
(WebCore::PerformanceResourceTiming::redirectEnd const):
(WebCore::PerformanceResourceTiming::domainLookupStart const):
(WebCore::PerformanceResourceTiming::domainLookupEnd const):
(WebCore::PerformanceResourceTiming::connectStart const):
(WebCore::PerformanceResourceTiming::connectEnd const):

  • page/PerformanceResourceTiming.h:

(WebCore::PerformanceResourceTiming::isLoadedFromServiceWorker const):

LayoutTests:

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r293409 r293418  
     12022-04-26  Youenn Fablet  <youenn@apple.com>
     2
     3        Service Worker loads should not expose some ResourceTiming information
     4        https://bugs.webkit.org/show_bug.cgi?id=239608
     5
     6        Reviewed by Alex Christensen.
     7
     8        * TestExpectations:
     9
    1102022-04-25  Devin Rousso  <drousso@apple.com>
    211
  • trunk/LayoutTests/TestExpectations

    r293114 r293418  
    855855imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/anonymous-iframe/sharedworker-partitioning.tentative.https.window.html [ Failure Pass ]
    856856imported/w3c/web-platform-tests/service-workers/service-worker/navigation-timing-extended.https.html [ Failure Pass ]
    857 imported/w3c/web-platform-tests/service-workers/service-worker/resource-timing-fetch-variants.https.html [ Failure Pass ]
    858857imported/w3c/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html [ Failure Pass ]
    859858
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r293417 r293418  
     12022-04-26  Youenn Fablet  <youenn@apple.com>
     2
     3        Service Worker loads should not expose some ResourceTiming information
     4        https://bugs.webkit.org/show_bug.cgi?id=239608
     5
     6        Reviewed by Alex Christensen.
     7
     8        * web-platform-tests/service-workers/service-worker/resource-timing-fetch-variants.https-expected.txt:
     9
    1102022-04-25  Youenn Fablet  <youenn@apple.com>
    211
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/resource-timing-fetch-variants.https-expected.txt

    r289558 r293418  
    11
    2 FAIL Redirects done from within a service-worker should not be exposed to client ResourceTiming assert_equals: expected (number) 0 but got (string) "same"
     2PASS Redirects done from within a service-worker should not be exposed to client ResourceTiming
    33PASS Connection info from within a service-worker should not be exposed to client ResourceTiming
    44PASS requestStart should never be before fetchStart
  • trunk/Source/WebCore/ChangeLog

    r293417 r293418  
     12022-04-26  Youenn Fablet  <youenn@apple.com>
     2
     3        Service Worker loads should not expose some ResourceTiming information
     4        https://bugs.webkit.org/show_bug.cgi?id=239608
     5
     6        Reviewed by Alex Christensen.
     7
     8        Filter out some resource timing info when the load is served from a service worker.
     9        While we could do the filtering on service worker side, it is best to do it within PerformanceResourceTiming
     10        as native clients might still want to use non filtered data in case the service worker is returning a network load
     11        as the response.
     12
     13        Covered by rebased test.
     14
     15        * loader/ResourceTiming.cpp:
     16        (WebCore::ResourceTiming::ResourceTiming):
     17        * loader/ResourceTiming.h:
     18        (WebCore::ResourceTiming::isLoadedFromServiceWorker const):
     19        * page/PerformanceResourceTiming.cpp:
     20        (WebCore::PerformanceResourceTiming::nextHopProtocol const):
     21        (WebCore::PerformanceResourceTiming::redirectStart const):
     22        (WebCore::PerformanceResourceTiming::redirectEnd const):
     23        (WebCore::PerformanceResourceTiming::domainLookupStart const):
     24        (WebCore::PerformanceResourceTiming::domainLookupEnd const):
     25        (WebCore::PerformanceResourceTiming::connectStart const):
     26        (WebCore::PerformanceResourceTiming::connectEnd const):
     27        * page/PerformanceResourceTiming.h:
     28        (WebCore::PerformanceResourceTiming::isLoadedFromServiceWorker const):
     29
    1302022-04-25  Youenn Fablet  <youenn@apple.com>
    231
  • trunk/Source/WebCore/loader/ResourceTiming.cpp

    r290901 r293418  
    5757    , m_resourceLoadTiming(timing)
    5858    , m_networkLoadMetrics(networkLoadMetrics)
     59    , m_isLoadedFromServiceWorker(response.source() == ResourceResponse::Source::ServiceWorker)
    5960{
    6061    if (RuntimeEnabledFeatures::sharedFeatures().serverTimingEnabled() && !m_networkLoadMetrics.failsTAOCheck)
  • trunk/Source/WebCore/loader/ResourceTiming.h

    r290901 r293418  
    5656
    5757    void overrideInitiatorName(const String& name) { m_initiator = name; }
     58    bool isLoadedFromServiceWorker() const { return m_isLoadedFromServiceWorker; }
    5859
    5960private:
     
    7374    NetworkLoadMetrics m_networkLoadMetrics;
    7475    Vector<ServerTiming> m_serverTiming;
     76    bool m_isLoadedFromServiceWorker { false };
    7577};
    7678
  • trunk/Source/WebCore/page/PerformanceResourceTiming.cpp

    r289494 r293418  
    117117        return 0.0;
    118118
     119    if (m_resourceTiming.isLoadedFromServiceWorker())
     120        return 0.0;
     121
    119122    if (!m_resourceTiming.networkLoadMetrics().redirectCount)
    120123        return 0.0;
     
    126129{
    127130    if (m_resourceTiming.networkLoadMetrics().failsTAOCheck)
     131        return 0.0;
     132
     133    if (m_resourceTiming.isLoadedFromServiceWorker())
    128134        return 0.0;
    129135
     
    146152        return 0.0;
    147153
     154    if (m_resourceTiming.isLoadedFromServiceWorker())
     155        return fetchStart();
     156
    148157    if (!m_resourceTiming.networkLoadMetrics().domainLookupStart)
    149158        return fetchStart();
     
    156165    if (m_resourceTiming.networkLoadMetrics().failsTAOCheck)
    157166        return 0.0;
     167
     168    if (m_resourceTiming.isLoadedFromServiceWorker())
     169        return fetchStart();
    158170
    159171    if (!m_resourceTiming.networkLoadMetrics().domainLookupEnd)
     
    168180        return 0.0;
    169181
     182    if (m_resourceTiming.isLoadedFromServiceWorker())
     183        return fetchStart();
     184
    170185    if (!m_resourceTiming.networkLoadMetrics().connectStart)
    171186        return domainLookupEnd();
     
    178193    if (m_resourceTiming.networkLoadMetrics().failsTAOCheck)
    179194        return 0.0;
     195
     196    if (m_resourceTiming.isLoadedFromServiceWorker())
     197        return fetchStart();
    180198
    181199    if (!m_resourceTiming.networkLoadMetrics().connectEnd)
  • trunk/Source/WebCore/page/PerformanceResourceTiming.h

    r281860 r293418  
    7575    ~PerformanceResourceTiming();
    7676
     77    bool isLoadedFromServiceWorker() const { return m_resourceTiming.isLoadedFromServiceWorker(); }
     78
    7779    MonotonicTime m_timeOrigin;
    7880    ResourceTiming m_resourceTiming;
Note: See TracChangeset for help on using the changeset viewer.