source: webkit/trunk/Source/WebCore/loader/ServerTimingParser.h

Last change on this file was 231813, checked in by [email protected], 7 years ago

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 <[email protected]> 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.
File size: 1.5 KB
Line 
1/*
2 * Copyright (C) 2017 Akamai Technologies Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
14 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
15 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
16 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
17 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
18 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#pragma once
27
28#include <wtf/Vector.h>
29
30namespace WebCore {
31
32struct ServerTiming;
33
34namespace ServerTimingParser {
35
36Vector<ServerTiming> parseServerTiming(const String&);
37
38}
39
40}
Note: See TracBrowser for help on using the repository browser.