blob: fa5c48dcf6cbab6a383810810aeca2456d5c07be [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/resource_timing_info_conversions.h"
#include <string>
#include <vector>
#include "content/common/resource_timing_info.h"
#include "third_party/blink/public/platform/web_resource_timing_info.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_vector.h"
namespace content {
ResourceTimingInfo WebResourceTimingInfoToResourceTimingInfo(
const blink::WebResourceTimingInfo& info) {
// TODO(dcheng): This is sad. Move this to Mojo.
ResourceTimingInfo resource_timing;
resource_timing.name = info.name.Utf8();
resource_timing.start_time = info.start_time;
resource_timing.alpn_negotiated_protocol =
info.alpn_negotiated_protocol.Utf8();
resource_timing.connection_info = info.connection_info.Utf8();
if (!info.timing.IsNull()) {
resource_timing.timing.emplace();
resource_timing.timing->request_time = info.timing.RequestTime();
resource_timing.timing->proxy_start = info.timing.ProxyStart();
resource_timing.timing->proxy_end = info.timing.ProxyEnd();
resource_timing.timing->dns_start = info.timing.DnsStart();
resource_timing.timing->dns_end = info.timing.DnsEnd();
resource_timing.timing->connect_start = info.timing.ConnectStart();
resource_timing.timing->connect_end = info.timing.ConnectEnd();
resource_timing.timing->worker_start = info.timing.WorkerStart();
resource_timing.timing->worker_ready = info.timing.WorkerReady();
resource_timing.timing->send_start = info.timing.SendStart();
resource_timing.timing->send_end = info.timing.SendEnd();
resource_timing.timing->receive_headers_start =
info.timing.ReceiveHeadersStart();
resource_timing.timing->receive_headers_end =
info.timing.ReceiveHeadersEnd();
resource_timing.timing->ssl_start = info.timing.SslStart();
resource_timing.timing->ssl_end = info.timing.SslEnd();
resource_timing.timing->push_start = info.timing.PushStart();
resource_timing.timing->push_end = info.timing.PushEnd();
}
resource_timing.last_redirect_end_time = info.last_redirect_end_time;
resource_timing.response_end = info.response_end;
resource_timing.transfer_size = info.transfer_size;
resource_timing.encoded_body_size = info.encoded_body_size;
resource_timing.decoded_body_size = info.decoded_body_size;
resource_timing.did_reuse_connection = info.did_reuse_connection;
resource_timing.allow_timing_details = info.allow_timing_details;
resource_timing.allow_redirect_details = info.allow_redirect_details;
resource_timing.allow_negative_values = info.allow_negative_values;
for (const auto& entry : info.server_timing) {
resource_timing.server_timing.emplace_back();
auto& new_entry = resource_timing.server_timing.back();
new_entry.name = entry.name.Utf8();
new_entry.duration = entry.duration;
new_entry.description = entry.description.Utf8();
}
return resource_timing;
}
blink::WebResourceTimingInfo ResourceTimingInfoToWebResourceTimingInfo(
const ResourceTimingInfo& resource_timing) {
// TODO(dcheng): This is sad. Move this to Mojo.
blink::WebResourceTimingInfo info;
info.name = blink::WebString::FromUTF8(resource_timing.name);
info.start_time = resource_timing.start_time;
info.alpn_negotiated_protocol =
blink::WebString::FromUTF8(resource_timing.alpn_negotiated_protocol);
info.connection_info =
blink::WebString::FromUTF8(resource_timing.connection_info);
if (resource_timing.timing) {
info.timing.Initialize();
info.timing.SetRequestTime(resource_timing.timing->request_time);
info.timing.SetProxyStart(resource_timing.timing->proxy_start);
info.timing.SetProxyEnd(resource_timing.timing->proxy_end);
info.timing.SetDNSStart(resource_timing.timing->dns_start);
info.timing.SetDNSEnd(resource_timing.timing->dns_end);
info.timing.SetConnectStart(resource_timing.timing->connect_start);
info.timing.SetConnectEnd(resource_timing.timing->connect_end);
info.timing.SetWorkerStart(resource_timing.timing->worker_start);
info.timing.SetWorkerReady(resource_timing.timing->worker_ready);
info.timing.SetSendStart(resource_timing.timing->send_start);
info.timing.SetSendEnd(resource_timing.timing->send_end);
info.timing.SetReceiveHeadersStart(
resource_timing.timing->receive_headers_start);
info.timing.SetReceiveHeadersEnd(
resource_timing.timing->receive_headers_end);
info.timing.SetSSLStart(resource_timing.timing->ssl_start);
info.timing.SetSSLEnd(resource_timing.timing->ssl_end);
info.timing.SetPushStart(resource_timing.timing->push_start);
info.timing.SetPushEnd(resource_timing.timing->push_end);
}
info.last_redirect_end_time = resource_timing.last_redirect_end_time;
info.response_end = resource_timing.response_end;
info.transfer_size = resource_timing.transfer_size;
info.encoded_body_size = resource_timing.encoded_body_size;
info.decoded_body_size = resource_timing.decoded_body_size;
info.did_reuse_connection = resource_timing.did_reuse_connection;
info.allow_timing_details = resource_timing.allow_timing_details;
info.allow_redirect_details = resource_timing.allow_redirect_details;
info.allow_negative_values = resource_timing.allow_negative_values;
info.server_timing.reserve(resource_timing.server_timing.size());
for (const auto& server_timing : resource_timing.server_timing) {
info.server_timing.emplace_back(
blink::WebString::FromUTF8(server_timing.name), server_timing.duration,
blink::WebString::FromUTF8(server_timing.description));
}
return info;
}
} // namespace content