summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/timing/performance_resource_timing.cc
diff options
context:
space:
mode:
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.cc68
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);