15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_log.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns parameters for logging data transferred events. Includes number of 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bytes transferred and, if the log level indicates bytes should be logged and 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |byte_count| > 0, the bytes themselves. The bytes are hex-encoded, since 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// base::StringValue only supports UTF-8. 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::Value* BytesTransferredCallback(int byte_count, 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const char* bytes, 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NetLog::LogLevel log_level) { 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetInteger("byte_count", byte_count); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (NetLog::IsLoggingBytes(log_level) && byte_count > 0) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString("hex_encoded_bytes", base::HexEncode(bytes, byte_count)); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dict; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::Value* SourceEventParametersCallback(const NetLog::Source source, 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NetLog::LogLevel /* log_level */) { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!source.IsValid()) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* event_params = new base::DictionaryValue(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source.AddToEventParameters(event_params); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return event_params; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::Value* NetLogIntegerCallback(const char* name, 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int value, 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NetLog::LogLevel /* log_level */) { 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* event_params = new base::DictionaryValue(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_params->SetInteger(name, value); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return event_params; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::Value* NetLogInt64Callback(const char* name, 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int64 value, 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NetLog::LogLevel /* log_level */) { 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* event_params = new base::DictionaryValue(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_params->SetString(name, base::Int64ToString(value)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return event_params; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::Value* NetLogStringCallback(const char* name, 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string* value, 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NetLog::LogLevel /* log_level */) { 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* event_params = new base::DictionaryValue(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_params->SetString(name, *value); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return event_params; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::Value* NetLogString16Callback(const char* name, 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::string16* value, 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NetLog::LogLevel /* log_level */) { 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* event_params = new base::DictionaryValue(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_params->SetString(name, *value); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return event_params; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// LoadTimingInfo requires this be 0. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const uint32 NetLog::Source::kInvalidId = 0; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetLog::Source::Source() : type(SOURCE_NONE), id(kInvalidId) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetLog::Source::Source(SourceType type, uint32 id) : type(type), id(id) { 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NetLog::Source::IsValid() const { 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return id != kInvalidId; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void NetLog::Source::AddToEventParameters( 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* event_params) const { 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetInteger("type", static_cast<int>(type)); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetInteger("id", static_cast<int>(id)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_params->Set("source_dependency", dict); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::ParametersCallback NetLog::Source::ToEventParametersCallback() const { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Bind(&SourceEventParametersCallback, *this); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool NetLog::Source::FromEventParameters(base::Value* event_params, 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Source* source) { 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* dict; 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* source_dict; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int source_id; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int source_type; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!event_params || 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !event_params->GetAsDictionary(&dict) || 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !dict->GetDictionary("source_dependency", &source_dict) || 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !source_dict->GetInteger("id", &source_id) || 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !source_dict->GetInteger("type", &source_type)) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *source = Source(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LE(0, source_id); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LT(source_type, NetLog::SOURCE_COUNT); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *source = Source(static_cast<SourceType>(source_type), source_id); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::Value* NetLog::Entry::ToValue() const { 1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* entry_dict(new base::DictionaryValue()); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry_dict->SetString("time", TickCountToString(time_)); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the entry source. 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* source_dict = new base::DictionaryValue(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_dict->SetInteger("id", source_.id); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_dict->SetInteger("type", static_cast<int>(source_.type)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry_dict->Set("source", source_dict); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the event info. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry_dict->SetInteger("type", static_cast<int>(type_)); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry_dict->SetInteger("phase", static_cast<int>(phase_)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the event-specific parameters. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (parameters_callback_) { 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Value* value = parameters_callback_->Run(log_level_); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry_dict->Set("params", value); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return entry_dict; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::Value* NetLog::Entry::ParametersToValue() const { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (parameters_callback_) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return parameters_callback_->Run(log_level_); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::Entry::Entry( 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventType type, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Source source, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventPhase phase, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks time, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ParametersCallback* parameters_callback, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogLevel log_level) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : type_(type), 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_(source), 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) phase_(phase), 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time_(time), 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parameters_callback_(parameters_callback), 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log_level_(log_level) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::Entry::~Entry() { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::ThreadSafeObserver::ThreadSafeObserver() : log_level_(LOG_BASIC), 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net_log_(NULL) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::ThreadSafeObserver::~ThreadSafeObserver() { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we aren't watching a NetLog on destruction. Because the NetLog 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // may pass events to each observer on multiple threads, we cannot safely 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // stop watching a NetLog automatically from a parent class. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!net_log_); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::LogLevel NetLog::ThreadSafeObserver::log_level() const { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(net_log_); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return log_level_; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog* NetLog::ThreadSafeObserver::net_log() const { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return net_log_; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)NetLog::NetLog() 193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : last_id_(0), 194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base_log_level_(LOG_NONE), 195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) effective_log_level_(LOG_NONE) { 196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)NetLog::~NetLog() { 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetLog::AddGlobalEntry(EventType type) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEntry(type, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Source(net::NetLog::SOURCE_NONE, NextID()), 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::NetLog::PHASE_NONE, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetLog::AddGlobalEntry( 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventType type, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetLog::ParametersCallback& parameters_callback) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEntry(type, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Source(net::NetLog::SOURCE_NONE, NextID()), 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::NetLog::PHASE_NONE, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ¶meters_callback); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)uint32 NetLog::NextID() { 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void NetLog::SetBaseLogLevel(LogLevel log_level) { 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::AutoLock lock(lock_); 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base_log_level_ = log_level; 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UpdateLogLevel(); 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 227868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 228868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)NetLog::LogLevel NetLog::GetLogLevel() const { 229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::subtle::Atomic32 log_level = 230868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::subtle::NoBarrier_Load(&effective_log_level_); 231868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return static_cast<net::NetLog::LogLevel>(log_level); 232868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 233868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void NetLog::AddThreadSafeObserver( 235868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) net::NetLog::ThreadSafeObserver* observer, 236868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LogLevel log_level) { 237868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::AutoLock lock(lock_); 238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(!observer->net_log_); 240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) observers_.AddObserver(observer); 241868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) observer->net_log_ = this; 242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) observer->log_level_ = log_level; 243868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UpdateLogLevel(); 244868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 246868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void NetLog::SetObserverLogLevel( 247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) net::NetLog::ThreadSafeObserver* observer, 248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LogLevel log_level) { 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::AutoLock lock(lock_); 250868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 251868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(observers_.HasObserver(observer)); 252868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK_EQ(this, observer->net_log_); 253868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) observer->log_level_ = log_level; 254868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UpdateLogLevel(); 255868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 256868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void NetLog::RemoveThreadSafeObserver( 258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) net::NetLog::ThreadSafeObserver* observer) { 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::AutoLock lock(lock_); 260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(observers_.HasObserver(observer)); 262868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK_EQ(this, observer->net_log_); 263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) observers_.RemoveObserver(observer); 264868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) observer->net_log_ = NULL; 265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UpdateLogLevel(); 266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 268868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void NetLog::UpdateLogLevel() { 269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) lock_.AssertAcquired(); 270868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Look through all the observers and find the finest granularity 272868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // log level (higher values of the enum imply *lower* log levels). 273868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LogLevel new_effective_log_level = base_log_level_; 274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ObserverListBase<ThreadSafeObserver>::Iterator it(observers_); 275868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ThreadSafeObserver* observer; 276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) while ((observer = it.GetNext()) != NULL) { 277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_effective_log_level = 278868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::min(new_effective_log_level, observer->log_level()); 279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::subtle::NoBarrier_Store(&effective_log_level_, 281868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_effective_log_level); 282868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 283868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string NetLog::TickCountToString(const base::TimeTicks& time) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Int64ToString(delta_time); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* NetLog::EventTypeToString(EventType event) { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (event) { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EVENT_TYPE(label) case TYPE_ ## label: return #label; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_log_event_type_list.h" 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef EVENT_TYPE 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Value* NetLog::GetEventTypesAsValue() { 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < EVENT_COUNT; ++i) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetInteger(EventTypeToString(static_cast<EventType>(i)), i); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dict; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* NetLog::SourceTypeToString(SourceType source) { 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (source) { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SOURCE_TYPE(label) case SOURCE_ ## label: return #label; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_log_source_type_list.h" 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SOURCE_TYPE 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Value* NetLog::GetSourceTypesAsValue() { 3257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < SOURCE_COUNT; ++i) { 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetInteger(SourceTypeToString(static_cast<SourceType>(i)), i); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dict; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* NetLog::EventPhaseToString(EventPhase phase) { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (phase) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PHASE_BEGIN: 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "PHASE_BEGIN"; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PHASE_END: 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "PHASE_END"; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PHASE_NONE: 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "PHASE_NONE"; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetLog::IsLoggingBytes(LogLevel log_level) { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return log_level == NetLog::LOG_ALL; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetLog::IsLoggingAllEvents(LogLevel log_level) { 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return log_level <= NetLog::LOG_ALL_BUT_BYTES; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::ParametersCallback NetLog::IntegerCallback(const char* name, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int value) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Bind(&NetLogIntegerCallback, name, value); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::ParametersCallback NetLog::Int64Callback(const char* name, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 value) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Bind(&NetLogInt64Callback, name, value); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::ParametersCallback NetLog::StringCallback(const char* name, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string* value) { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(value); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Bind(&NetLogStringCallback, name, value); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::ParametersCallback NetLog::StringCallback(const char* name, 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16* value) { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(value); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Bind(&NetLogString16Callback, name, value); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetLog::AddEntry(EventType type, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Source& source, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventPhase phase, 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetLog::ParametersCallback* parameters_callback) { 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LogLevel log_level = GetLogLevel(); 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (log_level == LOG_NONE) 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Entry entry(type, source, phase, base::TimeTicks::Now(), 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parameters_callback, log_level); 391868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify all of the log observers. 393868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::AutoLock lock(lock_); 394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntry(entry)); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::AddEntry(NetLog::EventType type, 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetLog::EventPhase phase) const { 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!net_log_) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net_log_->AddEntry(type, source_, phase, NULL); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::AddEntry( 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetLog::EventType type, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetLog::EventPhase phase, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetLog::ParametersCallback& get_parameters) const { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!net_log_) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net_log_->AddEntry(type, source_, phase, &get_parameters); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::AddEvent(NetLog::EventType type) const { 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEntry(type, NetLog::PHASE_NONE); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::AddEvent( 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetLog::EventType type, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetLog::ParametersCallback& get_parameters) const { 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEntry(type, NetLog::PHASE_NONE, get_parameters); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::BeginEvent(NetLog::EventType type) const { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEntry(type, NetLog::PHASE_BEGIN); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::BeginEvent( 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetLog::EventType type, 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetLog::ParametersCallback& get_parameters) const { 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEntry(type, NetLog::PHASE_BEGIN, get_parameters); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::EndEvent(NetLog::EventType type) const { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEntry(type, NetLog::PHASE_END); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::EndEvent( 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetLog::EventType type, 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetLog::ParametersCallback& get_parameters) const { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEntry(type, NetLog::PHASE_END, get_parameters); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::AddEventWithNetErrorCode(NetLog::EventType event_type, 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int net_error) const { 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(ERR_IO_PENDING, net_error); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (net_error >= 0) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEvent(event_type); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEvent(event_type, NetLog::IntegerCallback("net_error", net_error)); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::EndEventWithNetErrorCode(NetLog::EventType event_type, 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int net_error) const { 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(ERR_IO_PENDING, net_error); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (net_error >= 0) { 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EndEvent(event_type); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EndEvent(event_type, NetLog::IntegerCallback("net_error", net_error)); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BoundNetLog::AddByteTransferEvent(NetLog::EventType event_type, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int byte_count, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* bytes) const { 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEvent(event_type, base::Bind(BytesTransferredCallback, byte_count, bytes)); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetLog::LogLevel BoundNetLog::GetLogLevel() const { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (net_log_) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return net_log_->GetLogLevel(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NetLog::LOG_BASIC; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BoundNetLog::IsLoggingBytes() const { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NetLog::IsLoggingBytes(GetLogLevel()); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BoundNetLog::IsLoggingAllEvents() const { 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NetLog::IsLoggingAllEvents(GetLogLevel()); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BoundNetLog BoundNetLog::Make(NetLog* net_log, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetLog::SourceType source_type) { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!net_log) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BoundNetLog(); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetLog::Source source(source_type, net_log->NextID()); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BoundNetLog(source, net_log); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 494