Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(632)

Unified Diff: net/websockets/websocket_job.h

Issue 601077: Support HttpOnly cookie on Web Socket (Closed)
Patch Set: fix darin's comment Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/socket_stream/socket_stream_job_manager.cc ('k') | net/websockets/websocket_job.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/websockets/websocket_job.h
diff --git a/net/websockets/websocket_job.h b/net/websockets/websocket_job.h
new file mode 100644
index 0000000000000000000000000000000000000000..31fa5035109c8cdd39620e57a204e5f4e07f2d07
--- /dev/null
+++ b/net/websockets/websocket_job.h
@@ -0,0 +1,98 @@
+// 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_JOB_H_
+#define NET_WEBSOCKETS_WEBSOCKET_JOB_H_
+
+#include <string>
+#include <vector>
+
+#include "base/ref_counted.h"
+#include "net/base/completion_callback.h"
+#include "net/socket_stream/socket_stream_job.h"
+
+class GURL;
+
+namespace net {
+
+// WebSocket protocol specific job on SocketStream.
+// It captures WebSocket handshake message and handles cookie operations.
+// Chome security policy doesn't allow renderer process (except dev tools)
+// see HttpOnly cookies, so it injects cookie header in handshake request and
+// strips set-cookie headers in handshake response.
+// TODO(ukai): refactor to merge WebSocketThrottle functionality.
+// TODO(ukai): refactor websocket.cc to use this.
+class WebSocketJob : public SocketStreamJob, public SocketStream::Delegate {
+ public:
+ // This is state of WebSocket, not SocketStream.
+ enum State {
+ INITIALIZED = -1,
+ CONNECTING = 0,
+ OPEN = 1,
+ CLOSED = 2,
+ };
+ static void EnsureInit();
+
+ explicit WebSocketJob(SocketStream::Delegate* delegate);
+
+ virtual void Connect();
+ virtual bool SendData(const char* data, int len);
+ virtual void Close();
+ virtual void RestartWithAuth(
+ const std::wstring& username,
+ const std::wstring& password);
+ virtual void DetachDelegate();
+
+ // SocketStream::Delegate methods.
+ virtual void OnConnected(
+ SocketStream* socket, int max_pending_send_allowed);
+ virtual void OnSentData(
+ SocketStream* socket, int amount_sent);
+ virtual void OnReceivedData(
+ SocketStream* socket, const char* data, int len);
+ virtual void OnClose(SocketStream* socket);
+ virtual void OnAuthRequired(
+ SocketStream* socket, AuthChallengeInfo* auth_info);
+ virtual void OnError(
+ const SocketStream* socket, int error);
+
+ private:
+ friend class WebSocketJobTest;
+ virtual ~WebSocketJob();
+
+ bool SendHandshakeRequest(const char* data, int len);
+ void AddCookieHeaderAndSend();
+ void OnCanGetCookiesCompleted(int policy);
+
+ void OnSentHandshakeRequest(SocketStream* socket, int amount_sent);
+ void OnReceivedHandshakeResponse(
+ SocketStream* socket, const char* data, int len);
+ void SaveCookiesAndNotifyHeaderComplete();
+ void SaveNextCookie();
+ void OnCanSetCookieCompleted(int policy);
+
+ GURL GetURLForCookies() const;
+
+ SocketStream::Delegate* delegate_;
+ State state_;
+
+ std::string original_handshake_request_;
+ int original_handshake_request_header_length_;
+ std::string handshake_request_;
+ size_t handshake_request_sent_;
+
+ std::string handshake_response_;
+ int handshake_response_header_length_;
+ std::vector<std::string> response_cookies_;
+ size_t response_cookies_save_index_;
+
+ CompletionCallbackImpl<WebSocketJob> can_get_cookies_callback_;
+ CompletionCallbackImpl<WebSocketJob> can_set_cookie_callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebSocketJob);
+};
+
+} // namespace
+
+#endif // NET_WEBSOCKETS_WEBSOCKET_JOB_H_
« no previous file with comments | « net/socket_stream/socket_stream_job_manager.cc ('k') | net/websockets/websocket_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698