| 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
|
| + 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;
|
| + }
|
| + 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());
|
|
|