diff options
Diffstat (limited to 'chrome/browser/debugger/devtools_netlog_observer.cc')
-rw-r--r-- | chrome/browser/debugger/devtools_netlog_observer.cc | 294 |
1 files changed, 0 insertions, 294 deletions
diff --git a/chrome/browser/debugger/devtools_netlog_observer.cc b/chrome/browser/debugger/devtools_netlog_observer.cc deleted file mode 100644 index e70b044..0000000 --- a/chrome/browser/debugger/devtools_netlog_observer.cc +++ /dev/null @@ -1,294 +0,0 @@ -// Copyright (c) 2011 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/debugger/devtools_netlog_observer.h" - -#include "base/string_tokenizer.h" -#include "base/string_util.h" -#include "base/values.h" -#include "chrome/browser/io_thread.h" -#include "content/common/resource_response.h" -#include "net/base/load_flags.h" -#include "net/http/http_net_log_params.h" -#include "net/http/http_response_headers.h" -#include "net/http/http_util.h" -#include "net/url_request/url_request.h" -#include "net/url_request/url_request_netlog_params.h" -#include "webkit/glue/resource_loader_bridge.h" - -const size_t kMaxNumEntries = 1000; - -DevToolsNetLogObserver* DevToolsNetLogObserver::instance_ = NULL; - -DevToolsNetLogObserver::DevToolsNetLogObserver(ChromeNetLog* chrome_net_log) - : ChromeNetLog::ThreadSafeObserver(net::NetLog::LOG_ALL_BUT_BYTES), - chrome_net_log_(chrome_net_log) { - chrome_net_log_->AddObserver(this); -} - -DevToolsNetLogObserver::~DevToolsNetLogObserver() { - chrome_net_log_->RemoveObserver(this); -} - -DevToolsNetLogObserver::ResourceInfo* -DevToolsNetLogObserver::GetResourceInfo(uint32 id) { - RequestToInfoMap::iterator it = request_to_info_.find(id); - if (it != request_to_info_.end()) - return it->second; - return NULL; -} - -void DevToolsNetLogObserver::OnAddEntry(net::NetLog::EventType type, - const base::TimeTicks& time, - const net::NetLog::Source& source, - net::NetLog::EventPhase phase, - net::NetLog::EventParameters* params) { - // The events that the Observer is interested in only occur on the IO thread. - if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) - return; - - // The events that the Observer is interested in only occur on the IO thread. - if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) - return; - if (source.type == net::NetLog::SOURCE_URL_REQUEST) - OnAddURLRequestEntry(type, time, source, phase, params); - else if (source.type == net::NetLog::SOURCE_HTTP_STREAM_JOB) - OnAddHTTPStreamJobEntry(type, time, source, phase, params); - else if (source.type == net::NetLog::SOURCE_SOCKET) - OnAddSocketEntry(type, time, source, phase, params); -} - -void DevToolsNetLogObserver::OnAddURLRequestEntry( - net::NetLog::EventType type, - const base::TimeTicks& time, - const net::NetLog::Source& source, - net::NetLog::EventPhase phase, - net::NetLog::EventParameters* params) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - - bool is_begin = phase == net::NetLog::PHASE_BEGIN; - bool is_end = phase == net::NetLog::PHASE_END; - - if (type == net::NetLog::TYPE_URL_REQUEST_START_JOB) { - if (is_begin) { - int load_flags = static_cast< - net::URLRequestStartEventParameters*>(params)->load_flags(); - if (!(load_flags & net::LOAD_REPORT_RAW_HEADERS)) - return; - - if (request_to_info_.size() > kMaxNumEntries) { - LOG(WARNING) << "The raw headers observer url request count has grown " - "larger than expected, resetting"; - request_to_info_.clear(); - } - - request_to_info_[source.id] = new ResourceInfo(); - - if (request_to_encoded_data_length_.size() > kMaxNumEntries) { - LOG(WARNING) << "The encoded data length observer url request count " - "has grown larger than expected, resetting"; - request_to_encoded_data_length_.clear(); - } - - request_to_encoded_data_length_[source.id] = 0; - } - return; - } else if (type == net::NetLog::TYPE_REQUEST_ALIVE) { - // Cleanup records based on the TYPE_REQUEST_ALIVE entry. - if (is_end) { - request_to_info_.erase(source.id); - request_to_encoded_data_length_.erase(source.id); - } - return; - } - - ResourceInfo* info = GetResourceInfo(source.id); - if (!info) - return; - - switch (type) { - case net::NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS: { - net::NetLogHttpRequestParameter* request_parameter = - static_cast<net::NetLogHttpRequestParameter*>(params); - const net::HttpRequestHeaders &request_headers = - request_parameter->GetHeaders(); - - // We need to clear headers in case the same url_request is reused for - // several http requests (e.g. see http://crbug.com/80157). - info->request_headers.clear(); - - for (net::HttpRequestHeaders::Iterator it(request_headers); - it.GetNext();) { - info->request_headers.push_back(std::make_pair(it.name(), - it.value())); - } - info->request_headers_text = - request_parameter->GetLine() + - request_parameter->GetHeaders().ToString(); - break; - } - case net::NetLog::TYPE_HTTP_TRANSACTION_READ_RESPONSE_HEADERS: { - const net::HttpResponseHeaders& response_headers = - static_cast<net::NetLogHttpResponseParameter*>(params)->GetHeaders(); - info->http_status_code = response_headers.response_code(); - info->http_status_text = response_headers.GetStatusText(); - std::string name, value; - - // We need to clear headers in case the same url_request is reused for - // several http requests (e.g. see http://crbug.com/80157). - info->response_headers.clear(); - - for (void* it = NULL; - response_headers.EnumerateHeaderLines(&it, &name, &value); ) { - info->response_headers.push_back(std::make_pair(name, value)); - } - info->response_headers_text = - net::HttpUtil::ConvertHeadersBackToHTTPResponse( - response_headers.raw_headers()); - break; - } - case net::NetLog::TYPE_HTTP_STREAM_REQUEST_BOUND_TO_JOB: { - uint32 http_stream_job_id = static_cast<net::NetLogSourceParameter*>( - params)->value().id; - HTTPStreamJobToSocketMap::iterator it = - http_stream_job_to_socket_.find(http_stream_job_id); - if (it == http_stream_job_to_socket_.end()) - return; - uint32 socket_id = it->second; - - if (socket_to_request_.size() > kMaxNumEntries) { - LOG(WARNING) << "The url request observer socket count has grown " - "larger than expected, resetting"; - socket_to_request_.clear(); - } - - socket_to_request_[socket_id] = source.id; - http_stream_job_to_socket_.erase(http_stream_job_id); - break; - } - default: - break; - } -} - -void DevToolsNetLogObserver::OnAddHTTPStreamJobEntry( - net::NetLog::EventType type, - const base::TimeTicks& time, - const net::NetLog::Source& source, - net::NetLog::EventPhase phase, - net::NetLog::EventParameters* params) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - - if (type == net::NetLog::TYPE_SOCKET_POOL_BOUND_TO_SOCKET) { - uint32 socket_id = static_cast<net::NetLogSourceParameter*>( - params)->value().id; - - // Prevents us from passively growing the memory unbounded in - // case something went wrong. Should not happen. - if (http_stream_job_to_socket_.size() > kMaxNumEntries) { - LOG(WARNING) << "The load timing observer http stream job count " - "has grown larger than expected, resetting"; - http_stream_job_to_socket_.clear(); - } - http_stream_job_to_socket_[source.id] = socket_id; - } -} - -void DevToolsNetLogObserver::OnAddSocketEntry( - net::NetLog::EventType type, - const base::TimeTicks& time, - const net::NetLog::Source& source, - net::NetLog::EventPhase phase, - net::NetLog::EventParameters* params) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - - bool is_end = phase == net::NetLog::PHASE_END; - - SocketToRequestMap::iterator it = socket_to_request_.find(source.id); - if (it == socket_to_request_.end()) - return; - uint32 request_id = it->second; - - if (type == net::NetLog::TYPE_SOCKET_IN_USE) { - if (is_end) - socket_to_request_.erase(source.id); - return; - } - - RequestToEncodedDataLengthMap::iterator encoded_data_length_it = - request_to_encoded_data_length_.find(request_id); - if (encoded_data_length_it == request_to_encoded_data_length_.end()) - return; - - if (net::NetLog::TYPE_SOCKET_BYTES_RECEIVED == type) { - int byte_count = 0; - scoped_ptr<Value> value(params->ToValue()); - if (!value->IsType(Value::TYPE_DICTIONARY)) - return; - - DictionaryValue* dValue = static_cast<DictionaryValue*>(value.get()); - if (!dValue->GetInteger("byte_count", &byte_count)) - return; - - encoded_data_length_it->second += byte_count; - } -} - -void DevToolsNetLogObserver::Attach(IOThread* io_thread) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - DCHECK(!instance_); - - instance_ = new DevToolsNetLogObserver(io_thread->net_log()); -} - -void DevToolsNetLogObserver::Detach() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - DCHECK(instance_); - - delete instance_; - instance_ = NULL; -} - -DevToolsNetLogObserver* DevToolsNetLogObserver::GetInstance() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - - return instance_; -} - -// static -void DevToolsNetLogObserver::PopulateResponseInfo(net::URLRequest* request, - ResourceResponse* response) { - if (!(request->load_flags() & net::LOAD_REPORT_RAW_HEADERS)) - return; - - uint32 source_id = request->net_log().source().id; - DevToolsNetLogObserver* dev_tools_net_log_observer = - DevToolsNetLogObserver::GetInstance(); - if (dev_tools_net_log_observer == NULL) - return; - response->response_head.devtools_info = - dev_tools_net_log_observer->GetResourceInfo(source_id); -} - -// static -int DevToolsNetLogObserver::GetAndResetEncodedDataLength( - net::URLRequest* request) { - if (!(request->load_flags() & net::LOAD_REPORT_RAW_HEADERS)) - return -1; - - uint32 source_id = request->net_log().source().id; - DevToolsNetLogObserver* dev_tools_net_log_observer = - DevToolsNetLogObserver::GetInstance(); - if (dev_tools_net_log_observer == NULL) - return -1; - - RequestToEncodedDataLengthMap::iterator it = - dev_tools_net_log_observer->request_to_encoded_data_length_.find( - source_id); - if (it == dev_tools_net_log_observer->request_to_encoded_data_length_.end()) - return -1; - int encoded_data_length = it->second; - it->second = 0; - return encoded_data_length; -} |