| Index: chrome/browser/dom_ui/net_internals_ui.cc
|
| ===================================================================
|
| --- chrome/browser/dom_ui/net_internals_ui.cc (revision 44225)
|
| +++ chrome/browser/dom_ui/net_internals_ui.cc (working copy)
|
| @@ -18,6 +18,7 @@
|
| #include "chrome/browser/dom_ui/chrome_url_data_manager.h"
|
| #include "chrome/browser/io_thread.h"
|
| #include "chrome/browser/net/chrome_net_log.h"
|
| +#include "chrome/browser/net/passive_log_collector.h"
|
| #include "chrome/browser/net/url_request_context_getter.h"
|
| #include "chrome/browser/profile.h"
|
| #include "chrome/common/chrome_paths.h"
|
| @@ -49,9 +50,35 @@
|
| return host_resolver_impl->cache();
|
| }
|
|
|
| -// TODO(eroman): Bootstrap the net-internals page using the passively logged
|
| -// data.
|
| +// 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* extra_parameters) {
|
| + DictionaryValue* entry_dict = new DictionaryValue();
|
|
|
| + // Set the entry time. (Note that we send it as a string since integers
|
| + // might overflow).
|
| + entry_dict->SetString(L"time", TickCountToString(time));
|
| +
|
| + // Set the entry source.
|
| + DictionaryValue* source_dict = new DictionaryValue();
|
| + source_dict->SetInteger(L"id", source.id);
|
| + source_dict->SetInteger(L"type", static_cast<int>(source.type));
|
| + entry_dict->Set(L"source", source_dict);
|
| +
|
| + // Set the event info.
|
| + entry_dict->SetInteger(L"type", static_cast<int>(type));
|
| + entry_dict->SetInteger(L"phase", static_cast<int>(phase));
|
| +
|
| + // Set the event-specific parameters.
|
| + if (extra_parameters)
|
| + entry_dict->SetString(L"extra_parameters", extra_parameters->ToString());
|
| +
|
| + return entry_dict;
|
| +}
|
| +
|
| class NetInternalsHTMLSource : public ChromeURLDataManager::DataSource {
|
| public:
|
| NetInternalsHTMLSource();
|
| @@ -150,6 +177,7 @@
|
| void OnClearBadProxies(const Value* value);
|
| void OnGetHostResolverCache(const Value* value);
|
| void OnClearHostResolverCache(const Value* value);
|
| + void OnGetPassiveLogEntries(const Value* value);
|
|
|
| // ChromeNetLog::Observer implementation:
|
| virtual void OnAddEntry(net::NetLog::EventType type,
|
| @@ -291,20 +319,30 @@
|
| void NetInternalsMessageHandler::RegisterMessages() {
|
| DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
|
|
|
| - dom_ui_->RegisterMessageCallback("notifyReady",
|
| + dom_ui_->RegisterMessageCallback(
|
| + "notifyReady",
|
| proxy_->CreateCallback(&IOThreadImpl::OnRendererReady));
|
| - dom_ui_->RegisterMessageCallback("getProxySettings",
|
| + dom_ui_->RegisterMessageCallback(
|
| + "getProxySettings",
|
| proxy_->CreateCallback(&IOThreadImpl::OnGetProxySettings));
|
| - dom_ui_->RegisterMessageCallback("reloadProxySettings",
|
| + dom_ui_->RegisterMessageCallback(
|
| + "reloadProxySettings",
|
| proxy_->CreateCallback(&IOThreadImpl::OnReloadProxySettings));
|
| - dom_ui_->RegisterMessageCallback("getBadProxies",
|
| + dom_ui_->RegisterMessageCallback(
|
| + "getBadProxies",
|
| proxy_->CreateCallback(&IOThreadImpl::OnGetBadProxies));
|
| - dom_ui_->RegisterMessageCallback("clearBadProxies",
|
| + dom_ui_->RegisterMessageCallback(
|
| + "clearBadProxies",
|
| proxy_->CreateCallback(&IOThreadImpl::OnClearBadProxies));
|
| - dom_ui_->RegisterMessageCallback("getHostResolverCache",
|
| + dom_ui_->RegisterMessageCallback(
|
| + "getHostResolverCache",
|
| proxy_->CreateCallback(&IOThreadImpl::OnGetHostResolverCache));
|
| - dom_ui_->RegisterMessageCallback("clearHostResolverCache",
|
| + dom_ui_->RegisterMessageCallback(
|
| + "clearHostResolverCache",
|
| proxy_->CreateCallback(&IOThreadImpl::OnClearHostResolverCache));
|
| + dom_ui_->RegisterMessageCallback(
|
| + "getPassiveLogEntries",
|
| + proxy_->CreateCallback(&IOThreadImpl::OnGetPassiveLogEntries));
|
| }
|
|
|
| void NetInternalsMessageHandler::CallJavascriptFunction(
|
| @@ -428,7 +466,7 @@
|
| Int64ToString(tick_to_unix_time_ms)));
|
| }
|
|
|
| - // Notify the client of the basic proxy data.
|
| + OnGetPassiveLogEntries(NULL);
|
| OnGetProxySettings(NULL);
|
| OnGetBadProxies(NULL);
|
| OnGetHostResolverCache(NULL);
|
| @@ -567,6 +605,26 @@
|
| OnGetHostResolverCache(NULL);
|
| }
|
|
|
| +void NetInternalsMessageHandler::IOThreadImpl::OnGetPassiveLogEntries(
|
| + const Value* value) {
|
| + ChromeNetLog* net_log = io_thread_->globals()->net_log.get();
|
| +
|
| + PassiveLogCollector::EntryList passive_entries;
|
| + net_log->passive_collector()->GetAllCapturedEvents(&passive_entries);
|
| +
|
| + 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.extra_parameters));
|
| + }
|
| +
|
| + CallJavascriptFunction(L"g_browser.receivedPassiveLogEntries", list);
|
| +}
|
| +
|
| void NetInternalsMessageHandler::IOThreadImpl::OnAddEntry(
|
| net::NetLog::EventType type,
|
| const base::TimeTicks& time,
|
| @@ -575,29 +633,9 @@
|
| net::NetLog::EventParameters* extra_parameters) {
|
| DCHECK(is_observing_log_);
|
|
|
| - // JSONify the NetLog::Entry.
|
| - // TODO(eroman): Need a better format for this.
|
| - DictionaryValue* entry_dict = new DictionaryValue();
|
| -
|
| - // Set the entry time. (Note that we send it as a string since integers
|
| - // might overflow).
|
| - entry_dict->SetString(L"time", TickCountToString(time));
|
| -
|
| - // Set the entry source.
|
| - DictionaryValue* source_dict = new DictionaryValue();
|
| - source_dict->SetInteger(L"id", source.id);
|
| - source_dict->SetInteger(L"type", static_cast<int>(source.type));
|
| - entry_dict->Set(L"source", source_dict);
|
| -
|
| - // Set the event info.
|
| - entry_dict->SetInteger(L"type", static_cast<int>(type));
|
| - entry_dict->SetInteger(L"phase", static_cast<int>(phase));
|
| -
|
| - // Set the event-specific parameters.
|
| - if (extra_parameters)
|
| - entry_dict->SetString(L"extra_parameters", extra_parameters->ToString());
|
| -
|
| - CallJavascriptFunction(L"g_browser.receivedLogEntry", entry_dict);
|
| + CallJavascriptFunction(
|
| + L"g_browser.receivedLogEntry",
|
| + EntryToDictionaryValue(type, time, source, phase, extra_parameters));
|
| }
|
|
|
| void NetInternalsMessageHandler::IOThreadImpl::DispatchToMessageHandler(
|
| @@ -620,7 +658,6 @@
|
| return;
|
| }
|
|
|
| -
|
| // Otherwise if we were called from the IO thread, bridge the request over to
|
| // the UI thread.
|
|
|
|
|