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 48678a8993855bdb47ea6837809bb3b98a80c850..7133ad561a1b9eee906ec447e51fe621d8a93547 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,37 @@ 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; |
| + // If connection_info is also unknown, return empty string. |
| + // (https://github.com/w3c/navigation-timing/issues/71) |
|
Yoav Weiss
2017/06/16 15:25:04
This probably should be documented elsewhere, but
panicker
2017/06/16 22:41:17
What else is there to document exactly (and which
|
| + returnedProtocol = (returnedProtocol == "unknown") ? "" : returnedProtocol; |
| + // If the protocol is http over quic (e.g. http/2+quic/37), convert it to the |
| + // alpn id "hq". (https://github.com/w3c/navigation-timing/issues/71) |
|
Yoav Weiss
2017/06/16 15:25:04
I don't think we should convert Google's QUIC into
panicker
2017/06/16 17:37:27
What are you proposing instead?
I'm fine with star
panicker
2017/06/16 22:41:17
As Ilya suggested on bug, let's stick with "hq" an
|
| + 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 +310,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()); |