summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-13 13:55:10 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-13 13:55:10 +0000
commit9319035b01befc8d59c9c1c7f9d83fbe15b0ba79 (patch)
tree4f871697a10d9e6b46630571edb298982b550d42 /chrome
parent0e6fd884e68670a70a857d092b79fb7e71bf3856 (diff)
downloadchromium_src-9319035b01befc8d59c9c1c7f9d83fbe15b0ba79.zip
chromium_src-9319035b01befc8d59c9c1c7f9d83fbe15b0ba79.tar.gz
chromium_src-9319035b01befc8d59c9c1c7f9d83fbe15b0ba79.tar.bz2
Redirects NetLog output to the log file, when the command line
option "--log-net-log" is used. BUG= 50987 TEST= Run "chrome --log-net-log --enable-logging --log-level=0" And then check to make sure the log contains the NetLog events. Review URL: http://codereview.chromium.org/3040051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56021 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/dom_ui/net_internals_ui.cc43
-rw-r--r--chrome/browser/net/chrome_net_log.cc12
-rw-r--r--chrome/browser/net/chrome_net_log.h2
-rw-r--r--chrome/browser/net/net_log_logger.cc25
-rw-r--r--chrome/browser/net/net_log_logger.h31
-rw-r--r--chrome/chrome_browser.gypi2
-rw-r--r--chrome/common/chrome_switches.cc3
-rw-r--r--chrome/common/chrome_switches.h1
8 files changed, 84 insertions, 35 deletions
diff --git a/chrome/browser/dom_ui/net_internals_ui.cc b/chrome/browser/dom_ui/net_internals_ui.cc
index d64e68c..a3cfed4 100644
--- a/chrome/browser/dom_ui/net_internals_ui.cc
+++ b/chrome/browser/dom_ui/net_internals_ui.cc
@@ -78,35 +78,6 @@ disk_cache::Backend* GetDiskCacheBackend(URLRequestContext* context) {
return http_cache->GetCurrentBackend();
}
-// Serializes the specified event to a DictionaryValue.
-Value* EntryToDictionaryValue(net::NetLog::EventType type,
- const base::TimeTicks& time,
- const net::NetLog::Source& source,
- net::NetLog::EventPhase phase,
- net::NetLog::EventParameters* params) {
- DictionaryValue* entry_dict = new DictionaryValue();
-
- // Set the entry time. (Note that we send it as a string since integers
- // might overflow).
- entry_dict->SetString("time", TickCountToString(time));
-
- // Set the entry source.
- DictionaryValue* source_dict = new DictionaryValue();
- source_dict->SetInteger("id", source.id);
- source_dict->SetInteger("type", static_cast<int>(source.type));
- entry_dict->Set("source", source_dict);
-
- // Set the event info.
- entry_dict->SetInteger("type", static_cast<int>(type));
- entry_dict->SetInteger("phase", static_cast<int>(phase));
-
- // Set the event-specific parameters.
- if (params)
- entry_dict->Set("params", params->ToValue());
-
- return entry_dict;
-}
-
Value* ExperimentToValue(const ConnectionTester::Experiment& experiment) {
DictionaryValue* dict = new DictionaryValue();
@@ -734,11 +705,12 @@ void NetInternalsMessageHandler::IOThreadImpl::OnGetPassiveLogEntries(
ListValue* list = new ListValue();
for (size_t i = 0; i < passive_entries.size(); ++i) {
const PassiveLogCollector::Entry& e = passive_entries[i];
- list->Append(EntryToDictionaryValue(e.type,
- e.time,
- e.source,
- e.phase,
- e.params));
+ list->Append(net::NetLog::EntryToDictionaryValue(e.type,
+ e.time,
+ e.source,
+ e.phase,
+ e.params,
+ false));
}
CallJavascriptFunction(L"g_browser.receivedPassiveLogEntries", list);
@@ -794,7 +766,8 @@ void NetInternalsMessageHandler::IOThreadImpl::OnAddEntry(
CallJavascriptFunction(
L"g_browser.receivedLogEntry",
- EntryToDictionaryValue(type, time, source, phase, params));
+ net::NetLog::EntryToDictionaryValue(type, time, source, phase, params,
+ false));
}
void NetInternalsMessageHandler::IOThreadImpl::OnStartConnectionTestSuite() {
diff --git a/chrome/browser/net/chrome_net_log.cc b/chrome/browser/net/chrome_net_log.cc
index a696552..de2466e 100644
--- a/chrome/browser/net/chrome_net_log.cc
+++ b/chrome/browser/net/chrome_net_log.cc
@@ -6,11 +6,14 @@
#include <algorithm>
+#include "base/command_line.h"
#include "base/logging.h"
#include "base/string_util.h"
#include "chrome/browser/chrome_thread.h"
#include "chrome/browser/net/load_timing_observer.h"
+#include "chrome/browser/net/net_log_logger.h"
#include "chrome/browser/net/passive_log_collector.h"
+#include "chrome/common/chrome_switches.h"
ChromeNetLog::ChromeNetLog()
: next_id_(1),
@@ -19,12 +22,21 @@ ChromeNetLog::ChromeNetLog()
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
AddObserver(passive_collector_.get());
AddObserver(load_timing_observer_.get());
+
+ const CommandLine& command_line = *CommandLine::ForCurrentProcess();
+ if (command_line.HasSwitch(switches::kLogNetLog)) {
+ net_log_logger_.reset(new NetLogLogger());
+ AddObserver(net_log_logger_.get());
+ }
}
ChromeNetLog::~ChromeNetLog() {
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
RemoveObserver(passive_collector_.get());
RemoveObserver(load_timing_observer_.get());
+ if (net_log_logger_.get()) {
+ RemoveObserver(net_log_logger_.get());
+ }
}
void ChromeNetLog::AddEntry(EventType type,
diff --git a/chrome/browser/net/chrome_net_log.h b/chrome/browser/net/chrome_net_log.h
index 3992671..bee4c62 100644
--- a/chrome/browser/net/chrome_net_log.h
+++ b/chrome/browser/net/chrome_net_log.h
@@ -11,6 +11,7 @@
#include "net/base/net_log.h"
class LoadTimingObserver;
+class NetLogLogger;
class PassiveLogCollector;
// ChromeNetLog is an implementation of NetLog that dispatches network log
@@ -62,6 +63,7 @@ class ChromeNetLog : public net::NetLog {
uint32 next_id_;
scoped_ptr<PassiveLogCollector> passive_collector_;
scoped_ptr<LoadTimingObserver> load_timing_observer_;
+ scoped_ptr<NetLogLogger> net_log_logger_;
ObserverList<Observer, true> observers_;
DISALLOW_COPY_AND_ASSIGN(ChromeNetLog);
diff --git a/chrome/browser/net/net_log_logger.cc b/chrome/browser/net/net_log_logger.cc
new file mode 100644
index 0000000..14bac0b
--- /dev/null
+++ b/chrome/browser/net/net_log_logger.cc
@@ -0,0 +1,25 @@
+// Copyright (c) 2010 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 "chrome/browser/net/net_log_logger.h"
+
+#include "base/json/json_writer.h"
+
+NetLogLogger::NetLogLogger() {}
+
+NetLogLogger::~NetLogLogger() {}
+
+void NetLogLogger::OnAddEntry(net::NetLog::EventType type,
+ const base::TimeTicks& time,
+ const net::NetLog::Source& source,
+ net::NetLog::EventPhase phase,
+ net::NetLog::EventParameters* params) {
+ scoped_ptr<Value> value(net::NetLog::EntryToDictionaryValue(type, time,
+ source, phase,
+ params, true));
+ std::string json;
+ base::JSONWriter::Write(value.get(), true, &json);
+ LOG(INFO) << json;
+}
+
diff --git a/chrome/browser/net/net_log_logger.h b/chrome/browser/net/net_log_logger.h
new file mode 100644
index 0000000..98c989e
--- /dev/null
+++ b/chrome/browser/net/net_log_logger.h
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 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.
+
+#ifndef CHROME_BROWSER_NET_NET_LOG_LOGGER_H_
+#define CHROME_BROWSER_NET_NET_LOG_LOGGER_H_
+#pragma once
+
+#include "chrome/browser/net/chrome_net_log.h"
+
+// NetLogLogger watches the NetLog event stream, and sends all entries to
+// LOG(INFO). This is to debug errors that prevent getting to the
+// about:net-internals page.
+class NetLogLogger : public ChromeNetLog::Observer {
+ public:
+ NetLogLogger();
+ ~NetLogLogger();
+
+ // Observer implementation:
+ virtual void OnAddEntry(net::NetLog::EventType type,
+ const base::TimeTicks& time,
+ const net::NetLog::Source& source,
+ net::NetLog::EventPhase phase,
+ net::NetLog::EventParameters* params);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(NetLogLogger);
+};
+
+#endif // CHROME_BROWSER_NET_NET_LOG_LOGGER_H_
+
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index be196aa..acaa5db 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1969,6 +1969,8 @@
'browser/net/load_timing_observer.h',
'browser/net/metadata_url_request.cc',
'browser/net/metadata_url_request.h',
+ 'browser/net/net_log_logger.cc',
+ 'browser/net/net_log_logger.h',
'browser/net/passive_log_collector.cc',
'browser/net/passive_log_collector.h',
'browser/net/preconnect.cc',
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 16a6800..5a6b770 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -288,6 +288,9 @@ const char kDomAutomationController[] = "dom-automation";
// scripts.
const char kDumpHistogramsOnExit[] = "dump-histograms-on-exit";
+// Enable displaying net log events on the command line.
+extern const char kLogNetLog[] = "log-net-log";
+
// Enable gpu-accelerated compositing.
const char kEnableAcceleratedCompositing[] = "enable-accelerated-compositing";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 0078657..8fa9a2d 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -188,6 +188,7 @@ extern const char kLoadExtension[];
extern const char kLoadPlugin[];
extern const char kExtraPluginDir[];
extern const char kLogFilterPrefix[];
+extern const char kLogNetLog[];
extern const char kLogPluginMessages[];
extern const char kLoggingLevel[];
extern const char kMakeDefaultBrowser[];