Chromium Code Reviews| 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 {!WebInspector.Target} target | |
| 8 * @param {string} metric | |
| 9 * @param {number} value | |
| 10 * @param {string} description | |
| 11 */ | |
| 12 WebInspector.ServerTiming = function(target, metric, value, description) | |
| 13 { | |
| 14 this._target = target; | |
|
caseq
2016/04/26 03:56:42
why do we need target here?
| |
| 15 this.metric = metric; | |
| 16 this.value = value; | |
| 17 this.description = description; | |
| 18 } | |
| 19 | |
| 20 /** | |
| 21 * @param {!WebInspector.Target} target | |
| 22 * @param {!Array<!WebInspector.NetworkRequest.NameValue>} headers | |
| 23 * @return {?Array<!WebInspector.ServerTiming>} | |
| 24 */ | |
| 25 WebInspector.ServerTiming.parseHeaders = function(target, headers) | |
| 26 { | |
| 27 var rawServerTimingHeaders = headers.filter(item => item.name.toLowerCase() === "server-timing"); | |
| 28 if (!rawServerTimingHeaders.length) | |
| 29 return null; | |
| 30 | |
| 31 /** | |
| 32 * @param {?string} valueString | |
| 33 * @return {?Array<!WebInspector.ServerTiming>} | |
| 34 */ | |
| 35 function createFromHeaderValue(valueString) | |
| 36 { | |
| 37 // https://www.w3.org/TR/server-timing/ | |
| 38 var serverTimingMetricRegExp = /[ \t]*([\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~0- 9A-Za-z]+)[ \t]*(?:=[ \t]*(\d+(?:\.\d+)?))?[ \t]*(?:;[ \t]*(?:"([^"]+)"|([\!\#\$ \%\&\'\*\+\-\.\^\_\`\|\~0-9A-Za-z]+)))?[ \t]*(?:,(.*))?/; | |
| 39 var metricMatch; | |
| 40 var result = []; | |
| 41 while (valueString && (metricMatch = serverTimingMetricRegExp.exec(value String))) { | |
| 42 var metric = metricMatch[1]; | |
| 43 var value = metricMatch[2]; | |
| 44 var description = metricMatch[3] || metricMatch[4]; | |
| 45 if (value !== null) | |
| 46 value = Math.abs(parseFloat(metricMatch[2])); | |
| 47 valueString = metricMatch[5]; // comma delimited headers | |
| 48 result.push(new WebInspector.ServerTiming(target, metric, value, des cription)); | |
| 49 } | |
| 50 return result; | |
| 51 } | |
| 52 | |
| 53 var serverTimings = rawServerTimingHeaders.reduce((memo, header) => { | |
| 54 var timing = createFromHeaderValue(header.value); | |
| 55 Array.prototype.push.apply(memo, timing); | |
| 56 return memo; | |
| 57 }, []); | |
| 58 serverTimings.sort((a, b) => a.metric.toLowerCase().compareTo(b.metric.toLow erCase())); | |
| 59 return serverTimings; | |
| 60 } | |
| OLD | NEW |