blob: bcee54997fb77199235909bfc0d30b133bcf07d9 [file] [log] [blame]
[email protected]45de676a2014-03-18 23:52:021// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/domain_reliability/beacon.h"
6
Gyuyoung Kim6afb5082018-01-19 13:35:577#include <memory>
dcheng51606352015-12-26 21:16:238#include <utility>
9
[email protected]45de676a2014-03-18 23:52:0210#include "base/values.h"
ttuttleccdd6cc52015-11-22 06:09:4011#include "components/domain_reliability/util.h"
[email protected]45de676a2014-03-18 23:52:0212#include "net/base/net_errors.h"
13
14namespace domain_reliability {
15
16using base::Value;
17using base::DictionaryValue;
18
19DomainReliabilityBeacon::DomainReliabilityBeacon() {}
vmpstrb6449d512016-02-25 23:55:4020DomainReliabilityBeacon::DomainReliabilityBeacon(
21 const DomainReliabilityBeacon& other) = default;
[email protected]45de676a2014-03-18 23:52:0222DomainReliabilityBeacon::~DomainReliabilityBeacon() {}
23
dcheng04a35cd2016-04-22 15:07:2424std::unique_ptr<Value> DomainReliabilityBeacon::ToValue(
ttuttle743f4ae2014-11-04 20:22:3225 base::TimeTicks upload_time,
ttuttleccdd6cc52015-11-22 06:09:4026 base::TimeTicks last_network_change_time,
27 const GURL& collector_url,
leon.hancf889c72017-01-14 02:31:2228 const std::vector<std::unique_ptr<std::string>>& path_prefixes) const {
Gyuyoung Kim6afb5082018-01-19 13:35:5729 auto beacon_value = std::make_unique<DictionaryValue>();
ttuttleccdd6cc52015-11-22 06:09:4030 DCHECK(url.is_valid());
31 GURL sanitized_url = SanitizeURLForReport(url, collector_url, path_prefixes);
32 beacon_value->SetString("url", sanitized_url.spec());
[email protected]45de676a2014-03-18 23:52:0233 beacon_value->SetString("status", status);
zhongyi291d0302015-12-14 07:06:2534 if (!quic_error.empty())
35 beacon_value->SetString("quic_error", quic_error);
[email protected]45de676a2014-03-18 23:52:0236 if (chrome_error != net::OK) {
Gyuyoung Kim6afb5082018-01-19 13:35:5737 auto failure_value = std::make_unique<DictionaryValue>();
[email protected]45de676a2014-03-18 23:52:0238 failure_value->SetString("custom_error",
39 net::ErrorToString(chrome_error));
jdoerriec1a515d2017-06-02 09:44:3840 beacon_value->Set("failure_data", std::move(failure_value));
[email protected]45de676a2014-03-18 23:52:0241 }
42 beacon_value->SetString("server_ip", server_ip);
ttuttle50ff1a272015-04-24 04:16:4543 beacon_value->SetBoolean("was_proxied", was_proxied);
[email protected]414617b2014-06-30 16:49:1344 beacon_value->SetString("protocol", protocol);
zhongyic51f4ed2015-12-08 00:41:1345 if (details.quic_broken)
46 beacon_value->SetBoolean("quic_broken", details.quic_broken);
zhongyi93fa5a92016-03-14 18:10:5747 if (details.quic_port_migration_detected)
48 beacon_value->SetBoolean("quic_port_migration_detected",
49 details.quic_port_migration_detected);
[email protected]45de676a2014-03-18 23:52:0250 if (http_response_code >= 0)
51 beacon_value->SetInteger("http_response_code", http_response_code);
ttuttleccdd6cc52015-11-22 06:09:4052 beacon_value->SetInteger("request_elapsed_ms", elapsed.InMilliseconds());
53 base::TimeDelta request_age = upload_time - start_time;
54 beacon_value->SetInteger("request_age_ms", request_age.InMilliseconds());
ttuttle9f4c7b02014-11-06 22:56:5255 bool network_changed = last_network_change_time > start_time;
56 beacon_value->SetBoolean("network_changed", network_changed);
ttuttleccc4ffa2015-12-10 20:08:4657 beacon_value->SetDouble("sample_rate", sample_rate);
dcheng51606352015-12-26 21:16:2358 return std::move(beacon_value);
[email protected]45de676a2014-03-18 23:52:0259}
60
61} // namespace domain_reliability