Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Side by Side Diff: third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp

Issue 2429063002: Implement nextHopProtocol in PerformanceResourceTiming and PerformanceNavigationTiming.
Patch Set: added two more test cases Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698