diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/timing/performance_resource_timing.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/timing/performance_resource_timing.cc | 68 |
1 files changed, 33 insertions, 35 deletions
diff --git a/chromium/third_party/blink/renderer/core/timing/performance_resource_timing.cc b/chromium/third_party/blink/renderer/core/timing/performance_resource_timing.cc index 62f23d88911..d1265f389b6 100644 --- a/chromium/third_party/blink/renderer/core/timing/performance_resource_timing.cc +++ b/chromium/third_party/blink/renderer/core/timing/performance_resource_timing.cc @@ -32,7 +32,6 @@ #include "third_party/blink/renderer/core/timing/performance_resource_timing.h" #include "third_party/blink/public/mojom/timing/performance_mark_or_measure.mojom-blink.h" -#include "third_party/blink/public/platform/web_resource_timing_info.h" #include "third_party/blink/renderer/bindings/core/v8/v8_object_builder.h" #include "third_party/blink/renderer/core/performance_entry_names.h" #include "third_party/blink/renderer/core/timing/performance.h" @@ -48,12 +47,12 @@ namespace blink { PerformanceResourceTiming::PerformanceResourceTiming( - const WebResourceTimingInfo& info, + const mojom::blink::ResourceTimingInfo& info, base::TimeTicks time_origin, const AtomicString& initiator_type, mojo::PendingReceiver<mojom::blink::WorkerTimingContainer> worker_timing_receiver) - : PerformanceEntry(info.name, + : PerformanceEntry(AtomicString(info.name), Performance::MonotonicTimeToDOMHighResTimeStamp( time_origin, info.start_time, @@ -69,10 +68,11 @@ PerformanceResourceTiming::PerformanceResourceTiming( static_cast<String>(info.alpn_negotiated_protocol)), connection_info_(static_cast<String>(info.connection_info)), time_origin_(time_origin), - timing_(info.timing), + timing_(ResourceLoadTiming::FromMojo(info.timing.get())), last_redirect_end_time_(info.last_redirect_end_time), response_end_(info.response_end), context_type_(info.context_type), + request_destination_(info.request_destination), transfer_size_(info.transfer_size), encoded_body_size_(info.encoded_body_size), decoded_body_size_(info.decoded_body_size), @@ -93,13 +93,13 @@ PerformanceResourceTiming::PerformanceResourceTiming( const AtomicString& name, base::TimeTicks time_origin, bool is_secure_context, - const WebVector<WebServerTimingInfo>& server_timing) + HeapVector<Member<PerformanceServerTiming>> server_timing) : PerformanceEntry(name, 0.0, 0.0), time_origin_(time_origin), context_type_(mojom::RequestContextType::HYPERLINK), + request_destination_(network::mojom::RequestDestination::kDocument), is_secure_context_(is_secure_context), - server_timing_( - PerformanceServerTiming::FromParsedServerTiming(server_timing)), + server_timing_(std::move(server_timing)), worker_timing_receiver_(this, mojo::NullReceiver()) {} PerformanceResourceTiming::~PerformanceResourceTiming() = default; @@ -148,16 +148,32 @@ AtomicString PerformanceResourceTiming::ConnectionInfo() const { return connection_info_; } +namespace { +bool IsDocumentDestination(mojom::blink::RequestContextType context_type) { + // TODO(crbug.com/889751) : Need to change using RequestDestination + return context_type == mojom::blink::RequestContextType::IFRAME || + context_type == mojom::blink::RequestContextType::FRAME || + context_type == mojom::blink::RequestContextType::FORM || + context_type == mojom::blink::RequestContextType::HYPERLINK; +} + +} // namespace + AtomicString PerformanceResourceTiming::GetNextHopProtocol( const AtomicString& alpn_negotiated_protocol, - const AtomicString& connection_info) { + const AtomicString& connection_info) const { // 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) - returnedProtocol = (returnedProtocol == "unknown") ? "" : returnedProtocol; + // If connection_info is unknown, or if this is a `document` destination and + // TAO didn't pass, return the empty string. + // https://github.com/w3c/navigation-timing/issues/71 + // https://github.com/w3c/resource-timing/pull/224 + if (returnedProtocol == "unknown" || + (!AllowTimingDetails() && IsDocumentDestination(context_type_))) { + returnedProtocol = ""; + } return returnedProtocol; } @@ -167,16 +183,6 @@ AtomicString PerformanceResourceTiming::nextHopProtocol() const { ConnectionInfo()); } -namespace { -bool IsDocumentDestination(mojom::RequestContextType context_type) { - return context_type == mojom::RequestContextType::IFRAME || - context_type == mojom::RequestContextType::FRAME || - context_type == mojom::RequestContextType::FORM || - context_type == mojom::RequestContextType::HYPERLINK; -} - -} // namespace - DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const { ResourceLoadTiming* timing = GetResourceLoadTiming(); if (!timing || timing->WorkerStart().is_null() || @@ -388,19 +394,11 @@ void PerformanceResourceTiming::BuildJSONValue(V8ObjectBuilder& builder) const { builder.AddNumber("encodedBodySize", encodedBodySize()); builder.AddNumber("decodedBodySize", decodedBodySize()); - HeapVector<ScriptValue> server_timing; - server_timing.ReserveCapacity(server_timing_.size()); - for (const auto& timing : server_timing_) { - server_timing.push_back(timing->toJSONForBinding(builder.GetScriptState())); - } - builder.Add("serverTiming", server_timing); - - HeapVector<ScriptValue> worker_timing; - worker_timing.ReserveCapacity(worker_timing_.size()); - for (const auto& timing : worker_timing_) { - worker_timing.push_back(timing->toJSONForBinding(builder.GetScriptState())); - } - builder.Add("workerTiming", worker_timing); + ScriptState* script_state = builder.GetScriptState(); + builder.Add("serverTiming", FreezeV8Object(ToV8(serverTiming(), script_state), + script_state->GetIsolate())); + builder.Add("workerTiming", FreezeV8Object(ToV8(workerTiming(), script_state), + script_state->GetIsolate())); } void PerformanceResourceTiming::AddPerformanceEntry( @@ -441,7 +439,7 @@ void PerformanceResourceTiming::AddPerformanceEntry( } } -void PerformanceResourceTiming::Trace(blink::Visitor* visitor) { +void PerformanceResourceTiming::Trace(Visitor* visitor) { visitor->Trace(server_timing_); visitor->Trace(worker_timing_); PerformanceEntry::Trace(visitor); |