| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/base/capturing_net_log.h" | 5 #include "net/base/capturing_net_log.h" |
| 6 | 6 |
| 7 #include "base/json/json_writer.h" | |
| 8 #include "base/logging.h" | |
| 9 #include "base/values.h" | |
| 10 | |
| 11 namespace net { | 7 namespace net { |
| 12 | 8 |
| 13 CapturingNetLog::CapturedEntry::CapturedEntry( | |
| 14 EventType type, | |
| 15 const base::TimeTicks& time, | |
| 16 Source source, | |
| 17 EventPhase phase, | |
| 18 scoped_ptr<base::DictionaryValue> params) | |
| 19 : type(type), | |
| 20 time(time), | |
| 21 source(source), | |
| 22 phase(phase), | |
| 23 params(params.Pass()) { | |
| 24 } | |
| 25 | |
| 26 CapturingNetLog::CapturedEntry::CapturedEntry(const CapturedEntry& entry) { | |
| 27 *this = entry; | |
| 28 } | |
| 29 | |
| 30 CapturingNetLog::CapturedEntry::~CapturedEntry() {} | |
| 31 | |
| 32 CapturingNetLog::CapturedEntry& | |
| 33 CapturingNetLog::CapturedEntry::operator=(const CapturedEntry& entry) { | |
| 34 type = entry.type; | |
| 35 time = entry.time; | |
| 36 source = entry.source; | |
| 37 phase = entry.phase; | |
| 38 params.reset(entry.params ? entry.params->DeepCopy() : NULL); | |
| 39 return *this; | |
| 40 } | |
| 41 | |
| 42 bool CapturingNetLog::CapturedEntry::GetStringValue( | |
| 43 const std::string& name, | |
| 44 std::string* value) const { | |
| 45 if (!params) | |
| 46 return false; | |
| 47 return params->GetString(name, value); | |
| 48 } | |
| 49 | |
| 50 bool CapturingNetLog::CapturedEntry::GetIntegerValue( | |
| 51 const std::string& name, | |
| 52 int* value) const { | |
| 53 if (!params) | |
| 54 return false; | |
| 55 return params->GetInteger(name, value); | |
| 56 } | |
| 57 | |
| 58 bool CapturingNetLog::CapturedEntry::GetListValue( | |
| 59 const std::string& name, | |
| 60 base::ListValue** value) const { | |
| 61 if (!params) | |
| 62 return false; | |
| 63 return params->GetList(name, value); | |
| 64 } | |
| 65 | |
| 66 bool CapturingNetLog::CapturedEntry::GetNetErrorCode(int* value) const { | |
| 67 return GetIntegerValue("net_error", value); | |
| 68 } | |
| 69 | |
| 70 std::string CapturingNetLog::CapturedEntry::GetParamsJson() const { | |
| 71 if (!params) | |
| 72 return std::string(); | |
| 73 std::string json; | |
| 74 base::JSONWriter::Write(params.get(), &json); | |
| 75 return json; | |
| 76 } | |
| 77 | |
| 78 CapturingNetLog::Observer::Observer() {} | |
| 79 | |
| 80 CapturingNetLog::Observer::~Observer() {} | |
| 81 | |
| 82 void CapturingNetLog::Observer::GetEntries( | |
| 83 CapturedEntryList* entry_list) const { | |
| 84 base::AutoLock lock(lock_); | |
| 85 *entry_list = captured_entries_; | |
| 86 } | |
| 87 | |
| 88 void CapturingNetLog::Observer::GetEntriesForSource( | |
| 89 NetLog::Source source, | |
| 90 CapturedEntryList* entry_list) const { | |
| 91 base::AutoLock lock(lock_); | |
| 92 entry_list->clear(); | |
| 93 for (CapturedEntryList::const_iterator entry = captured_entries_.begin(); | |
| 94 entry != captured_entries_.end(); ++entry) { | |
| 95 if (entry->source.id == source.id) | |
| 96 entry_list->push_back(*entry); | |
| 97 } | |
| 98 } | |
| 99 | |
| 100 size_t CapturingNetLog::Observer::GetSize() const { | |
| 101 base::AutoLock lock(lock_); | |
| 102 return captured_entries_.size(); | |
| 103 } | |
| 104 | |
| 105 void CapturingNetLog::Observer::Clear() { | |
| 106 base::AutoLock lock(lock_); | |
| 107 captured_entries_.clear(); | |
| 108 } | |
| 109 | |
| 110 void CapturingNetLog::Observer::OnAddEntry(const net::NetLog::Entry& entry) { | |
| 111 // Only BoundNetLogs without a NetLog should have an invalid source. | |
| 112 CHECK(entry.source().IsValid()); | |
| 113 | |
| 114 // Using Dictionaries instead of Values makes checking values a little | |
| 115 // simpler. | |
| 116 base::DictionaryValue* param_dict = NULL; | |
| 117 base::Value* param_value = entry.ParametersToValue(); | |
| 118 if (param_value && !param_value->GetAsDictionary(¶m_dict)) | |
| 119 delete param_value; | |
| 120 | |
| 121 // Only need to acquire the lock when accessing class variables. | |
| 122 base::AutoLock lock(lock_); | |
| 123 captured_entries_.push_back( | |
| 124 CapturedEntry(entry.type(), | |
| 125 base::TimeTicks::Now(), | |
| 126 entry.source(), | |
| 127 entry.phase(), | |
| 128 scoped_ptr<base::DictionaryValue>(param_dict))); | |
| 129 } | |
| 130 | |
| 131 CapturingNetLog::CapturingNetLog() { | 9 CapturingNetLog::CapturingNetLog() { |
| 132 AddThreadSafeObserver(&capturing_net_log_observer_, LOG_ALL_BUT_BYTES); | 10 AddThreadSafeObserver(&capturing_net_log_observer_, LOG_ALL_BUT_BYTES); |
| 133 } | 11 } |
| 134 | 12 |
| 135 CapturingNetLog::~CapturingNetLog() { | 13 CapturingNetLog::~CapturingNetLog() { |
| 136 RemoveThreadSafeObserver(&capturing_net_log_observer_); | 14 RemoveThreadSafeObserver(&capturing_net_log_observer_); |
| 137 } | 15 } |
| 138 | 16 |
| 139 void CapturingNetLog::SetLogLevel(NetLog::LogLevel log_level) { | 17 void CapturingNetLog::SetLogLevel(NetLog::LogLevel log_level) { |
| 140 SetObserverLogLevel(&capturing_net_log_observer_, log_level); | 18 SetObserverLogLevel(&capturing_net_log_observer_, log_level); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 | 61 |
| 184 void CapturingBoundNetLog::Clear() { | 62 void CapturingBoundNetLog::Clear() { |
| 185 capturing_net_log_.Clear(); | 63 capturing_net_log_.Clear(); |
| 186 } | 64 } |
| 187 | 65 |
| 188 void CapturingBoundNetLog::SetLogLevel(NetLog::LogLevel log_level) { | 66 void CapturingBoundNetLog::SetLogLevel(NetLog::LogLevel log_level) { |
| 189 capturing_net_log_.SetLogLevel(log_level); | 67 capturing_net_log_.SetLogLevel(log_level); |
| 190 } | 68 } |
| 191 | 69 |
| 192 } // namespace net | 70 } // namespace net |
| OLD | NEW |