| 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 "resource", | 50 "resource", |
| 51 PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 51 PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
| 52 time_origin, | 52 time_origin, |
| 53 start_time, | 53 start_time, |
| 54 info.NegativeAllowed()), | 54 info.NegativeAllowed()), |
| 55 PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 55 PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
| 56 time_origin, | 56 time_origin, |
| 57 info.LoadFinishTime(), | 57 info.LoadFinishTime(), |
| 58 info.NegativeAllowed())), | 58 info.NegativeAllowed())), |
| 59 initiator_type_(info.InitiatorType()), | 59 initiator_type_(info.InitiatorType()), |
| 60 alpn_negotiated_protocol_(info.FinalResponse().AlpnNegotiatedProtocol()), |
| 61 connection_info_(info.FinalResponse().ConnectionInfoString()), |
| 60 time_origin_(time_origin), | 62 time_origin_(time_origin), |
| 61 timing_(info.FinalResponse().GetResourceLoadTiming()), | 63 timing_(info.FinalResponse().GetResourceLoadTiming()), |
| 62 last_redirect_end_time_(last_redirect_end_time), | 64 last_redirect_end_time_(last_redirect_end_time), |
| 63 finish_time_(info.LoadFinishTime()), | 65 finish_time_(info.LoadFinishTime()), |
| 64 transfer_size_(info.TransferSize()), | 66 transfer_size_(info.TransferSize()), |
| 65 encoded_body_size_(info.FinalResponse().EncodedBodyLength()), | 67 encoded_body_size_(info.FinalResponse().EncodedBodyLength()), |
| 66 decoded_body_size_(info.FinalResponse().DecodedBodyLength()), | 68 decoded_body_size_(info.FinalResponse().DecodedBodyLength()), |
| 67 did_reuse_connection_(info.FinalResponse().ConnectionReused()), | 69 did_reuse_connection_(info.FinalResponse().ConnectionReused()), |
| 68 allow_timing_details_(allow_timing_details), | 70 allow_timing_details_(allow_timing_details), |
| 69 allow_redirect_details_(allow_redirect_details), | 71 allow_redirect_details_(allow_redirect_details), |
| (...skipping 29 matching lines...) Expand all Loading... |
| 99 } | 101 } |
| 100 | 102 |
| 101 unsigned long long PerformanceResourceTiming::GetDecodedBodySize() const { | 103 unsigned long long PerformanceResourceTiming::GetDecodedBodySize() const { |
| 102 return decoded_body_size_; | 104 return decoded_body_size_; |
| 103 } | 105 } |
| 104 | 106 |
| 105 AtomicString PerformanceResourceTiming::initiatorType() const { | 107 AtomicString PerformanceResourceTiming::initiatorType() const { |
| 106 return initiator_type_; | 108 return initiator_type_; |
| 107 } | 109 } |
| 108 | 110 |
| 111 AtomicString PerformanceResourceTiming::AlpnNegotiatedProtocol() const { |
| 112 return alpn_negotiated_protocol_; |
| 113 } |
| 114 |
| 115 AtomicString PerformanceResourceTiming::ConnectionInfo() const { |
| 116 return connection_info_; |
| 117 } |
| 118 |
| 119 AtomicString PerformanceResourceTiming::GetNextHopProtocol( |
| 120 const AtomicString& alpn_negotiated_protocol, |
| 121 const AtomicString& connection_info) { |
| 122 // Fallback to connection_info when alpn_negotiated_protocol is unknown. |
| 123 AtomicString returnedProtocol = (alpn_negotiated_protocol == "unknown") |
| 124 ? connection_info |
| 125 : alpn_negotiated_protocol; |
| 126 // If connection_info is also unknown, return empty string. |
| 127 // (https://github.com/w3c/navigation-timing/issues/71) |
| 128 returnedProtocol = (returnedProtocol == "unknown") ? "" : returnedProtocol; |
| 129 // If the protocol is http over quic (e.g. http/2+quic/37), convert it to the |
| 130 // alpn id "hq". (https://github.com/w3c/navigation-timing/issues/71) |
| 131 if (returnedProtocol.Contains("quic")) |
| 132 returnedProtocol = "hq"; |
| 133 |
| 134 return returnedProtocol; |
| 135 } |
| 136 |
| 137 AtomicString PerformanceResourceTiming::nextHopProtocol() const { |
| 138 return PerformanceResourceTiming::GetNextHopProtocol(AlpnNegotiatedProtocol(), |
| 139 ConnectionInfo()); |
| 140 } |
| 141 |
| 109 DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const { | 142 DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const { |
| 110 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 143 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
| 111 if (!timing || timing->WorkerStart() == 0.0) | 144 if (!timing || timing->WorkerStart() == 0.0) |
| 112 return 0.0; | 145 return 0.0; |
| 113 | 146 |
| 114 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 147 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
| 115 time_origin_, timing->WorkerStart(), allow_negative_value_); | 148 time_origin_, timing->WorkerStart(), allow_negative_value_); |
| 116 } | 149 } |
| 117 | 150 |
| 118 DOMHighResTimeStamp PerformanceResourceTiming::WorkerReady() const { | 151 DOMHighResTimeStamp PerformanceResourceTiming::WorkerReady() const { |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 unsigned long long PerformanceResourceTiming::decodedBodySize() const { | 303 unsigned long long PerformanceResourceTiming::decodedBodySize() const { |
| 271 if (!AllowTimingDetails()) | 304 if (!AllowTimingDetails()) |
| 272 return 0; | 305 return 0; |
| 273 | 306 |
| 274 return GetDecodedBodySize(); | 307 return GetDecodedBodySize(); |
| 275 } | 308 } |
| 276 | 309 |
| 277 void PerformanceResourceTiming::BuildJSONValue(V8ObjectBuilder& builder) const { | 310 void PerformanceResourceTiming::BuildJSONValue(V8ObjectBuilder& builder) const { |
| 278 PerformanceEntry::BuildJSONValue(builder); | 311 PerformanceEntry::BuildJSONValue(builder); |
| 279 builder.AddString("initiatorType", initiatorType()); | 312 builder.AddString("initiatorType", initiatorType()); |
| 313 builder.AddString("nextHopProtocol", nextHopProtocol()); |
| 280 builder.AddNumber("workerStart", workerStart()); | 314 builder.AddNumber("workerStart", workerStart()); |
| 281 builder.AddNumber("redirectStart", redirectStart()); | 315 builder.AddNumber("redirectStart", redirectStart()); |
| 282 builder.AddNumber("redirectEnd", redirectEnd()); | 316 builder.AddNumber("redirectEnd", redirectEnd()); |
| 283 builder.AddNumber("fetchStart", fetchStart()); | 317 builder.AddNumber("fetchStart", fetchStart()); |
| 284 builder.AddNumber("domainLookupStart", domainLookupStart()); | 318 builder.AddNumber("domainLookupStart", domainLookupStart()); |
| 285 builder.AddNumber("domainLookupEnd", domainLookupEnd()); | 319 builder.AddNumber("domainLookupEnd", domainLookupEnd()); |
| 286 builder.AddNumber("connectStart", connectStart()); | 320 builder.AddNumber("connectStart", connectStart()); |
| 287 builder.AddNumber("connectEnd", connectEnd()); | 321 builder.AddNumber("connectEnd", connectEnd()); |
| 288 builder.AddNumber("secureConnectionStart", secureConnectionStart()); | 322 builder.AddNumber("secureConnectionStart", secureConnectionStart()); |
| 289 builder.AddNumber("requestStart", requestStart()); | 323 builder.AddNumber("requestStart", requestStart()); |
| 290 builder.AddNumber("responseStart", responseStart()); | 324 builder.AddNumber("responseStart", responseStart()); |
| 291 builder.AddNumber("responseEnd", responseEnd()); | 325 builder.AddNumber("responseEnd", responseEnd()); |
| 292 builder.AddNumber("transferSize", transferSize()); | 326 builder.AddNumber("transferSize", transferSize()); |
| 293 builder.AddNumber("encodedBodySize", encodedBodySize()); | 327 builder.AddNumber("encodedBodySize", encodedBodySize()); |
| 294 builder.AddNumber("decodedBodySize", decodedBodySize()); | 328 builder.AddNumber("decodedBodySize", decodedBodySize()); |
| 295 } | 329 } |
| 296 | 330 |
| 297 } // namespace blink | 331 } // namespace blink |
| OLD | NEW |