Chromium Code Reviews| Index: third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp |
| diff --git a/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp b/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp |
| index bc8441f93083ed1450207b77a167a1a936e177f3..a0245c057b978edc5335be398b2913be4104d22b 100644 |
| --- a/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp |
| +++ b/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp |
| @@ -62,6 +62,8 @@ PerformanceResourceTiming::PerformanceResourceTiming( |
| monotonicTimeToDOMHighResTimeStamp(timeOrigin, |
| info.loadFinishTime())), |
| m_initiatorType(info.initiatorType()), |
| + m_nextHopProtocol(info.finalResponse().alpnNegotiatedProtocol()), |
| + m_connectionInfo(info.finalResponse().connectionInfo()), |
| m_timeOrigin(timeOrigin), |
| m_timing(info.finalResponse().resourceLoadTiming()), |
| m_lastRedirectEndTime(lastRedirectEndTime), |
| @@ -79,6 +81,31 @@ AtomicString PerformanceResourceTiming::initiatorType() const { |
| return m_initiatorType; |
| } |
| +AtomicString PerformanceResourceTiming::produceNextHopProtocol( |
| + const AtomicString& alpnNegotiatedProtocol, |
| + const AtomicString& connectionInfo) { |
| + // Fallback to connectionInfo when alpnNegotiatedProtocol is unknowm |
| + AtomicString returnedProtocol = alpnNegotiatedProtocol == "unknown" |
| + ? connectionInfo |
| + : alpnNegotiatedProtocol; |
| + // 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
|
| + returnedProtocol = |
| + returnedProtocol == "unknown" ? "http/1.1" : returnedProtocol; |
| + |
| + // If quic is used, it must be prefixed with http/2 |
| + if (returnedProtocol.contains("quic/")) { |
| + AtomicString quicPart( |
| + returnedProtocol.impl()->substring(0, returnedProtocol.find('+'))); |
| + 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
|
| + } |
| + return returnedProtocol; |
| +} |
| + |
| +AtomicString PerformanceResourceTiming::nextHopProtocol() const { |
| + return PerformanceResourceTiming::produceNextHopProtocol(m_nextHopProtocol, |
| + m_connectionInfo); |
| +} |
| + |
| double PerformanceResourceTiming::workerStart() const { |
| if (!m_timing || m_timing->workerStart() == 0.0) |
| return 0.0; |
| @@ -242,6 +269,7 @@ unsigned long long PerformanceResourceTiming::decodedBodySize() const { |
| void PerformanceResourceTiming::buildJSONValue(V8ObjectBuilder& builder) const { |
| PerformanceEntry::buildJSONValue(builder); |
| builder.addString("initiatorType", initiatorType()); |
| + builder.addString("nextHopProtocol", nextHopProtocol()); |
| builder.addNumber("workerStart", workerStart()); |
| builder.addNumber("redirectStart", redirectStart()); |
| builder.addNumber("redirectEnd", redirectEnd()); |