summaryrefslogtreecommitdiffstats
path: root/net/websockets
diff options
context:
space:
mode:
authorukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-12 04:15:21 +0000
committerukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-12 04:15:21 +0000
commit6983889c43251e2c3193d623a39398f3ab2b69d3 (patch)
tree3a905728b246b2d694713eb1cac5c6525ac00885 /net/websockets
parentfb96c8e94109f7c7b975dec14954da4a639e6793 (diff)
downloadchromium_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.cc6
-rw-r--r--net/websockets/websocket_handshake_handler.h3
-rw-r--r--net/websockets/websocket_job.cc9
-rw-r--r--net/websockets/websocket_net_log_params.h65
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_