123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/domain_reliability/beacon.h"
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/values.h"
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "net/base/net_errors.h"
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace domain_reliability {
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)using base::Value;
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)using base::DictionaryValue;
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)DomainReliabilityBeacon::DomainReliabilityBeacon() {}
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)DomainReliabilityBeacon::~DomainReliabilityBeacon() {}
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Value* DomainReliabilityBeacon::ToValue(base::TimeTicks upload_time) const {
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  DictionaryValue* beacon_value = new DictionaryValue();
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!url.empty())
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    beacon_value->SetString("url", url);
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!domain.empty())
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    beacon_value->SetString("domain", domain);
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!resource.empty())
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    beacon_value->SetString("resource", resource);
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  beacon_value->SetString("status", status);
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (chrome_error != net::OK) {
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    DictionaryValue* failure_value = new DictionaryValue();
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    failure_value->SetString("custom_error",
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                             net::ErrorToString(chrome_error));
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    beacon_value->Set("failure_data", failure_value);
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  beacon_value->SetString("server_ip", server_ip);
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  beacon_value->SetString("protocol", protocol);
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (http_response_code >= 0)
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    beacon_value->SetInteger("http_response_code", http_response_code);
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  beacon_value->SetInteger("request_elapsed_ms",
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                           elapsed.InMilliseconds());
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  beacon_value->SetInteger("request_age_ms",
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                           (upload_time - start_time).InMilliseconds());
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return beacon_value;
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}  // namespace domain_reliability
45