| 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 48678a8993855bdb47ea6837809bb3b98a80c850..eb3ca52a353be14f1091bbbb10c7283095317171 100644
|
| --- a/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp
|
| +++ b/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp
|
| @@ -57,6 +57,8 @@ PerformanceResourceTiming::PerformanceResourceTiming(
|
| info.LoadFinishTime(),
|
| info.NegativeAllowed())),
|
| initiator_type_(info.InitiatorType()),
|
| + alpn_negotiated_protocol_(info.FinalResponse().AlpnNegotiatedProtocol()),
|
| + connection_info_(info.FinalResponse().ConnectionInfoString()),
|
| time_origin_(time_origin),
|
| timing_(info.FinalResponse().GetResourceLoadTiming()),
|
| last_redirect_end_time_(last_redirect_end_time),
|
| @@ -106,6 +108,36 @@ AtomicString PerformanceResourceTiming::initiatorType() const {
|
| return initiator_type_;
|
| }
|
|
|
| +AtomicString PerformanceResourceTiming::AlpnNegotiatedProtocol() const {
|
| + return alpn_negotiated_protocol_;
|
| +}
|
| +
|
| +AtomicString PerformanceResourceTiming::ConnectionInfo() const {
|
| + return connection_info_;
|
| +}
|
| +
|
| +AtomicString PerformanceResourceTiming::GetNextHopProtocol(
|
| + const AtomicString& alpn_negotiated_protocol,
|
| + const AtomicString& connection_info) {
|
| + // Fallback to connection_info when alpn_negotiated_protocol is unknown.
|
| + AtomicString returnedProtocol = alpn_negotiated_protocol == "unknown"
|
| + ? connection_info
|
| + : alpn_negotiated_protocol;
|
| + // Fallback to "http/1.1" when connection_info is also unknown.
|
| + returnedProtocol =
|
| + returnedProtocol == "unknown" ? "http/1.1" : returnedProtocol;
|
| +
|
| + if (returnedProtocol.Contains("quic"))
|
| + returnedProtocol = "hq";
|
| +
|
| + return returnedProtocol;
|
| +}
|
| +
|
| +AtomicString PerformanceResourceTiming::nextHopProtocol() const {
|
| + return PerformanceResourceTiming::GetNextHopProtocol(AlpnNegotiatedProtocol(),
|
| + ConnectionInfo());
|
| +}
|
| +
|
| DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const {
|
| ResourceLoadTiming* timing = GetResourceLoadTiming();
|
| if (!timing || timing->WorkerStart() == 0.0)
|
| @@ -277,6 +309,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());
|
|
|