OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 /** |
| 6 * @constructor |
| 7 * @param {string} metric |
| 8 * @param {number} value |
| 9 * @param {string} description |
| 10 */ |
| 11 WebInspector.ServerTiming = function(metric, value, description) |
| 12 { |
| 13 this.metric = metric; |
| 14 this.value = value; |
| 15 this.description = description; |
| 16 } |
| 17 |
| 18 /** |
| 19 * @param {!Array<!WebInspector.NetworkRequest.NameValue>} headers |
| 20 * @return {?Array<!WebInspector.ServerTiming>} |
| 21 */ |
| 22 WebInspector.ServerTiming.parseHeaders = function(headers) |
| 23 { |
| 24 var rawServerTimingHeaders = headers.filter(item => item.name.toLowerCase()
=== "server-timing"); |
| 25 if (!rawServerTimingHeaders.length) |
| 26 return null; |
| 27 |
| 28 /** |
| 29 * @param {?string} valueString |
| 30 * @return {?Array<!WebInspector.ServerTiming>} |
| 31 */ |
| 32 function createFromHeaderValue(valueString) |
| 33 { |
| 34 // https://www.w3.org/TR/server-timing/ |
| 35 var serverTimingMetricRegExp = /[ \t]*([\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~0-
9A-Za-z]+)[ \t]*(?:=[ \t]*(\d+(?:\.\d+)?))?[ \t]*(?:;[ \t]*(?:"([^"]+)"|([\!\#\$
\%\&\'\*\+\-\.\^\_\`\|\~0-9A-Za-z]+)))?[ \t]*(?:,(.*))?/; |
| 36 var metricMatch; |
| 37 var result = []; |
| 38 while (valueString && (metricMatch = serverTimingMetricRegExp.exec(value
String))) { |
| 39 var metric = metricMatch[1]; |
| 40 var value = metricMatch[2]; |
| 41 var description = metricMatch[3] || metricMatch[4]; |
| 42 if (value !== null) |
| 43 value = Math.abs(parseFloat(metricMatch[2])); |
| 44 valueString = metricMatch[5]; // comma delimited headers |
| 45 result.push(new WebInspector.ServerTiming(metric, value, description
)); |
| 46 } |
| 47 return result; |
| 48 } |
| 49 |
| 50 var serverTimings = rawServerTimingHeaders.reduce((memo, header) => { |
| 51 var timing = createFromHeaderValue(header.value); |
| 52 Array.prototype.push.apply(memo, timing); |
| 53 return memo; |
| 54 }, []); |
| 55 serverTimings.sort((a, b) => a.metric.toLowerCase().compareTo(b.metric.toLow
erCase())); |
| 56 return serverTimings; |
| 57 } |
OLD | NEW |