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 abd783c3ff4b9d91ed6b2ca39c5b11e55fd7ea07..47d8964486cc37da7af07796a3b808ddea479da5 100644 |
| --- a/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp |
| +++ b/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp |
| @@ -55,6 +55,8 @@ PerformanceResourceTiming::PerformanceResourceTiming( |
| 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), |
| @@ -103,6 +105,28 @@ AtomicString PerformanceResourceTiming::initiatorType() const { |
| return m_initiatorType; |
| } |
| +AtomicString PerformanceResourceTiming::getNextHopProtocol( |
| + 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. |
| + returnedProtocol = |
| + returnedProtocol == "unknown" ? "http/1.1" : returnedProtocol; |
| + |
| + if (returnedProtocol.contains("quic")) { |
| + returnedProtocol = "hq"; |
| + } |
|
Ryan Hamilton
2017/04/05 20:31:11
Instead of doing the mapping from "... quic ... "
panicker
2017/04/05 21:48:27
Could we do this as a follow-up - if someone on ne
|
| + return returnedProtocol; |
| +} |
| + |
| +AtomicString PerformanceResourceTiming::nextHopProtocol() const { |
| + return PerformanceResourceTiming::getNextHopProtocol(m_nextHopProtocol, |
| + m_connectionInfo); |
| +} |
| + |
| DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const { |
| ResourceLoadTiming* timing = resourceLoadTiming(); |
| if (!timing || timing->workerStart() == 0.0) |
| @@ -274,6 +298,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()); |