| 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_
|
|
|