Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2012 Intel Inc. All rights reserved. | 3 * Copyright (C) 2012 Intel Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 55 double lastRedirectEndTime, | 55 double lastRedirectEndTime, |
| 56 bool allowTimingDetails, | 56 bool allowTimingDetails, |
| 57 bool allowRedirectDetails) | 57 bool allowRedirectDetails) |
| 58 : PerformanceEntry( | 58 : PerformanceEntry( |
| 59 info.initialURL().getString(), | 59 info.initialURL().getString(), |
| 60 "resource", | 60 "resource", |
| 61 monotonicTimeToDOMHighResTimeStamp(timeOrigin, startTime), | 61 monotonicTimeToDOMHighResTimeStamp(timeOrigin, startTime), |
| 62 monotonicTimeToDOMHighResTimeStamp(timeOrigin, | 62 monotonicTimeToDOMHighResTimeStamp(timeOrigin, |
| 63 info.loadFinishTime())), | 63 info.loadFinishTime())), |
| 64 m_initiatorType(info.initiatorType()), | 64 m_initiatorType(info.initiatorType()), |
| 65 m_nextHopProtocol(info.finalResponse().alpnNegotiatedProtocol()), | |
| 66 m_connectionInfo(info.finalResponse().connectionInfo()), | |
| 65 m_timeOrigin(timeOrigin), | 67 m_timeOrigin(timeOrigin), |
| 66 m_timing(info.finalResponse().resourceLoadTiming()), | 68 m_timing(info.finalResponse().resourceLoadTiming()), |
| 67 m_lastRedirectEndTime(lastRedirectEndTime), | 69 m_lastRedirectEndTime(lastRedirectEndTime), |
| 68 m_finishTime(info.loadFinishTime()), | 70 m_finishTime(info.loadFinishTime()), |
| 69 m_transferSize(info.transferSize()), | 71 m_transferSize(info.transferSize()), |
| 70 m_encodedBodySize(info.finalResponse().encodedBodyLength()), | 72 m_encodedBodySize(info.finalResponse().encodedBodyLength()), |
| 71 m_decodedBodySize(info.finalResponse().decodedBodyLength()), | 73 m_decodedBodySize(info.finalResponse().decodedBodyLength()), |
| 72 m_didReuseConnection(info.finalResponse().connectionReused()), | 74 m_didReuseConnection(info.finalResponse().connectionReused()), |
| 73 m_allowTimingDetails(allowTimingDetails), | 75 m_allowTimingDetails(allowTimingDetails), |
| 74 m_allowRedirectDetails(allowRedirectDetails) {} | 76 m_allowRedirectDetails(allowRedirectDetails) {} |
| 75 | 77 |
| 76 PerformanceResourceTiming::~PerformanceResourceTiming() {} | 78 PerformanceResourceTiming::~PerformanceResourceTiming() {} |
| 77 | 79 |
| 78 AtomicString PerformanceResourceTiming::initiatorType() const { | 80 AtomicString PerformanceResourceTiming::initiatorType() const { |
| 79 return m_initiatorType; | 81 return m_initiatorType; |
| 80 } | 82 } |
| 81 | 83 |
| 84 AtomicString PerformanceResourceTiming::produceNextHopProtocol( | |
| 85 const AtomicString& alpnNegotiatedProtocol, | |
| 86 const AtomicString& connectionInfo) { | |
| 87 // Fallback to connectionInfo when alpnNegotiatedProtocol is unknowm | |
| 88 AtomicString returnedProtocol = alpnNegotiatedProtocol == "unknown" | |
| 89 ? connectionInfo | |
| 90 : alpnNegotiatedProtocol; | |
| 91 // Fallback to "http/1.1" when connectionInfo is also unknown | |
|
panicker
2016/10/27 22:05:22
we should probably log an error here, but let's at
| |
| 92 returnedProtocol = | |
| 93 returnedProtocol == "unknown" ? "http/1.1" : returnedProtocol; | |
| 94 | |
| 95 // If quic is used, it must be prefixed with http/2 | |
| 96 if (returnedProtocol.contains("quic/")) { | |
| 97 AtomicString quicPart( | |
| 98 returnedProtocol.impl()->substring(0, returnedProtocol.find('+'))); | |
| 99 returnedProtocol = "http2/+" + quicPart; | |
|
Yoav Weiss
2016/10/28 07:00:34
Where is that behavior defined?
Yoav Weiss
2016/10/28 07:00:34
Can you add a comment indicating where the "+" syn
panicker
2016/10/28 15:50:23
My understanding is that IETF has not decided yet
Yoav Weiss
2016/11/03 08:10:23
It would still be good to have some definition of
Ryan Hamilton
2016/11/03 14:30:45
bnc: Can you take a look at this in light of your
| |
| 100 } | |
| 101 return returnedProtocol; | |
| 102 } | |
| 103 | |
| 104 AtomicString PerformanceResourceTiming::nextHopProtocol() const { | |
| 105 return PerformanceResourceTiming::produceNextHopProtocol(m_nextHopProtocol, | |
| 106 m_connectionInfo); | |
| 107 } | |
| 108 | |
| 82 double PerformanceResourceTiming::workerStart() const { | 109 double PerformanceResourceTiming::workerStart() const { |
| 83 if (!m_timing || m_timing->workerStart() == 0.0) | 110 if (!m_timing || m_timing->workerStart() == 0.0) |
| 84 return 0.0; | 111 return 0.0; |
| 85 | 112 |
| 86 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, | 113 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, |
| 87 m_timing->workerStart()); | 114 m_timing->workerStart()); |
| 88 } | 115 } |
| 89 | 116 |
| 90 double PerformanceResourceTiming::workerReady() const { | 117 double PerformanceResourceTiming::workerReady() const { |
| 91 if (!m_timing || m_timing->workerReady() == 0.0) | 118 if (!m_timing || m_timing->workerReady() == 0.0) |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 235 unsigned long long PerformanceResourceTiming::decodedBodySize() const { | 262 unsigned long long PerformanceResourceTiming::decodedBodySize() const { |
| 236 if (!m_allowTimingDetails) | 263 if (!m_allowTimingDetails) |
| 237 return 0; | 264 return 0; |
| 238 | 265 |
| 239 return m_decodedBodySize; | 266 return m_decodedBodySize; |
| 240 } | 267 } |
| 241 | 268 |
| 242 void PerformanceResourceTiming::buildJSONValue(V8ObjectBuilder& builder) const { | 269 void PerformanceResourceTiming::buildJSONValue(V8ObjectBuilder& builder) const { |
| 243 PerformanceEntry::buildJSONValue(builder); | 270 PerformanceEntry::buildJSONValue(builder); |
| 244 builder.addString("initiatorType", initiatorType()); | 271 builder.addString("initiatorType", initiatorType()); |
| 272 builder.addString("nextHopProtocol", nextHopProtocol()); | |
| 245 builder.addNumber("workerStart", workerStart()); | 273 builder.addNumber("workerStart", workerStart()); |
| 246 builder.addNumber("redirectStart", redirectStart()); | 274 builder.addNumber("redirectStart", redirectStart()); |
| 247 builder.addNumber("redirectEnd", redirectEnd()); | 275 builder.addNumber("redirectEnd", redirectEnd()); |
| 248 builder.addNumber("fetchStart", fetchStart()); | 276 builder.addNumber("fetchStart", fetchStart()); |
| 249 builder.addNumber("domainLookupStart", domainLookupStart()); | 277 builder.addNumber("domainLookupStart", domainLookupStart()); |
| 250 builder.addNumber("domainLookupEnd", domainLookupEnd()); | 278 builder.addNumber("domainLookupEnd", domainLookupEnd()); |
| 251 builder.addNumber("connectStart", connectStart()); | 279 builder.addNumber("connectStart", connectStart()); |
| 252 builder.addNumber("connectEnd", connectEnd()); | 280 builder.addNumber("connectEnd", connectEnd()); |
| 253 builder.addNumber("secureConnectionStart", secureConnectionStart()); | 281 builder.addNumber("secureConnectionStart", secureConnectionStart()); |
| 254 builder.addNumber("requestStart", requestStart()); | 282 builder.addNumber("requestStart", requestStart()); |
| 255 builder.addNumber("responseStart", responseStart()); | 283 builder.addNumber("responseStart", responseStart()); |
| 256 builder.addNumber("responseEnd", responseEnd()); | 284 builder.addNumber("responseEnd", responseEnd()); |
| 257 builder.addNumber("transferSize", transferSize()); | 285 builder.addNumber("transferSize", transferSize()); |
| 258 builder.addNumber("encodedBodySize", encodedBodySize()); | 286 builder.addNumber("encodedBodySize", encodedBodySize()); |
| 259 builder.addNumber("decodedBodySize", decodedBodySize()); | 287 builder.addNumber("decodedBodySize", decodedBodySize()); |
| 260 } | 288 } |
| 261 | 289 |
| 262 } // namespace blink | 290 } // namespace blink |
| OLD | NEW |