Changeset 231813 in webkit


Ignore:
Timestamp:
May 15, 2018 12:24:30 PM (6 years ago)
Author:
commit-queue@webkit.org
Message:

Add the PerformanceServerTiming Interface which makes Server-Timing header timing values available to JavaScript running in the browser.
https://bugs.webkit.org/show_bug.cgi?id=175569

Patch by Charles Vazac <cvazac@gmail.com> on 2018-05-15
Reviewed by Youenn Fablet.

Tests were imported from web-platform-tests: WebKit/LayoutTests/imported/w3c/web-platform-tests/server-timing/*

LayoutTests/imported/w3c:

  • web-platform-tests/server-timing/cross_origin.html: Added.
  • web-platform-tests/server-timing/navigation_timing_idl.html: Added.
  • web-platform-tests/server-timing/navigation_timing_idl.https.html: Added.
  • web-platform-tests/server-timing/resources/blue.png: Added.
  • web-platform-tests/server-timing/resources/blue.png.sub.headers: Added.
  • web-platform-tests/server-timing/resources/blue_tao.png: Added.
  • web-platform-tests/server-timing/resources/blue_tao.png.sub.headers: Added.
  • web-platform-tests/server-timing/resources/green.png: Added.
  • web-platform-tests/server-timing/resources/green.png.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/0.js: Added.
  • web-platform-tests/server-timing/resources/parsing/0.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/1.js: Added.
  • web-platform-tests/server-timing/resources/parsing/1.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/10.js: Added.
  • web-platform-tests/server-timing/resources/parsing/10.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/11.js: Added.
  • web-platform-tests/server-timing/resources/parsing/11.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/12.js: Added.
  • web-platform-tests/server-timing/resources/parsing/12.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/13.js: Added.
  • web-platform-tests/server-timing/resources/parsing/13.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/14.js: Added.
  • web-platform-tests/server-timing/resources/parsing/14.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/15.js: Added.
  • web-platform-tests/server-timing/resources/parsing/15.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/16.js: Added.
  • web-platform-tests/server-timing/resources/parsing/16.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/17.js: Added.
  • web-platform-tests/server-timing/resources/parsing/17.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/18.js: Added.
  • web-platform-tests/server-timing/resources/parsing/18.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/19.js: Added.
  • web-platform-tests/server-timing/resources/parsing/19.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/2.js: Added.
  • web-platform-tests/server-timing/resources/parsing/2.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/20.js: Added.
  • web-platform-tests/server-timing/resources/parsing/20.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/21.js: Added.
  • web-platform-tests/server-timing/resources/parsing/21.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/22.js: Added.
  • web-platform-tests/server-timing/resources/parsing/22.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/23.js: Added.
  • web-platform-tests/server-timing/resources/parsing/23.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/24.js: Added.
  • web-platform-tests/server-timing/resources/parsing/24.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/25.js: Added.
  • web-platform-tests/server-timing/resources/parsing/25.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/26.js: Added.
  • web-platform-tests/server-timing/resources/parsing/26.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/27.js: Added.
  • web-platform-tests/server-timing/resources/parsing/27.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/28.js: Added.
  • web-platform-tests/server-timing/resources/parsing/28.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/29.js: Added.
  • web-platform-tests/server-timing/resources/parsing/29.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/3.js: Added.
  • web-platform-tests/server-timing/resources/parsing/3.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/30.js: Added.
  • web-platform-tests/server-timing/resources/parsing/30.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/31.js: Added.
  • web-platform-tests/server-timing/resources/parsing/31.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/32.js: Added.
  • web-platform-tests/server-timing/resources/parsing/32.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/33.js: Added.
  • web-platform-tests/server-timing/resources/parsing/33.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/34.js: Added.
  • web-platform-tests/server-timing/resources/parsing/34.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/35.js: Added.
  • web-platform-tests/server-timing/resources/parsing/35.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/36.js: Added.
  • web-platform-tests/server-timing/resources/parsing/36.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/37.js: Added.
  • web-platform-tests/server-timing/resources/parsing/37.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/38.js: Added.
  • web-platform-tests/server-timing/resources/parsing/38.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/39.js: Added.
  • web-platform-tests/server-timing/resources/parsing/39.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/4.js: Added.
  • web-platform-tests/server-timing/resources/parsing/4.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/40.js: Added.
  • web-platform-tests/server-timing/resources/parsing/40.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/41.js: Added.
  • web-platform-tests/server-timing/resources/parsing/41.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/42.js: Added.
  • web-platform-tests/server-timing/resources/parsing/42.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/43.js: Added.
  • web-platform-tests/server-timing/resources/parsing/43.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/44.js: Added.
  • web-platform-tests/server-timing/resources/parsing/44.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/45.js: Added.
  • web-platform-tests/server-timing/resources/parsing/45.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/46.js: Added.
  • web-platform-tests/server-timing/resources/parsing/46.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/47.js: Added.
  • web-platform-tests/server-timing/resources/parsing/47.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/48.js: Added.
  • web-platform-tests/server-timing/resources/parsing/48.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/49.js: Added.
  • web-platform-tests/server-timing/resources/parsing/49.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/5.js: Added.
  • web-platform-tests/server-timing/resources/parsing/5.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/50.js: Added.
  • web-platform-tests/server-timing/resources/parsing/50.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/51.js: Added.
  • web-platform-tests/server-timing/resources/parsing/51.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/52.js: Added.
  • web-platform-tests/server-timing/resources/parsing/52.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/53.js: Added.
  • web-platform-tests/server-timing/resources/parsing/53.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/54.js: Added.
  • web-platform-tests/server-timing/resources/parsing/54.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/55.js: Added.
  • web-platform-tests/server-timing/resources/parsing/55.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/56.js: Added.
  • web-platform-tests/server-timing/resources/parsing/56.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/57.js: Added.
  • web-platform-tests/server-timing/resources/parsing/57.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/58.js: Added.
  • web-platform-tests/server-timing/resources/parsing/58.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/59.js: Added.
  • web-platform-tests/server-timing/resources/parsing/59.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/6.js: Added.
  • web-platform-tests/server-timing/resources/parsing/6.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/60.js: Added.
  • web-platform-tests/server-timing/resources/parsing/60.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/61.js: Added.
  • web-platform-tests/server-timing/resources/parsing/61.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/62.js: Added.
  • web-platform-tests/server-timing/resources/parsing/62.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/63.js: Added.
  • web-platform-tests/server-timing/resources/parsing/63.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/64.js: Added.
  • web-platform-tests/server-timing/resources/parsing/64.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/65.js: Added.
  • web-platform-tests/server-timing/resources/parsing/65.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/66.js: Added.
  • web-platform-tests/server-timing/resources/parsing/66.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/67.js: Added.
  • web-platform-tests/server-timing/resources/parsing/67.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/68.js: Added.
  • web-platform-tests/server-timing/resources/parsing/68.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/69.js: Added.
  • web-platform-tests/server-timing/resources/parsing/69.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/7.js: Added.
  • web-platform-tests/server-timing/resources/parsing/7.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/70.js: Added.
  • web-platform-tests/server-timing/resources/parsing/70.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/71.js: Added.
  • web-platform-tests/server-timing/resources/parsing/71.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/72.js: Added.
  • web-platform-tests/server-timing/resources/parsing/72.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/73.js: Added.
  • web-platform-tests/server-timing/resources/parsing/73.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/74.js: Added.
  • web-platform-tests/server-timing/resources/parsing/74.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/75.js: Added.
  • web-platform-tests/server-timing/resources/parsing/75.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/76.js: Added.
  • web-platform-tests/server-timing/resources/parsing/76.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/77.js: Added.
  • web-platform-tests/server-timing/resources/parsing/77.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/78.js: Added.
  • web-platform-tests/server-timing/resources/parsing/78.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/79.js: Added.
  • web-platform-tests/server-timing/resources/parsing/79.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/8.js: Added.
  • web-platform-tests/server-timing/resources/parsing/8.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/80.js: Added.
  • web-platform-tests/server-timing/resources/parsing/80.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/81.js: Added.
  • web-platform-tests/server-timing/resources/parsing/81.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/82.js: Added.
  • web-platform-tests/server-timing/resources/parsing/82.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/83.js: Added.
  • web-platform-tests/server-timing/resources/parsing/83.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/9.js: Added.
  • web-platform-tests/server-timing/resources/parsing/9.js.sub.headers: Added.
  • web-platform-tests/server-timing/resources/parsing/w3c-import.log: Added.
  • web-platform-tests/server-timing/resources/w3c-import.log: Added.
  • web-platform-tests/server-timing/resource_timing_idl.html: Added.
  • web-platform-tests/server-timing/resource_timing_idl.https.html: Added.
  • web-platform-tests/server-timing/server_timing_header-parsing.html: Added.
  • web-platform-tests/server-timing/server_timing_header-parsing.https.html: Added.
  • web-platform-tests/server-timing/test_server_timing.html: Added.
  • web-platform-tests/server-timing/test_server_timing.html.sub.headers: Added.
  • web-platform-tests/server-timing/test_server_timing.https.html: Added.
  • web-platform-tests/server-timing/test_server_timing.https.html.sub.headers: Added.
  • web-platform-tests/server-timing/w3c-import.log: Added.

Source/WebCore:

  • Sources.txt: Added references to HeaderFieldTokenizer.cpp, ServerTiming.cpp, and ServerTimingParser.cpp.
  • WebCore.xcodeproj/project.pbxproj: Added various files.
  • loader/HeaderFieldTokenizer.cpp: Added.

(WebCore::HeaderFieldTokenizer::HeaderFieldTokenizer): Added class for tokenizing header values.
(WebCore::HeaderFieldTokenizer::consume): Added method to consume a specified character.
(WebCore::HeaderFieldTokenizer::consumeQuotedString): Added method to consume a quote-string.
(WebCore::HeaderFieldTokenizer::consumeToken): Added a method to consume a token.
(WebCore::HeaderFieldTokenizer::consumeTokenOrQuotedString): Added method to consume a quote-string or quote-string, depending on net character.
(WebCore::HeaderFieldTokenizer::skipSpaces): Added method to skip whitespace.
(WebCore::HeaderFieldTokenizer::consumeBeforeAnyCharMatch): Added method to advance the cursor up until any of a list of characters.

  • loader/HeaderFieldTokenizer.h: Added.
  • loader/HTTPHeaderField.cpp: Expose isTokenCharacter and isWhitespace.
  • loader/HTTPHeaderField.h: Expose isTokenCharacter and isWhitespace.
  • loader/PolicyChecker.cpp: Added #include so source compiled on my machine.
  • loader/ResourceTiming.cpp:

(WebCore::ResourceTiming::ResourceTiming): Added call to initServerTiming to parse the header.
(WebCore::ResourceTiming::initServerTiming): Added method to parse the header.
(WebCore::ResourceTiming::populateServerTiming): Added method to populate the server timing entries on a PerformanceResourceTiming object.
(WebCore::ResourceTiming::isolatedCopy const): Added code to copy over the server timing entries.

  • loader/ResourceTiming.h:

(WebCore::ResourceTiming::ResourceTiming): Accept collection of server timing entries in c'tor.

  • loader/ServerTiming.cpp: Added.

(WebCore::ServerTiming::setParameter): Set named parameters, ignoring unrecognized or duplicates.
(WebCore::ServerTiming::isolatedCopy const): Return a new pointer to the object.

  • loader/ServerTiming.h: Added.

(WebCore::ServerTiming::ServerTiming): Added struct for the data needed by a server timing entry.
(WebCore::ServerTiming::name const): Added name field of a server timing entry.
(WebCore::ServerTiming::duration const): Added duration field of a server timing entry.
(WebCore::ServerTiming::description const): Added description field of a server timing entry.

  • loader/ServerTimingParser.cpp: Added.

(WebCore::ServerTimingParser::parseServerTiming): Parses the header generating a collection of server timing structs.

  • loader/ServerTimingParser.h: Added.
  • loader/WorkerThreadableLoader.h: Fix build.
  • page/Performance.cpp:

(WebCore::Performance::addResourceTiming): Fixed a typo.

  • page/PerformanceResourceTiming.cpp:

(WebCore::PerformanceResourceTiming::PerformanceResourceTiming): Given a ResourceTiming object, populate our collection of PerformanceServerTiming objects.

  • page/PerformanceResourceTiming.h: Added serverTiming member and getter.
  • page/PerformanceResourceTiming.idl: Added serverTiming member to interface.
  • platform/network/HTTPHeaderNames.in: Added "Server-Timing" to the header enum.
  • platform/network/ResourceResponseBase.cpp: Added "Server-Timing" to isSafeCrossOriginResponseHeader whitelist.

LayoutTests:

  • imported/w3c/web-platform-tests/server-timing/cross_origin-expected.txt: Added.
  • imported/w3c/web-platform-tests/server-timing/resource_timing_idl-expected.txt: Added.
  • imported/w3c/web-platform-tests/server-timing/resource_timing_idl.https-expected.txt: Added.
  • imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing-expected.txt: Added.
  • imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing.https-expected.txt: Added.
Location:
trunk
Files:
199 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r231812 r231813  
     12018-05-15  Charles Vazac  <cvazac@gmail.com>
     2
     3        Add the PerformanceServerTiming Interface which makes Server-Timing header timing values available to JavaScript running in the browser.
     4        https://bugs.webkit.org/show_bug.cgi?id=175569
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Tests were imported from web-platform-tests: WebKit/LayoutTests/imported/w3c/web-platform-tests/server-timing/*
     9
     10        * imported/w3c/web-platform-tests/server-timing/cross_origin-expected.txt: Added.
     11        * imported/w3c/web-platform-tests/server-timing/resource_timing_idl-expected.txt: Added.
     12        * imported/w3c/web-platform-tests/server-timing/resource_timing_idl.https-expected.txt: Added.
     13        * imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing-expected.txt: Added.
     14        * imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing.https-expected.txt: Added.
     15
    1162018-05-15  Brady Eidson  <beidson@apple.com>
    217
  • trunk/LayoutTests/TestExpectations

    r231789 r231813  
    189189imported/w3c/web-platform-tests/service-workers/service-worker/shared-worker-controlled.https.html [ Skip ]
    190190imported/w3c/web-platform-tests/service-workers/service-worker/claim-shared-worker-fetch.https.html [ Skip ]
     191
     192# Unsupported features: PerformanceNavigationTiming
     193imported/w3c/web-platform-tests/server-timing/test_server_timing.html [ Skip ]
     194imported/w3c/web-platform-tests/server-timing/test_server_timing.https.html [ Skip ]
     195imported/w3c/web-platform-tests/server-timing/navigation_timing_idl.html [ Skip ]
     196imported/w3c/web-platform-tests/server-timing/navigation_timing_idl.https.html [ Skip ]
    191197
    192198imported/w3c/web-platform-tests/service-workers/service-worker/websocket.https.html [ Pass Failure ]
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r231798 r231813  
     12018-05-15  Charles Vazac  <cvazac@gmail.com>
     2
     3        Add the PerformanceServerTiming Interface which makes Server-Timing header timing values available to JavaScript running in the browser.
     4        https://bugs.webkit.org/show_bug.cgi?id=175569
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Tests were imported from web-platform-tests: WebKit/LayoutTests/imported/w3c/web-platform-tests/server-timing/*
     9
     10        * web-platform-tests/server-timing/cross_origin.html: Added.
     11        * web-platform-tests/server-timing/navigation_timing_idl.html: Added.
     12        * web-platform-tests/server-timing/navigation_timing_idl.https.html: Added.
     13        * web-platform-tests/server-timing/resources/blue.png: Added.
     14        * web-platform-tests/server-timing/resources/blue.png.sub.headers: Added.
     15        * web-platform-tests/server-timing/resources/blue_tao.png: Added.
     16        * web-platform-tests/server-timing/resources/blue_tao.png.sub.headers: Added.
     17        * web-platform-tests/server-timing/resources/green.png: Added.
     18        * web-platform-tests/server-timing/resources/green.png.sub.headers: Added.
     19        * web-platform-tests/server-timing/resources/parsing/0.js: Added.
     20        * web-platform-tests/server-timing/resources/parsing/0.js.sub.headers: Added.
     21        * web-platform-tests/server-timing/resources/parsing/1.js: Added.
     22        * web-platform-tests/server-timing/resources/parsing/1.js.sub.headers: Added.
     23        * web-platform-tests/server-timing/resources/parsing/10.js: Added.
     24        * web-platform-tests/server-timing/resources/parsing/10.js.sub.headers: Added.
     25        * web-platform-tests/server-timing/resources/parsing/11.js: Added.
     26        * web-platform-tests/server-timing/resources/parsing/11.js.sub.headers: Added.
     27        * web-platform-tests/server-timing/resources/parsing/12.js: Added.
     28        * web-platform-tests/server-timing/resources/parsing/12.js.sub.headers: Added.
     29        * web-platform-tests/server-timing/resources/parsing/13.js: Added.
     30        * web-platform-tests/server-timing/resources/parsing/13.js.sub.headers: Added.
     31        * web-platform-tests/server-timing/resources/parsing/14.js: Added.
     32        * web-platform-tests/server-timing/resources/parsing/14.js.sub.headers: Added.
     33        * web-platform-tests/server-timing/resources/parsing/15.js: Added.
     34        * web-platform-tests/server-timing/resources/parsing/15.js.sub.headers: Added.
     35        * web-platform-tests/server-timing/resources/parsing/16.js: Added.
     36        * web-platform-tests/server-timing/resources/parsing/16.js.sub.headers: Added.
     37        * web-platform-tests/server-timing/resources/parsing/17.js: Added.
     38        * web-platform-tests/server-timing/resources/parsing/17.js.sub.headers: Added.
     39        * web-platform-tests/server-timing/resources/parsing/18.js: Added.
     40        * web-platform-tests/server-timing/resources/parsing/18.js.sub.headers: Added.
     41        * web-platform-tests/server-timing/resources/parsing/19.js: Added.
     42        * web-platform-tests/server-timing/resources/parsing/19.js.sub.headers: Added.
     43        * web-platform-tests/server-timing/resources/parsing/2.js: Added.
     44        * web-platform-tests/server-timing/resources/parsing/2.js.sub.headers: Added.
     45        * web-platform-tests/server-timing/resources/parsing/20.js: Added.
     46        * web-platform-tests/server-timing/resources/parsing/20.js.sub.headers: Added.
     47        * web-platform-tests/server-timing/resources/parsing/21.js: Added.
     48        * web-platform-tests/server-timing/resources/parsing/21.js.sub.headers: Added.
     49        * web-platform-tests/server-timing/resources/parsing/22.js: Added.
     50        * web-platform-tests/server-timing/resources/parsing/22.js.sub.headers: Added.
     51        * web-platform-tests/server-timing/resources/parsing/23.js: Added.
     52        * web-platform-tests/server-timing/resources/parsing/23.js.sub.headers: Added.
     53        * web-platform-tests/server-timing/resources/parsing/24.js: Added.
     54        * web-platform-tests/server-timing/resources/parsing/24.js.sub.headers: Added.
     55        * web-platform-tests/server-timing/resources/parsing/25.js: Added.
     56        * web-platform-tests/server-timing/resources/parsing/25.js.sub.headers: Added.
     57        * web-platform-tests/server-timing/resources/parsing/26.js: Added.
     58        * web-platform-tests/server-timing/resources/parsing/26.js.sub.headers: Added.
     59        * web-platform-tests/server-timing/resources/parsing/27.js: Added.
     60        * web-platform-tests/server-timing/resources/parsing/27.js.sub.headers: Added.
     61        * web-platform-tests/server-timing/resources/parsing/28.js: Added.
     62        * web-platform-tests/server-timing/resources/parsing/28.js.sub.headers: Added.
     63        * web-platform-tests/server-timing/resources/parsing/29.js: Added.
     64        * web-platform-tests/server-timing/resources/parsing/29.js.sub.headers: Added.
     65        * web-platform-tests/server-timing/resources/parsing/3.js: Added.
     66        * web-platform-tests/server-timing/resources/parsing/3.js.sub.headers: Added.
     67        * web-platform-tests/server-timing/resources/parsing/30.js: Added.
     68        * web-platform-tests/server-timing/resources/parsing/30.js.sub.headers: Added.
     69        * web-platform-tests/server-timing/resources/parsing/31.js: Added.
     70        * web-platform-tests/server-timing/resources/parsing/31.js.sub.headers: Added.
     71        * web-platform-tests/server-timing/resources/parsing/32.js: Added.
     72        * web-platform-tests/server-timing/resources/parsing/32.js.sub.headers: Added.
     73        * web-platform-tests/server-timing/resources/parsing/33.js: Added.
     74        * web-platform-tests/server-timing/resources/parsing/33.js.sub.headers: Added.
     75        * web-platform-tests/server-timing/resources/parsing/34.js: Added.
     76        * web-platform-tests/server-timing/resources/parsing/34.js.sub.headers: Added.
     77        * web-platform-tests/server-timing/resources/parsing/35.js: Added.
     78        * web-platform-tests/server-timing/resources/parsing/35.js.sub.headers: Added.
     79        * web-platform-tests/server-timing/resources/parsing/36.js: Added.
     80        * web-platform-tests/server-timing/resources/parsing/36.js.sub.headers: Added.
     81        * web-platform-tests/server-timing/resources/parsing/37.js: Added.
     82        * web-platform-tests/server-timing/resources/parsing/37.js.sub.headers: Added.
     83        * web-platform-tests/server-timing/resources/parsing/38.js: Added.
     84        * web-platform-tests/server-timing/resources/parsing/38.js.sub.headers: Added.
     85        * web-platform-tests/server-timing/resources/parsing/39.js: Added.
     86        * web-platform-tests/server-timing/resources/parsing/39.js.sub.headers: Added.
     87        * web-platform-tests/server-timing/resources/parsing/4.js: Added.
     88        * web-platform-tests/server-timing/resources/parsing/4.js.sub.headers: Added.
     89        * web-platform-tests/server-timing/resources/parsing/40.js: Added.
     90        * web-platform-tests/server-timing/resources/parsing/40.js.sub.headers: Added.
     91        * web-platform-tests/server-timing/resources/parsing/41.js: Added.
     92        * web-platform-tests/server-timing/resources/parsing/41.js.sub.headers: Added.
     93        * web-platform-tests/server-timing/resources/parsing/42.js: Added.
     94        * web-platform-tests/server-timing/resources/parsing/42.js.sub.headers: Added.
     95        * web-platform-tests/server-timing/resources/parsing/43.js: Added.
     96        * web-platform-tests/server-timing/resources/parsing/43.js.sub.headers: Added.
     97        * web-platform-tests/server-timing/resources/parsing/44.js: Added.
     98        * web-platform-tests/server-timing/resources/parsing/44.js.sub.headers: Added.
     99        * web-platform-tests/server-timing/resources/parsing/45.js: Added.
     100        * web-platform-tests/server-timing/resources/parsing/45.js.sub.headers: Added.
     101        * web-platform-tests/server-timing/resources/parsing/46.js: Added.
     102        * web-platform-tests/server-timing/resources/parsing/46.js.sub.headers: Added.
     103        * web-platform-tests/server-timing/resources/parsing/47.js: Added.
     104        * web-platform-tests/server-timing/resources/parsing/47.js.sub.headers: Added.
     105        * web-platform-tests/server-timing/resources/parsing/48.js: Added.
     106        * web-platform-tests/server-timing/resources/parsing/48.js.sub.headers: Added.
     107        * web-platform-tests/server-timing/resources/parsing/49.js: Added.
     108        * web-platform-tests/server-timing/resources/parsing/49.js.sub.headers: Added.
     109        * web-platform-tests/server-timing/resources/parsing/5.js: Added.
     110        * web-platform-tests/server-timing/resources/parsing/5.js.sub.headers: Added.
     111        * web-platform-tests/server-timing/resources/parsing/50.js: Added.
     112        * web-platform-tests/server-timing/resources/parsing/50.js.sub.headers: Added.
     113        * web-platform-tests/server-timing/resources/parsing/51.js: Added.
     114        * web-platform-tests/server-timing/resources/parsing/51.js.sub.headers: Added.
     115        * web-platform-tests/server-timing/resources/parsing/52.js: Added.
     116        * web-platform-tests/server-timing/resources/parsing/52.js.sub.headers: Added.
     117        * web-platform-tests/server-timing/resources/parsing/53.js: Added.
     118        * web-platform-tests/server-timing/resources/parsing/53.js.sub.headers: Added.
     119        * web-platform-tests/server-timing/resources/parsing/54.js: Added.
     120        * web-platform-tests/server-timing/resources/parsing/54.js.sub.headers: Added.
     121        * web-platform-tests/server-timing/resources/parsing/55.js: Added.
     122        * web-platform-tests/server-timing/resources/parsing/55.js.sub.headers: Added.
     123        * web-platform-tests/server-timing/resources/parsing/56.js: Added.
     124        * web-platform-tests/server-timing/resources/parsing/56.js.sub.headers: Added.
     125        * web-platform-tests/server-timing/resources/parsing/57.js: Added.
     126        * web-platform-tests/server-timing/resources/parsing/57.js.sub.headers: Added.
     127        * web-platform-tests/server-timing/resources/parsing/58.js: Added.
     128        * web-platform-tests/server-timing/resources/parsing/58.js.sub.headers: Added.
     129        * web-platform-tests/server-timing/resources/parsing/59.js: Added.
     130        * web-platform-tests/server-timing/resources/parsing/59.js.sub.headers: Added.
     131        * web-platform-tests/server-timing/resources/parsing/6.js: Added.
     132        * web-platform-tests/server-timing/resources/parsing/6.js.sub.headers: Added.
     133        * web-platform-tests/server-timing/resources/parsing/60.js: Added.
     134        * web-platform-tests/server-timing/resources/parsing/60.js.sub.headers: Added.
     135        * web-platform-tests/server-timing/resources/parsing/61.js: Added.
     136        * web-platform-tests/server-timing/resources/parsing/61.js.sub.headers: Added.
     137        * web-platform-tests/server-timing/resources/parsing/62.js: Added.
     138        * web-platform-tests/server-timing/resources/parsing/62.js.sub.headers: Added.
     139        * web-platform-tests/server-timing/resources/parsing/63.js: Added.
     140        * web-platform-tests/server-timing/resources/parsing/63.js.sub.headers: Added.
     141        * web-platform-tests/server-timing/resources/parsing/64.js: Added.
     142        * web-platform-tests/server-timing/resources/parsing/64.js.sub.headers: Added.
     143        * web-platform-tests/server-timing/resources/parsing/65.js: Added.
     144        * web-platform-tests/server-timing/resources/parsing/65.js.sub.headers: Added.
     145        * web-platform-tests/server-timing/resources/parsing/66.js: Added.
     146        * web-platform-tests/server-timing/resources/parsing/66.js.sub.headers: Added.
     147        * web-platform-tests/server-timing/resources/parsing/67.js: Added.
     148        * web-platform-tests/server-timing/resources/parsing/67.js.sub.headers: Added.
     149        * web-platform-tests/server-timing/resources/parsing/68.js: Added.
     150        * web-platform-tests/server-timing/resources/parsing/68.js.sub.headers: Added.
     151        * web-platform-tests/server-timing/resources/parsing/69.js: Added.
     152        * web-platform-tests/server-timing/resources/parsing/69.js.sub.headers: Added.
     153        * web-platform-tests/server-timing/resources/parsing/7.js: Added.
     154        * web-platform-tests/server-timing/resources/parsing/7.js.sub.headers: Added.
     155        * web-platform-tests/server-timing/resources/parsing/70.js: Added.
     156        * web-platform-tests/server-timing/resources/parsing/70.js.sub.headers: Added.
     157        * web-platform-tests/server-timing/resources/parsing/71.js: Added.
     158        * web-platform-tests/server-timing/resources/parsing/71.js.sub.headers: Added.
     159        * web-platform-tests/server-timing/resources/parsing/72.js: Added.
     160        * web-platform-tests/server-timing/resources/parsing/72.js.sub.headers: Added.
     161        * web-platform-tests/server-timing/resources/parsing/73.js: Added.
     162        * web-platform-tests/server-timing/resources/parsing/73.js.sub.headers: Added.
     163        * web-platform-tests/server-timing/resources/parsing/74.js: Added.
     164        * web-platform-tests/server-timing/resources/parsing/74.js.sub.headers: Added.
     165        * web-platform-tests/server-timing/resources/parsing/75.js: Added.
     166        * web-platform-tests/server-timing/resources/parsing/75.js.sub.headers: Added.
     167        * web-platform-tests/server-timing/resources/parsing/76.js: Added.
     168        * web-platform-tests/server-timing/resources/parsing/76.js.sub.headers: Added.
     169        * web-platform-tests/server-timing/resources/parsing/77.js: Added.
     170        * web-platform-tests/server-timing/resources/parsing/77.js.sub.headers: Added.
     171        * web-platform-tests/server-timing/resources/parsing/78.js: Added.
     172        * web-platform-tests/server-timing/resources/parsing/78.js.sub.headers: Added.
     173        * web-platform-tests/server-timing/resources/parsing/79.js: Added.
     174        * web-platform-tests/server-timing/resources/parsing/79.js.sub.headers: Added.
     175        * web-platform-tests/server-timing/resources/parsing/8.js: Added.
     176        * web-platform-tests/server-timing/resources/parsing/8.js.sub.headers: Added.
     177        * web-platform-tests/server-timing/resources/parsing/80.js: Added.
     178        * web-platform-tests/server-timing/resources/parsing/80.js.sub.headers: Added.
     179        * web-platform-tests/server-timing/resources/parsing/81.js: Added.
     180        * web-platform-tests/server-timing/resources/parsing/81.js.sub.headers: Added.
     181        * web-platform-tests/server-timing/resources/parsing/82.js: Added.
     182        * web-platform-tests/server-timing/resources/parsing/82.js.sub.headers: Added.
     183        * web-platform-tests/server-timing/resources/parsing/83.js: Added.
     184        * web-platform-tests/server-timing/resources/parsing/83.js.sub.headers: Added.
     185        * web-platform-tests/server-timing/resources/parsing/9.js: Added.
     186        * web-platform-tests/server-timing/resources/parsing/9.js.sub.headers: Added.
     187        * web-platform-tests/server-timing/resources/parsing/w3c-import.log: Added.
     188        * web-platform-tests/server-timing/resources/w3c-import.log: Added.
     189        * web-platform-tests/server-timing/resource_timing_idl.html: Added.
     190        * web-platform-tests/server-timing/resource_timing_idl.https.html: Added.
     191        * web-platform-tests/server-timing/server_timing_header-parsing.html: Added.
     192        * web-platform-tests/server-timing/server_timing_header-parsing.https.html: Added.
     193        * web-platform-tests/server-timing/test_server_timing.html: Added.
     194        * web-platform-tests/server-timing/test_server_timing.html.sub.headers: Added.
     195        * web-platform-tests/server-timing/test_server_timing.https.html: Added.
     196        * web-platform-tests/server-timing/test_server_timing.https.html.sub.headers: Added.
     197        * web-platform-tests/server-timing/w3c-import.log: Added.
     198
    11992018-05-15  Antoine Quint  <graouts@apple.com>
    2200
  • trunk/LayoutTests/imported/w3c/web-platform-tests/server-timing/sw.js

    r231709 r231813  
    11importScripts('/resources/testharness.js')
    22
    3 promise_test(async (test) => {
    4   return fetch('./sw.js').then(function(response) {
    5     setTimeout(() => {
    6       assert_not_equals(typeof performance.getEntriesByName(response.url)[0].serverTiming,
    7         'undefined',
    8         'An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute in the Service Worker context.')
    9       done()
    10     }, 100)
     3promise_test((test) => {
     4  return fetch('./sw.js').then((response) => {
     5    return new Promise((resolve, reject) => {
     6      setTimeout(() => {
     7        const entry = performance.getEntriesByName(response.url)[0]
     8        if (!entry) {
     9          reject('no entry: ' + response.url)
     10        }
     11
     12        assert_not_equals(typeof entry.serverTiming,
     13          'undefined',
     14          'An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute in the Service Worker context.')
     15        resolve()
     16      }, 250)
     17    })
    1118  })
    1219})
  • trunk/Source/WebCore/ChangeLog

    r231812 r231813  
     12018-05-15  Charles Vazac  <cvazac@gmail.com>
     2
     3        Add the PerformanceServerTiming Interface which makes Server-Timing header timing values available to JavaScript running in the browser.
     4        https://bugs.webkit.org/show_bug.cgi?id=175569
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Tests were imported from web-platform-tests: WebKit/LayoutTests/imported/w3c/web-platform-tests/server-timing/*
     9
     10        * Sources.txt: Added references to HeaderFieldTokenizer.cpp, ServerTiming.cpp, and ServerTimingParser.cpp.
     11        * WebCore.xcodeproj/project.pbxproj: Added various files.
     12        * loader/HeaderFieldTokenizer.cpp: Added.
     13        (WebCore::HeaderFieldTokenizer::HeaderFieldTokenizer): Added class for tokenizing header values.
     14        (WebCore::HeaderFieldTokenizer::consume): Added method to consume a specified character.
     15        (WebCore::HeaderFieldTokenizer::consumeQuotedString): Added method to consume a quote-string.
     16        (WebCore::HeaderFieldTokenizer::consumeToken): Added a method to consume a token.
     17        (WebCore::HeaderFieldTokenizer::consumeTokenOrQuotedString): Added method to consume a quote-string or quote-string, depending on net character.
     18        (WebCore::HeaderFieldTokenizer::skipSpaces): Added method to skip whitespace.
     19        (WebCore::HeaderFieldTokenizer::consumeBeforeAnyCharMatch): Added method to advance the cursor up until any of a list of characters.
     20        * loader/HeaderFieldTokenizer.h: Added.
     21        * loader/HTTPHeaderField.cpp: Expose isTokenCharacter and isWhitespace.
     22        * loader/HTTPHeaderField.h: Expose isTokenCharacter and isWhitespace.
     23        * loader/PolicyChecker.cpp: Added #include so source compiled on my machine.
     24        * loader/ResourceTiming.cpp:
     25        (WebCore::ResourceTiming::ResourceTiming): Added call to initServerTiming to parse the header.
     26        (WebCore::ResourceTiming::initServerTiming): Added method to parse the header.
     27        (WebCore::ResourceTiming::populateServerTiming): Added method to populate the server timing entries on a PerformanceResourceTiming object.
     28        (WebCore::ResourceTiming::isolatedCopy const): Added code to copy over the server timing entries.
     29        * loader/ResourceTiming.h:
     30        (WebCore::ResourceTiming::ResourceTiming): Accept collection of server timing entries in c'tor.
     31        * loader/ServerTiming.cpp: Added.
     32        (WebCore::ServerTiming::setParameter): Set named parameters, ignoring unrecognized or duplicates.
     33        (WebCore::ServerTiming::isolatedCopy const): Return a new pointer to the object.
     34        * loader/ServerTiming.h: Added.
     35        (WebCore::ServerTiming::ServerTiming): Added struct for the data needed by a server timing entry.
     36        (WebCore::ServerTiming::name const): Added name field of a server timing entry.
     37        (WebCore::ServerTiming::duration const): Added duration field of a server timing entry.
     38        (WebCore::ServerTiming::description const): Added description field of a server timing entry.
     39        * loader/ServerTimingParser.cpp: Added.
     40        (WebCore::ServerTimingParser::parseServerTiming): Parses the header generating a collection of server timing structs.
     41        * loader/ServerTimingParser.h: Added.
     42        * loader/WorkerThreadableLoader.h: Fix build.
     43        * page/Performance.cpp:
     44        (WebCore::Performance::addResourceTiming): Fixed a typo.
     45        * page/PerformanceResourceTiming.cpp:
     46        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming): Given a ResourceTiming object, populate our collection of PerformanceServerTiming objects.
     47        * page/PerformanceResourceTiming.h: Added serverTiming member and getter.
     48        * page/PerformanceResourceTiming.idl: Added serverTiming member to interface.
     49        * platform/network/HTTPHeaderNames.in: Added "Server-Timing" to the header enum.
     50        * platform/network/ResourceResponseBase.cpp: Added "Server-Timing" to isSafeCrossOriginResponseHeader whitelist.
     51
    1522018-05-15  Brady Eidson  <beidson@apple.com>
    253
  • trunk/Source/WebCore/Sources.txt

    r231779 r231813  
    12431243loader/DocumentWriter.cpp
    12441244loader/EmptyClients.cpp
     1245loader/FetchIdioms.cpp
    12451246loader/FTPDirectoryParser.cpp
    12461247loader/FormState.cpp
     
    12491250loader/FrameLoader.cpp
    12501251loader/FrameLoaderStateMachine.cpp
    1251 loader/FetchIdioms.cpp
     1252loader/HeaderFieldTokenizer.cpp
    12521253loader/HTTPHeaderField.cpp
    12531254loader/HistoryController.cpp
     
    12631264loader/NavigationScheduler.cpp
    12641265loader/NetscapePlugInStreamLoader.cpp
     1266loader/ServerTimingParser.cpp
    12651267loader/PingLoader.cpp
    12661268loader/PolicyChecker.cpp
     
    12731275loader/ResourceTiming.cpp
    12741276loader/ResourceTimingInformation.cpp
     1277loader/ServerTiming.cpp
    12751278loader/SinkDocument.cpp
    12761279loader/SubframeLoader.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r231779 r231813  
    689689                26F9A83818A046AC00AEB88A /* ViewportConfiguration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F9A83618A046AC00AEB88A /* ViewportConfiguration.cpp */; };
    690690                26F9A83918A046AC00AEB88A /* ViewportConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 26F9A83718A046AC00AEB88A /* ViewportConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; };
     691                285D32082035D6560070D32F /* ServerTimingParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 288E82F02035D4ED00B0DCFF /* ServerTimingParser.h */; };
    691692                2914E3081CAB5A440049966F /* AccessibilityAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 2914E3061CAB5A440049966F /* AccessibilityAttachment.h */; };
    692693                2917B5621473496C0052C9D0 /* LayerFlushScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2917B55F1473496C0052C9D0 /* LayerFlushScheduler.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    63856386                26F9A83618A046AC00AEB88A /* ViewportConfiguration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ViewportConfiguration.cpp; sourceTree = "<group>"; };
    63866387                26F9A83718A046AC00AEB88A /* ViewportConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewportConfiguration.h; sourceTree = "<group>"; };
     6388                28538EED20221FA600D1909A /* HeaderFieldTokenizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HeaderFieldTokenizer.cpp; sourceTree = "<group>"; };
     6389                28538EEE20221FA600D1909A /* HeaderFieldTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeaderFieldTokenizer.h; sourceTree = "<group>"; };
     6390                286E4DCB2021048800315238 /* ServerTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServerTiming.cpp; sourceTree = "<group>"; };
     6391                286E4DCC2021048800315238 /* ServerTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerTiming.h; sourceTree = "<group>"; };
     6392                288E82EE2035D2BE00B0DCFF /* ServerTimingParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ServerTimingParser.cpp; path = loader/ServerTimingParser.cpp; sourceTree = "<group>"; };
     6393                288E82F02035D4ED00B0DCFF /* ServerTimingParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ServerTimingParser.h; path = loader/ServerTimingParser.h; sourceTree = "<group>"; };
    63876394                28DB9BC52020EA0400E54A07 /* PerformanceServerTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PerformanceServerTiming.cpp; sourceTree = "<group>"; };
    63886395                28DB9BC62020EA0400E54A07 /* PerformanceServerTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceServerTiming.h; sourceTree = "<group>"; };
     
    1541615423                        isa = PBXGroup;
    1541715424                        children = (
     15425                                288E82F02035D4ED00B0DCFF /* ServerTimingParser.h */,
     15426                                288E82EE2035D2BE00B0DCFF /* ServerTimingParser.cpp */,
    1541815427                                1C09D04B1E31C32800725F18 /* PAL.xcodeproj */,
    1541915428                                65C97AF208EA908800ACD273 /* config.h */,
     
    2416324172                                51C81B870C4422F70019ECE3 /* FTPDirectoryParser.cpp */,
    2416424173                                51C81B880C4422F70019ECE3 /* FTPDirectoryParser.h */,
     24174                                28538EED20221FA600D1909A /* HeaderFieldTokenizer.cpp */,
     24175                                28538EEE20221FA600D1909A /* HeaderFieldTokenizer.h */,
    2416524176                                97DCE1FF10807C750057D394 /* HistoryController.cpp */,
    2416624177                                97DCE20010807C750057D394 /* HistoryController.h */,
     
    2421724228                                CBC2D22D1CE5B77400D1880B /* ResourceTimingInformation.cpp */,
    2421824229                                CBC2D22E1CE5B77D00D1880B /* ResourceTimingInformation.h */,
     24230                                286E4DCB2021048800315238 /* ServerTiming.cpp */,
     24231                                286E4DCC2021048800315238 /* ServerTiming.h */,
    2421924232                                51327D5F11A33A2B004F9D65 /* SinkDocument.cpp */,
    2422024233                                51327D5E11A33A2B004F9D65 /* SinkDocument.h */,
     
    3004030053                                A75E497610752ACB00C9B896 /* SerializedScriptValue.h in Headers */,
    3004130054                                516F7F6D1C31E39A00F111DC /* ServerOpenDBRequest.h in Headers */,
     30055                                285D32082035D6560070D32F /* ServerTimingParser.h in Headers */,
    3004230056                                2D93AEE319DF5641002A86C3 /* ServicesOverlayController.h in Headers */,
    3004330057                                51F1755D1F3EBC8300C74950 /* ServiceWorker.h in Headers */,
  • trunk/Source/WebCore/loader/HTTPHeaderField.cpp

    r223001 r231813  
    3131namespace RFC7230 {
    3232   
    33 static bool isTokenCharacter(UChar c)
     33bool isTokenCharacter(UChar c)
    3434{
    3535    return isASCIIAlpha(c) || isASCIIDigit(c)
     
    5656}
    5757
    58 static bool isWhitespace(UChar c)
     58bool isWhitespace(UChar c)
    5959{
    6060    return c == ' ' || c == '\t';
  • trunk/Source/WebCore/loader/HTTPHeaderField.h

    r223001 r231813  
    7272}
    7373
     74namespace RFC7230 {
     75bool isTokenCharacter(UChar);
     76bool isWhitespace(UChar);
     77} // namespace RFC7230
     78
    7479} // namespace WebCore
  • trunk/Source/WebCore/loader/PolicyChecker.cpp

    r231714 r231813  
    4747#include "HTMLFrameOwnerElement.h"
    4848#include "HTMLPlugInElement.h"
     49#include "Logging.h"
    4950#include <wtf/CompletionHandler.h>
    5051
  • trunk/Source/WebCore/loader/ResourceTiming.cpp

    r226451 r231813  
    2828
    2929#include "CachedResource.h"
     30#include "PerformanceServerTiming.h"
    3031#include "SecurityOrigin.h"
     32#include "ServerTimingParser.h"
    3133
    3234namespace WebCore {
     
    7779    , m_allowTimingDetails(passesTimingAllowCheck(response, securityOrigin))
    7880{
     81    initServerTiming(response);
    7982}
    8083
     
    8689    , m_allowTimingDetails(passesTimingAllowCheck(resource.response(), securityOrigin))
    8790{
     91    initServerTiming(resource.response());
    8892}
    8993
     
    9599    , m_allowTimingDetails(passesTimingAllowCheck(response, securityOrigin))
    96100{
     101    initServerTiming(response);
     102}
     103
     104void ResourceTiming::initServerTiming(const ResourceResponse& response)
     105{
     106    if (RuntimeEnabledFeatures::sharedFeatures().serverTimingEnabled() && m_allowTimingDetails)
     107        m_serverTiming = ServerTimingParser::parseServerTiming(response.httpHeaderField(HTTPHeaderName::ServerTiming));
     108}
     109
     110Vector<Ref<PerformanceServerTiming>> ResourceTiming::populateServerTiming()
     111{
     112    return WTF::map(m_serverTiming, [] (auto& entry) {
     113        return PerformanceServerTiming::create(WTFMove(entry.name), entry.duration, WTFMove(entry.description));
     114    });
    97115}
    98116
    99117ResourceTiming ResourceTiming::isolatedCopy() const
    100118{
    101     return ResourceTiming(m_url.isolatedCopy(), m_initiator.isolatedCopy(), m_loadTiming.isolatedCopy(), m_networkLoadMetrics.isolatedCopy(), m_allowTimingDetails);
     119    return ResourceTiming(m_url.isolatedCopy(), m_initiator.isolatedCopy(), m_loadTiming.isolatedCopy(), m_networkLoadMetrics.isolatedCopy(), m_allowTimingDetails, crossThreadCopy(m_serverTiming));
    102120}
    103121
  • trunk/Source/WebCore/loader/ResourceTiming.h

    r215981 r231813  
    2828#include "LoadTiming.h"
    2929#include "NetworkLoadMetrics.h"
     30#include "ServerTiming.h"
    3031#include "URL.h"
    3132
     
    3334
    3435class CachedResource;
     36class PerformanceServerTiming;
    3537class ResourceResponse;
    3638class SecurityOrigin;
     
    4850    NetworkLoadMetrics networkLoadMetrics() const { return m_networkLoadMetrics; }
    4951    bool allowTimingDetails() const { return m_allowTimingDetails; }
    50 
     52    Vector<Ref<PerformanceServerTiming>> populateServerTiming();
    5153    ResourceTiming isolatedCopy() const;
    5254
     
    5759    ResourceTiming(const URL&, const String& initiator, const LoadTiming&, const NetworkLoadMetrics&, const ResourceResponse&, const SecurityOrigin&);
    5860    ResourceTiming(const URL&, const String& initiator, const LoadTiming&, const ResourceResponse&, const SecurityOrigin&);
    59     ResourceTiming(const URL& url, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadMetrics& networkLoadMetrics, bool allowTimingDetails)
    60         : m_url(url)
    61         , m_initiator(initiator)
    62         , m_loadTiming(loadTiming)
    63         , m_networkLoadMetrics(networkLoadMetrics)
     61    ResourceTiming(URL&& url, String&& initiator, LoadTiming&& loadTiming, NetworkLoadMetrics&& networkLoadMetrics, bool allowTimingDetails, Vector<ServerTiming>&& serverTiming)
     62        : m_url(WTFMove(url))
     63        , m_initiator(WTFMove(initiator))
     64        , m_loadTiming(WTFMove(loadTiming))
     65        , m_networkLoadMetrics(WTFMove(networkLoadMetrics))
    6466        , m_allowTimingDetails(allowTimingDetails)
     67        , m_serverTiming(WTFMove(serverTiming))
    6568    {
    6669    }
     70    void initServerTiming(const ResourceResponse&);
    6771
    6872    URL m_url;
     
    7175    NetworkLoadMetrics m_networkLoadMetrics;
    7276    bool m_allowTimingDetails { false };
     77    Vector<ServerTiming> m_serverTiming;
    7378};
    7479
  • trunk/Source/WebCore/loader/WorkerThreadableLoader.h

    r224788 r231813  
    3131#pragma once
    3232
     33#include "NetworkLoadMetrics.h"
    3334#include "ThreadableLoader.h"
    3435#include "ThreadableLoaderClient.h"
  • trunk/Source/WebCore/page/Performance.cpp

    r229209 r231813  
    186186
    187187    if (m_resourceTimingBufferFullFlag) {
    188         // We fired resourcetimingbufferfull evnet but the author script didn't clear the buffer.
     188        // We fired resourcetimingbufferfull event but the author script didn't clear the buffer.
    189189        // Notify performance observers but don't add it to the buffer.
    190190        queueEntry(entry.get());
  • trunk/Source/WebCore/page/PerformanceResourceTiming.cpp

    r226451 r231813  
    8080    , m_networkLoadMetrics(resourceTiming.networkLoadMetrics())
    8181    , m_shouldReportDetails(resourceTiming.allowTimingDetails())
     82    , m_serverTiming(resourceTiming.populateServerTiming())
    8283{
    8384    m_networkLoadMetrics.clearNonTimingData();
  • trunk/Source/WebCore/platform/network/HTTPHeaderNames.in

    r231622 r231813  
    8585Sec-WebSocket-Protocol
    8686Sec-WebSocket-Version
     87Server-Timing
    8788Service-Worker-Allowed
    8889Set-Cookie
  • trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp

    r231263 r231813  
    377377        || name == HTTPHeaderName::ReferrerPolicy
    378378        || name == HTTPHeaderName::Refresh
     379        || name == HTTPHeaderName::ServerTiming
    379380        || name == HTTPHeaderName::SourceMap
    380381        || name == HTTPHeaderName::XSourceMap
Note: See TracChangeset for help on using the changeset viewer.