diff options
author | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-12 04:15:21 +0000 |
---|---|---|
committer | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-12 04:15:21 +0000 |
commit | 6983889c43251e2c3193d623a39398f3ab2b69d3 (patch) | |
tree | 3a905728b246b2d694713eb1cac5c6525ac00885 /net/websockets | |
parent | fb96c8e94109f7c7b975dec14954da4a639e6793 (diff) | |
download | chromium_src-6983889c43251e2c3193d623a39398f3ab2b69d3.zip chromium_src-6983889c43251e2c3193d623a39398f3ab2b69d3.tar.gz chromium_src-6983889c43251e2c3193d623a39398f3ab2b69d3.tar.bz2 |
Add WebSocket handshake message in net_log
BUG=none
TEST=websocket handshake message shown in chrome://net-internals/#requests
Review URL: http://codereview.chromium.org/3076043
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55845 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/websockets')
-rw-r--r-- | net/websockets/websocket_handshake_handler.cc | 6 | ||||
-rw-r--r-- | net/websockets/websocket_handshake_handler.h | 3 | ||||
-rw-r--r-- | net/websockets/websocket_job.cc | 9 | ||||
-rw-r--r-- | net/websockets/websocket_net_log_params.h | 65 |
4 files changed, 83 insertions, 0 deletions
diff --git a/net/websockets/websocket_handshake_handler.cc b/net/websockets/websocket_handshake_handler.cc index a39fa58..57f01e9 100644 --- a/net/websockets/websocket_handshake_handler.cc +++ b/net/websockets/websocket_handshake_handler.cc @@ -413,6 +413,12 @@ void WebSocketHandshakeResponseHandler::RemoveHeaders( headers_ = FilterHeaders(headers_, headers_to_remove, headers_to_remove_len); } +std::string WebSocketHandshakeResponseHandler::GetRawResponse() const { + DCHECK(HasResponse()); + return std::string(original_.data(), + original_header_length_ + kResponseKeySize); +} + std::string WebSocketHandshakeResponseHandler::GetResponse() { DCHECK(HasResponse()); DCHECK(status_line_.size() > 0); diff --git a/net/websockets/websocket_handshake_handler.h b/net/websockets/websocket_handshake_handler.h index 3fff3da..5455444 100644 --- a/net/websockets/websocket_handshake_handler.h +++ b/net/websockets/websocket_handshake_handler.h @@ -98,6 +98,9 @@ class WebSocketHandshakeResponseHandler { void RemoveHeaders(const char* const headers_to_remove[], size_t headers_to_remove_len); + // Gets raw WebSocket handshake response received from WebSocket server. + std::string GetRawResponse() const; + // Gets WebSocket handshake response message sent to renderer process. std::string GetResponse(); diff --git a/net/websockets/websocket_job.cc b/net/websockets/websocket_job.cc index ba79c44..64af45b 100644 --- a/net/websockets/websocket_job.cc +++ b/net/websockets/websocket_job.cc @@ -9,6 +9,7 @@ #include "base/string_tokenizer.h" #include "googleurl/src/gurl.h" #include "net/base/net_errors.h" +#include "net/base/net_log.h" #include "net/base/cookie_policy.h" #include "net/base/cookie_store.h" #include "net/base/io_buffer.h" @@ -16,6 +17,7 @@ #include "net/url_request/url_request_context.h" #include "net/websockets/websocket_frame_handler.h" #include "net/websockets/websocket_handshake_handler.h" +#include "net/websockets/websocket_net_log_params.h" #include "net/websockets/websocket_throttle.h" namespace { @@ -309,6 +311,9 @@ void WebSocketJob::OnCanGetCookiesCompleted(int policy) { const std::string& handshake_request = handshake_request_->GetRawRequest(); handshake_request_sent_ = 0; + socket_->net_log()->AddEvent( + NetLog::TYPE_WEB_SOCKET_SEND_REQUEST_HEADERS, + new NetLogWebSocketHandshakeParameter(handshake_request)); socket_->SendData(handshake_request.data(), handshake_request.size()); } @@ -347,6 +352,10 @@ void WebSocketJob::OnReceivedHandshakeResponse( return; } // handshake message is completed. + socket_->net_log()->AddEvent( + NetLog::TYPE_WEB_SOCKET_READ_RESPONSE_HEADERS, + new NetLogWebSocketHandshakeParameter( + handshake_response_->GetRawResponse())); if (len - response_length > 0) { // If we received extra data, it should be frame data. receive_frame_handler_->AppendData(data + response_length, diff --git a/net/websockets/websocket_net_log_params.h b/net/websockets/websocket_net_log_params.h new file mode 100644 index 0000000..780cb3b --- /dev/null +++ b/net/websockets/websocket_net_log_params.h @@ -0,0 +1,65 @@ +// 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 NET_WEBSOCKETS_WEBSOCKET_NET_LOG_PARAMS_H_ +#define NET_WEBSOCKETS_WEBSOCKET_NET_LOG_PARAMS_H_ +#pragma once + +#include <string> +#include <vector> + +#include "base/basictypes.h" +#include "base/ref_counted.h" +#include "base/string_util.h" +#include "base/values.h" +#include "net/base/net_log.h" + +namespace net { + +class NetLogWebSocketHandshakeParameter : public NetLog::EventParameters { + public: + explicit NetLogWebSocketHandshakeParameter(const std::string& headers) + : headers_(headers) { + } + + Value* ToValue() const { + DictionaryValue* dict = new DictionaryValue(); + ListValue* headers = new ListValue(); + std::vector<std::string> lines; + SplitStringDontTrim(headers_, '\n', &lines); + for (size_t i = 0; i < lines.size(); ++i) { + if (lines[i] == "\r") { + headers->Append(new StringValue("")); + // Dump WebSocket key3 + std::string key; + i = i + 1; + for (; i < lines.size(); ++i) { + for (size_t j = 0; j < lines[i].length(); ++j) { + key += StringPrintf("\\x%02x", lines[i][j] & 0xff); + } + key += "\\x0a"; + } + headers->Append(new StringValue(key)); + break; + } + std::string line = lines[i]; + if (line.length() > 0 && line[line.length() - 1] == '\r') + line = line.substr(0, line.length() - 1); + headers->Append(new StringValue(line)); + } + dict->Set("headers", headers); + return dict; + } + + private: + ~NetLogWebSocketHandshakeParameter() {} + + const std::string headers_; + + DISALLOW_COPY_AND_ASSIGN(NetLogWebSocketHandshakeParameter); +}; + +} // namespace net + +#endif // NET_WEBSOCKETS_WEBSOCKET_NET_LOG_PARAMS_H_ |