Fix failing server-timing header parsing wpt tests

Fix 67th and 68th subtest for
server-timing/server_timing_header-parsing.https.html.

The parser will ignore extraneous data between the
timing header name and a semicolon or comma delimiter
in a server-timing header.

Bug: 1301932
Change-Id: I947863c4bd3c201fbdef0997246dd47f4fe34e46
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3686931
Reviewed-by: Yoav Weiss <yoavweiss@chromium.org>
Commit-Queue: Yoav Weiss <yoavweiss@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1011515}
diff --git a/third_party/blink/renderer/platform/network/http_parsers.cc b/third_party/blink/renderer/platform/network/http_parsers.cc
index 1601a21..5d2effc 100644
--- a/third_party/blink/renderer/platform/network/http_parsers.cc
+++ b/third_party/blink/renderer/platform/network/http_parsers.cc
@@ -796,6 +796,8 @@
 
       ServerTimingHeader header(name.ToString());
 
+      tokenizer.ConsumeBeforeAnyCharMatch({',', ';'});
+
       while (tokenizer.Consume(';')) {
         StringView parameter_name;
         if (!tokenizer.ConsumeToken(ParsedContentType::Mode::kNormal,
diff --git a/third_party/blink/renderer/platform/network/http_parsers_test.cc b/third_party/blink/renderer/platform/network/http_parsers_test.cc
index fff2385..48c4c8b 100644
--- a/third_party/blink/renderer/platform/network/http_parsers_test.cc
+++ b/third_party/blink/renderer/platform/network/http_parsers_test.cc
@@ -557,8 +557,10 @@
                          {{"metric1", "0", "d1"}, {"metric2", "0", ""}});
 
   // nonsense - extraneous characters after entry name token
-  testServerTimingHeader("metric==   \"\"foo;dur=123.4", {{"metric", "0", ""}});
-  testServerTimingHeader("metric1==   \"\"foo,metric2", {{"metric1", "0", ""}});
+  testServerTimingHeader("metric==   \"\"foo;dur=123.4",
+                         {{"metric", "123.4", ""}});
+  testServerTimingHeader("metric1==   \"\"foo,metric2",
+                         {{"metric1", "0", ""}, {"metric2", "0", ""}});
 
   // nonsense - extraneous characters after param name token
   testServerTimingHeader("metric;dur foo=12", {{"metric", "0", ""}});
@@ -588,7 +590,8 @@
   testServerTimingHeader("{", {{"{", "0", ""}});
   testServerTimingHeader("}", {{"}", "0", ""}});
   testServerTimingHeader("{}", {{"{}", "0", ""}});
-  testServerTimingHeader("{\"foo\":\"bar\"},metric", {{"{", "0", ""}});
+  testServerTimingHeader("{\"foo\":\"bar\"},metric",
+                         {{"{", "0", ""}, {"metric", "0", ""}});
 }
 
 TEST(HTTPParsersTest, ParseContentTypeOptionsTest) {
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/server-timing/server_timing_header-parsing.https-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/server-timing/server_timing_header-parsing.https-expected.txt
deleted file mode 100644
index 4ea8991..0000000
--- a/third_party/blink/web_tests/platform/generic/external/wpt/server-timing/server_timing_header-parsing.https-expected.txt
+++ /dev/null
@@ -1,332 +0,0 @@
-This is a testharness.js-based test.
-Found 328 tests; 326 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS 0.js - count (0 ?== 0)
-PASS 1.js - count (1 ?== 1)
-PASS 1.js - name (metric ?== metric)
-PASS 1.js - duration (0 ?== 0)
-PASS 1.js - description ( ?== )
-PASS 2.js - count (1 ?== 1)
-PASS 2.js - name (metric ?== metric)
-PASS 2.js - duration (123.4 ?== 123.4)
-PASS 2.js - description ( ?== )
-PASS 3.js - count (1 ?== 1)
-PASS 3.js - name (metric ?== metric)
-PASS 3.js - duration (123.4 ?== 123.4)
-PASS 3.js - description ( ?== )
-PASS 4.js - count (1 ?== 1)
-PASS 4.js - name (metric ?== metric)
-PASS 4.js - duration (0 ?== 0)
-PASS 4.js - description (description ?== description)
-PASS 5.js - count (1 ?== 1)
-PASS 5.js - name (metric ?== metric)
-PASS 5.js - duration (0 ?== 0)
-PASS 5.js - description (description ?== description)
-PASS 6.js - count (1 ?== 1)
-PASS 6.js - name (metric ?== metric)
-PASS 6.js - duration (123.4 ?== 123.4)
-PASS 6.js - description (description ?== description)
-PASS 7.js - count (1 ?== 1)
-PASS 7.js - name (metric ?== metric)
-PASS 7.js - duration (123.4 ?== 123.4)
-PASS 7.js - description (description ?== description)
-PASS 8.js - count (1 ?== 1)
-PASS 8.js - name (aB3!#$%&'*+-.^_`|~ ?== aB3!#$%&'*+-.^_`|~)
-PASS 8.js - duration (0 ?== 0)
-PASS 8.js - description ( ?== )
-PASS 9.js - count (1 ?== 1)
-PASS 9.js - name (metric ?== metric)
-PASS 9.js - duration (123.4 ?== 123.4)
-PASS 9.js - description (descr;,=iption ?== descr;,=iption)
-PASS 10.js - count (1 ?== 1)
-PASS 10.js - name (metric ?== metric)
-PASS 10.js - duration (0 ?== 0)
-PASS 10.js - description ( ?== )
-PASS 11.js - count (1 ?== 1)
-PASS 11.js - name (metric ?== metric)
-PASS 11.js - duration (0 ?== 0)
-PASS 11.js - description ( ?== )
-PASS 12.js - count (1 ?== 1)
-PASS 12.js - name (metric ?== metric)
-PASS 12.js - duration (123.4 ?== 123.4)
-PASS 12.js - description (description ?== description)
-PASS 13.js - count (1 ?== 1)
-PASS 13.js - name (metric ?== metric)
-PASS 13.js - duration (123.4 ?== 123.4)
-PASS 13.js - description (description ?== description)
-PASS 14.js - count (1 ?== 1)
-PASS 14.js - name (metric ?== metric)
-PASS 14.js - duration (0 ?== 0)
-PASS 14.js - description (description ?== description)
-PASS 15.js - count (3 ?== 3)
-PASS 15.js - [0].name (metric1 ?== metric1)
-PASS 15.js - [0].duration (12.3 ?== 12.3)
-PASS 15.js - [0].description (description1 ?== description1)
-PASS 15.js - [1].name (metric2 ?== metric2)
-PASS 15.js - [1].duration (45.6 ?== 45.6)
-PASS 15.js - [1].description (description2 ?== description2)
-PASS 15.js - [2].name (metric3 ?== metric3)
-PASS 15.js - [2].duration (78.9 ?== 78.9)
-PASS 15.js - [2].description (description3 ?== description3)
-PASS 16.js - count (5 ?== 5)
-PASS 16.js - [0].name (metric1 ?== metric1)
-PASS 16.js - [0].duration (0 ?== 0)
-PASS 16.js - [0].description ( ?== )
-PASS 16.js - [1].name (metric2 ?== metric2)
-PASS 16.js - [1].duration (0 ?== 0)
-PASS 16.js - [1].description ( ?== )
-PASS 16.js - [2].name (metric3 ?== metric3)
-PASS 16.js - [2].duration (0 ?== 0)
-PASS 16.js - [2].description ( ?== )
-PASS 16.js - [3].name (metric4 ?== metric4)
-PASS 16.js - [3].duration (0 ?== 0)
-PASS 16.js - [3].description ( ?== )
-PASS 16.js - [4].name (metric5 ?== metric5)
-PASS 16.js - [4].duration (0 ?== 0)
-PASS 16.js - [4].description ( ?== )
-PASS 17.js - count (1 ?== 1)
-PASS 17.js - name (metric ?== metric)
-PASS 17.js - duration (0 ?== 0)
-PASS 17.js - description (description ?== description)
-PASS 18.js - count (1 ?== 1)
-PASS 18.js - name (metric ?== metric)
-PASS 18.js - duration (0 ?== 0)
-PASS 18.js - description (	 description 	 ?== 	 description 	)
-PASS 19.js - count (1 ?== 1)
-PASS 19.js - name (metric ?== metric)
-PASS 19.js - duration (0 ?== 0)
-PASS 19.js - description (descr"iption ?== descr"iption)
-PASS 20.js - count (1 ?== 1)
-PASS 20.js - name (metric ?== metric)
-PASS 20.js - duration (0 ?== 0)
-PASS 20.js - description ( ?== )
-PASS 21.js - count (1 ?== 1)
-PASS 21.js - name (metric ?== metric)
-PASS 21.js - duration (0 ?== 0)
-PASS 21.js - description ( ?== )
-PASS 22.js - count (1 ?== 1)
-PASS 22.js - name (metric ?== metric)
-PASS 22.js - duration (0 ?== 0)
-PASS 22.js - description ( ?== )
-PASS 23.js - count (1 ?== 1)
-PASS 23.js - name (metric ?== metric)
-PASS 23.js - duration (0 ?== 0)
-PASS 23.js - description ( ?== )
-PASS 24.js - count (1 ?== 1)
-PASS 24.js - name (metric ?== metric)
-PASS 24.js - duration (0 ?== 0)
-PASS 24.js - description ( ?== )
-PASS 25.js - count (1 ?== 1)
-PASS 25.js - name (metric ?== metric)
-PASS 25.js - duration (0 ?== 0)
-PASS 25.js - description ( ?== )
-PASS 26.js - count (1 ?== 1)
-PASS 26.js - name (metric ?== metric)
-PASS 26.js - duration (0 ?== 0)
-PASS 26.js - description ( ?== )
-PASS 27.js - count (1 ?== 1)
-PASS 27.js - name (metric ?== metric)
-PASS 27.js - duration (0 ?== 0)
-PASS 27.js - description ( ?== )
-PASS 28.js - count (1 ?== 1)
-PASS 28.js - name (metric ?== metric)
-PASS 28.js - duration (0 ?== 0)
-PASS 28.js - description ( ?== )
-PASS 29.js - count (1 ?== 1)
-PASS 29.js - name (metric ?== metric)
-PASS 29.js - duration (0 ?== 0)
-PASS 29.js - description ( ?== )
-PASS 30.js - count (1 ?== 1)
-PASS 30.js - name (metric ?== metric)
-PASS 30.js - duration (0 ?== 0)
-PASS 30.js - description ( ?== )
-PASS 31.js - count (1 ?== 1)
-PASS 31.js - name (metric ?== metric)
-PASS 31.js - duration (0 ?== 0)
-PASS 31.js - description ( ?== )
-PASS 32.js - count (1 ?== 1)
-PASS 32.js - name (metric ?== metric)
-PASS 32.js - duration (0 ?== 0)
-PASS 32.js - description ( ?== )
-PASS 33.js - count (1 ?== 1)
-PASS 33.js - name (metric ?== metric)
-PASS 33.js - duration (0 ?== 0)
-PASS 33.js - description ( ?== )
-PASS 34.js - count (1 ?== 1)
-PASS 34.js - name (metric ?== metric)
-PASS 34.js - duration (0 ?== 0)
-PASS 34.js - description ( ?== )
-PASS 35.js - count (1 ?== 1)
-PASS 35.js - name (metric ?== metric)
-PASS 35.js - duration (0 ?== 0)
-PASS 35.js - description ( ?== )
-PASS 36.js - count (1 ?== 1)
-PASS 36.js - name (metric ?== metric)
-PASS 36.js - duration (0 ?== 0)
-PASS 36.js - description ( ?== )
-PASS 37.js - count (1 ?== 1)
-PASS 37.js - name (metric ?== metric)
-PASS 37.js - duration (0 ?== 0)
-PASS 37.js - description ( ?== )
-PASS 38.js - count (1 ?== 1)
-PASS 38.js - name (metric ?== metric)
-PASS 38.js - duration (0 ?== 0)
-PASS 38.js - description ( ?== )
-PASS 39.js - count (1 ?== 1)
-PASS 39.js - name (metric ?== metric)
-PASS 39.js - duration (0 ?== 0)
-PASS 39.js - description ( ?== )
-PASS 40.js - count (1 ?== 1)
-PASS 40.js - name (metric ?== metric)
-PASS 40.js - duration (0 ?== 0)
-PASS 40.js - description ( ?== )
-PASS 41.js - count (1 ?== 1)
-PASS 41.js - name (metric ?== metric)
-PASS 41.js - duration (0 ?== 0)
-PASS 41.js - description ( ?== )
-PASS 42.js - count (1 ?== 1)
-PASS 42.js - name (metric ?== metric)
-PASS 42.js - duration (0 ?== 0)
-PASS 42.js - description ( ?== )
-PASS 43.js - count (1 ?== 1)
-PASS 43.js - name (metric ?== metric)
-PASS 43.js - duration (0 ?== 0)
-PASS 43.js - description (\ ?== \)
-PASS 44.js - count (1 ?== 1)
-PASS 44.js - name (metric ?== metric)
-PASS 44.js - duration (0 ?== 0)
-PASS 44.js - description ( ?== )
-PASS 45.js - count (1 ?== 1)
-PASS 45.js - name (metric ?== metric)
-PASS 45.js - duration (0 ?== 0)
-PASS 45.js - description (" ?== ")
-PASS 46.js - count (1 ?== 1)
-PASS 46.js - name (metric ?== metric)
-PASS 46.js - duration (0 ?== 0)
-PASS 46.js - description ( ?== )
-PASS 47.js - count (1 ?== 1)
-PASS 47.js - name (metric ?== metric)
-PASS 47.js - duration (0 ?== 0)
-PASS 47.js - description ( ?== )
-PASS 48.js - count (1 ?== 1)
-PASS 48.js - name (metric ?== metric)
-PASS 48.js - duration (0 ?== 0)
-PASS 48.js - description ( ?== )
-PASS 49.js - count (1 ?== 1)
-PASS 49.js - name (metric ?== metric)
-PASS 49.js - duration (0 ?== 0)
-PASS 49.js - description ( ?== )
-PASS 50.js - count (2 ?== 2)
-PASS 50.js - [0].name (metric ?== metric)
-PASS 50.js - [0].duration (12.3 ?== 12.3)
-PASS 50.js - [0].description (description1 ?== description1)
-PASS 50.js - [1].name (metric ?== metric)
-PASS 50.js - [1].duration (45.6 ?== 45.6)
-PASS 50.js - [1].description (description2 ?== description2)
-PASS 51.js - count (1 ?== 1)
-PASS 51.js - name (metric ?== metric)
-PASS 51.js - duration (123.4 ?== 123.4)
-PASS 51.js - description (description ?== description)
-PASS 52.js - count (1 ?== 1)
-PASS 52.js - name (MeTrIc ?== MeTrIc)
-PASS 52.js - duration (0 ?== 0)
-PASS 52.js - description (DeScRiPtIoN ?== DeScRiPtIoN)
-PASS 53.js - count (1 ?== 1)
-PASS 53.js - name (metric ?== metric)
-PASS 53.js - duration (0 ?== 0)
-PASS 53.js - description ( ?== )
-PASS 54.js - count (1 ?== 1)
-PASS 54.js - name (metric ?== metric)
-PASS 54.js - duration (0 ?== 0)
-PASS 54.js - description ( ?== )
-PASS 55.js - count (2 ?== 2)
-PASS 55.js - [0].name (metric1 ?== metric1)
-PASS 55.js - [0].duration (123.4 ?== 123.4)
-PASS 55.js - [0].description (description ?== description)
-PASS 55.js - [1].name (metric2 ?== metric2)
-PASS 55.js - [1].duration (0 ?== 0)
-PASS 55.js - [1].description ( ?== )
-PASS 56.js - count (1 ?== 1)
-PASS 56.js - name (metric ?== metric)
-PASS 56.js - duration (123.4 ?== 123.4)
-PASS 56.js - description ( ?== )
-PASS 57.js - count (1 ?== 1)
-PASS 57.js - name (metric ?== metric)
-PASS 57.js - duration (0 ?== 0)
-PASS 57.js - description ( ?== )
-PASS 58.js - count (1 ?== 1)
-PASS 58.js - name (metric ?== metric)
-PASS 58.js - duration (0 ?== 0)
-PASS 58.js - description (description1 ?== description1)
-PASS 59.js - count (1 ?== 1)
-PASS 59.js - name (metric ?== metric)
-PASS 59.js - duration (0 ?== 0)
-PASS 59.js - description (description ?== description)
-PASS 60.js - count (1 ?== 1)
-PASS 60.js - name (metric ?== metric)
-PASS 60.js - duration (0 ?== 0)
-PASS 60.js - description (description ?== description)
-PASS 61.js - count (1 ?== 1)
-PASS 61.js - name (metric ?== metric)
-PASS 61.js - duration (123.4 ?== 123.4)
-PASS 61.js - description ( ?== )
-PASS 62.js - count (1 ?== 1)
-PASS 62.js - name (metric ?== metric)
-PASS 62.js - duration (123.4 ?== 123.4)
-PASS 62.js - description ( ?== )
-PASS 63.js - count (1 ?== 1)
-PASS 63.js - name (metric ?== metric)
-PASS 63.js - duration (123.4 ?== 123.4)
-PASS 63.js - description (d1 ?== d1)
-PASS 64.js - count (2 ?== 2)
-PASS 64.js - [0].name (metric1 ?== metric1)
-PASS 64.js - [0].duration (0 ?== 0)
-PASS 64.js - [0].description (d1 ?== d1)
-PASS 64.js - [1].name (metric2 ?== metric2)
-PASS 64.js - [1].duration (0 ?== 0)
-PASS 64.js - [1].description ( ?== )
-PASS 65.js - count (1 ?== 1)
-PASS 65.js - name (metric ?== metric)
-PASS 65.js - duration (123.4 ?== 123.4)
-PASS 65.js - description (d1 ?== d1)
-PASS 66.js - count (2 ?== 2)
-PASS 66.js - [0].name (metric1 ?== metric1)
-PASS 66.js - [0].duration (0 ?== 0)
-PASS 66.js - [0].description (d1 ?== d1)
-PASS 66.js - [1].name (metric2 ?== metric2)
-PASS 66.js - [1].duration (0 ?== 0)
-PASS 66.js - [1].description ( ?== )
-PASS 67.js - count (1 ?== 1)
-PASS 67.js - name (metric ?== metric)
-FAIL 67.js - duration (123.4 ?== 0) assert_equals: 67.js - duration (123.4 ?== 0) expected 0 but got 123.4
-PASS 67.js - description ( ?== )
-FAIL 68.js - count (1 ?== 2) assert_equals: 68.js - count (1 ?== 2) expected 2 but got 1
-PASS 68.js - [0].name (metric1 ?== metric1)
-PASS 68.js - [0].duration (0 ?== 0)
-PASS 68.js - [0].description ( ?== )
-PASS 69.js - count (1 ?== 1)
-PASS 69.js - name (metric ?== metric)
-PASS 69.js - duration (0 ?== 0)
-PASS 69.js - description ( ?== )
-PASS 70.js - count (1 ?== 1)
-PASS 70.js - name (metric ?== metric)
-PASS 70.js - duration (0 ?== 0)
-PASS 70.js - description ( ?== )
-PASS 71.js - count (0 ?== 0)
-PASS 72.js - count (0 ?== 0)
-PASS 73.js - count (0 ?== 0)
-PASS 74.js - count (0 ?== 0)
-PASS 75.js - count (0 ?== 0)
-PASS 76.js - count (0 ?== 0)
-PASS 77.js - count (0 ?== 0)
-PASS 78.js - count (0 ?== 0)
-PASS 79.js - count (0 ?== 0)
-PASS 80.js - count (0 ?== 0)
-PASS 81.js - count (0 ?== 0)
-PASS 82.js - count (0 ?== 0)
-PASS 83.js - count (0 ?== 0)
-PASS 84.js - count (1 ?== 1)
-PASS 84.js - name (metric ?== metric)
-PASS 84.js - duration (42 ?== 42)
-PASS 84.js - description (tabs-should-get-trimmed ?== tabs-should-get-trimmed)
-Harness: the test ran to completion.
-