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

Unified Diff: net/socket_stream/socket_stream.h

Issue 330016: Add proxy basic auth support in net/socket_stream. (Closed)
Patch Set: update comment Created 11 years, 2 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
Index: net/socket_stream/socket_stream.h
diff --git a/net/socket_stream/socket_stream.h b/net/socket_stream/socket_stream.h
index 2a3dcb2aa950890a430ea2105f8ce168320ca556..c1aaf6eed50aa2d45c0890bd8a930ee132bb6d8e 100644
--- a/net/socket_stream/socket_stream.h
+++ b/net/socket_stream/socket_stream.h
@@ -6,6 +6,7 @@
#define NET_SOCKET_STREAM_SOCKET_STREAM_H_
#include <deque>
+#include <map>
#include <string>
#include <vector>
@@ -16,17 +17,27 @@
#include "net/base/address_list.h"
#include "net/base/completion_callback.h"
#include "net/base/io_buffer.h"
+#include "net/http/http_auth.h"
+#include "net/http/http_auth_cache.h"
+#include "net/http/http_auth_handler.h"
#include "net/proxy/proxy_service.h"
#include "net/socket/tcp_client_socket.h"
#include "net/url_request/url_request_context.h"
namespace net {
+class AuthChallengeInfo;
class ClientSocketFactory;
class HostResolver;
class SSLConfigService;
class SingleRequestHostResolver;
+// SocketStream is used to implement Web Sockets.
+// It provides plain full-duplex stream with proxy and SSL support.
+// For proxy authentication, only basic mechanisum is supported. It will try
+// authentication identity for proxy URL first. If server requires proxy
+// authentication, it will try authentication identity for realm that server
+// requests.
class SocketStream : public base::RefCountedThreadSafe<SocketStream> {
public:
// Derive from this class and add your own data members to associate extra
@@ -59,6 +70,15 @@ class SocketStream : public base::RefCountedThreadSafe<SocketStream> {
// Called when the socket stream has been closed.
virtual void OnClose(SocketStream* socket) = 0;
+
+ // Called when proxy authentication required.
+ // The delegate should call RestartWithAuth() if credential for |auth_info|
+ // is found in password database, or call Close() to close the connection.
+ virtual void OnAuthRequired(SocketStream* socket,
+ AuthChallengeInfo* auth_info) {
+ // By default, no credential is available and close the connection.
+ socket->Close();
+ }
};
SocketStream(const GURL& url, Delegate* delegate);
@@ -91,6 +111,12 @@ class SocketStream : public base::RefCountedThreadSafe<SocketStream> {
// Once the connection is closed, calls delegate's OnClose.
void Close();
+ // Restarts with authentication info.
+ // Should be used for response of OnAuthRequired.
+ void RestartWithAuth(
+ const std::wstring& username,
+ const std::wstring& password);
+
// Detach delegate. Call before delegate is deleted.
// Once delegate is detached, close the socket stream and never call delegate
// back.
@@ -145,7 +171,6 @@ class SocketStream : public base::RefCountedThreadSafe<SocketStream> {
STATE_SOCKS_CONNECT_COMPLETE,
STATE_SSL_CONNECT,
STATE_SSL_CONNECT_COMPLETE,
- STATE_CONNECTION_ESTABLISHED,
STATE_READ_WRITE
};
@@ -189,6 +214,11 @@ class SocketStream : public base::RefCountedThreadSafe<SocketStream> {
int DoSSLConnectComplete(int result);
int DoReadWrite(int result);
+ GURL ProxyAuthOrigin() const;
+ int HandleAuthChallenge(const HttpResponseHeaders* headers);
+ void DoAuthRequired();
+ void DoRestartWithAuth();
+
int HandleCertificateError(int result);
bool is_secure() const;
@@ -212,6 +242,11 @@ class SocketStream : public base::RefCountedThreadSafe<SocketStream> {
ProxyService::PacRequest* pac_request_;
ProxyInfo proxy_info_;
+ HttpAuthCache auth_cache_;
+ scoped_refptr<HttpAuthHandler> auth_handler_;
+ HttpAuth::Identity auth_identity_;
+ scoped_refptr<AuthChallengeInfo> auth_info_;
+
scoped_refptr<RequestHeaders> tunnel_request_headers_;
size_t tunnel_request_headers_bytes_sent_;
scoped_refptr<ResponseHeaders> tunnel_response_headers_;

Powered by Google App Engine
This is Rietveld 408576698