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..fd2fd66a0ab2a2fabef2d024e889575a37305942 100644 |
| --- a/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp |
| +++ b/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp |
| @@ -36,6 +36,7 @@ |
| #include "platform/network/ResourceRequest.h" |
| #include "platform/network/ResourceResponse.h" |
| #include "platform/network/ResourceTimingInfo.h" |
| +#include <regex> |
| namespace blink { |
| @@ -62,6 +63,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 +82,29 @@ AtomicString PerformanceResourceTiming::initiatorType() const { |
| return m_initiatorType; |
| } |
| +AtomicString PerformanceResourceTiming::produceNextHopProtocol( |
| + const AtomicString& alpnNegotiatedProtocol, |
| + const AtomicString& connectionInfo) { |
| + AtomicString returnedProtocol = alpnNegotiatedProtocol == "unknown" |
| + ? connectionInfo |
| + : alpnNegotiatedProtocol; |
| + returnedProtocol = |
|
panicker
2016/10/25 23:53:26
Add a comment explaining this
sunjian
2016/10/26 19:56:52
Done.
|
| + returnedProtocol == "unknown" ? "http/1.1" : returnedProtocol; |
| + std::string returnedProtocolCopy = returnedProtocol.ascii().data(); |
|
panicker
2016/10/25 23:53:26
std::string and std::regex are not allowed in Sour
sunjian
2016/10/26 19:56:52
Done.
|
| + if (std::regex_match(returnedProtocolCopy, std::regex("(quic/)(.*)"))) { |
| + returnedProtocol = |
| + ("http2/+" + |
| + returnedProtocolCopy.substr(0, returnedProtocolCopy.find('+'))) |
| + .c_str(); |
| + } |
| + 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 +268,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()); |