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

Side by Side Diff: net/http/http_transaction_winhttp.h

Issue 17635: Remove HttpTransactionWinHttp and the --winhttp command-line... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/http/http_network_layer.cc ('k') | net/http/http_transaction_winhttp.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef NET_HTTP_HTTP_TRANSACTION_WINHTTP_H__
6 #define NET_HTTP_HTTP_TRANSACTION_WINHTTP_H__
7
8 #include <windows.h>
9 #include <winhttp.h>
10
11 #include <string>
12
13 #include "base/ref_counted.h"
14 #include "net/base/completion_callback.h"
15 #include "net/http/http_response_info.h"
16 #include "net/http/http_transaction.h"
17 #include "net/http/http_transaction_factory.h"
18 #include "net/proxy/proxy_service.h"
19
20 namespace net {
21
22 class UploadDataStream;
23
24 class HttpTransactionWinHttp : public HttpTransaction {
25 class Session; // Represents a WinHttp session handle.
26 class SessionCallback;
27 public:
28 // Instantiate this class, and use it to create HttpTransaction objects.
29 class Factory : public HttpTransactionFactory {
30 public:
31 explicit Factory(ProxyService* proxy_service)
32 : session_(NULL), proxy_service_(proxy_service), is_suspended_(false) {
33 DCHECK(proxy_service);
34 }
35 ~Factory();
36
37 virtual HttpTransaction* CreateTransaction();
38 virtual HttpCache* GetCache();
39 virtual void Suspend(bool suspend);
40
41 private:
42 Session* session_;
43 ProxyService* proxy_service_;
44 bool is_suspended_;
45 DISALLOW_EVIL_CONSTRUCTORS(Factory);
46 };
47
48 virtual ~HttpTransactionWinHttp();
49
50 // HttpTransaction methods:
51 virtual int Start(const HttpRequestInfo*, CompletionCallback*);
52 virtual int RestartIgnoringLastError(CompletionCallback*);
53 virtual int RestartWithAuth(const std::wstring&,
54 const std::wstring&,
55 CompletionCallback*);
56 virtual int Read(char*, int, CompletionCallback*);
57 virtual const HttpResponseInfo* GetResponseInfo() const;
58 virtual LoadState GetLoadState() const;
59 virtual uint64 GetUploadProgress() const;
60
61 static void CALLBACK StatusCallback(HINTERNET handle,
62 DWORD_PTR context,
63 DWORD status,
64 LPVOID status_info,
65 DWORD status_info_len);
66
67 // Called via the message loop in response to a WinHttp status callback.
68 void HandleStatusCallback(DWORD status,
69 DWORD_PTR result,
70 DWORD error,
71 DWORD secure_failure);
72
73 private:
74 friend class Factory;
75
76 // Methods ------------------------------------------------------------------
77
78 HttpTransactionWinHttp(Session* session, const ProxyInfo* info);
79
80 void DoCallback(int rv);
81 int ResolveProxy();
82 bool OpenRequest();
83 int SendRequest();
84 bool ReopenRequest();
85 int Restart(CompletionCallback* callback);
86 int RestartInternal();
87 int DidResolveProxy();
88 int DidReceiveError(DWORD error, DWORD secure_failure);
89 int DidSendRequest();
90 int DidWriteData(DWORD num_bytes);
91 int DidReadData(DWORD num_bytes);
92 void LogTransactionMetrics() const;
93 int DidReceiveHeaders();
94
95 int PopulateAuthChallenge();
96 void ApplyAuth();
97
98 std::string GetRequestHeaders() const;
99 X509Certificate* GetServerCertificate() const;
100 int GetSecurityBits() const;
101 void PopulateSSLInfo(DWORD secure_failure);
102
103 void OnProxyInfoAvailable(int result);
104
105 // Variables ----------------------------------------------------------------
106
107 Session* session_;
108 const HttpRequestInfo* request_;
109
110 // A copy of request_->load_flags that we can modify in
111 // RestartIgnoringLastError.
112 int load_flags_;
113
114 // Optional auth data for proxy and origin server.
115 scoped_refptr<AuthData> proxy_auth_;
116 scoped_refptr<AuthData> server_auth_;
117
118 // The key for looking up the auth data in the auth cache, consisting
119 // of the scheme, host, and port of the request URL and the realm in
120 // the auth challenge.
121 std::string proxy_auth_cache_key_;
122 std::string server_auth_cache_key_;
123
124 // The peer of the connection. For a direct connection, this is the
125 // destination server. If we use a proxy, this is the proxy.
126 std::string connect_peer_;
127
128 // The last error from SendRequest that occurred. Used by
129 // RestartIgnoringLastError to adjust load_flags_ to ignore this error.
130 DWORD last_error_;
131
132 // This value is non-negative when we are streaming a response over a
133 // non-keepalive connection. We decrement this value as we receive data to
134 // allow us to discover end-of-file. This is used to workaround a bug in
135 // WinHttp (see bug 1063336).
136 int64 content_length_remaining_;
137
138 ProxyInfo proxy_info_;
139 ProxyService::PacRequest* pac_request_;
140 CompletionCallbackImpl<HttpTransactionWinHttp> proxy_callback_;
141
142 HttpResponseInfo response_;
143 CompletionCallback* callback_;
144 HINTERNET connect_handle_;
145 HINTERNET request_handle_;
146 scoped_refptr<SessionCallback> session_callback_;
147 scoped_ptr<UploadDataStream> upload_stream_;
148 uint64 upload_progress_;
149
150 // True if the URL's scheme is https.
151 bool is_https_;
152
153 // True if the SSL server doesn't support TLS but also cannot correctly
154 // negotiate with a TLS-enabled client to use SSL 3.0. The workaround is
155 // for the client to downgrade to SSL 3.0 and retry the SSL handshake.
156 bool is_tls_intolerant_;
157
158 // True if revocation checking of the SSL server certificate is enabled.
159 bool rev_checking_enabled_;
160
161 // A flag to indicate whether or not we already have proxy information.
162 // If false, we will attempt to resolve proxy information from the proxy
163 // service. This flag is set to true if proxy information is supplied by
164 // a client.
165 bool have_proxy_info_;
166
167 // If WinHTTP is still using our caller's data (upload data or read buffer),
168 // we need to wait for the HANDLE_CLOSING status notification after we close
169 // the request handle.
170 //
171 // There are only five WinHTTP functions that work asynchronously (listed in
172 // the order in which they're called):
173 // WinHttpSendRequest, WinHttpWriteData, WinHttpReceiveResponse,
174 // WinHttpQueryDataAvailable, WinHttpReadData.
175 // WinHTTP is using our caller's data during the two time intervals:
176 // - From the first WinHttpWriteData call to the completion of the last
177 // WinHttpWriteData call. (We may call WinHttpWriteData multiple times.)
178 // - From the WinHttpReadData call to its completion.
179 // We set need_to_wait_for_handle_closing_ to true at the beginning of these
180 // time intervals and set it to false at the end. We're not sandwiching the
181 // intervals as tightly as possible. (To do that, we'd need to give WinHTTP
182 // worker threads access to the need_to_wait_for_handle_closing_ flag and
183 // worry about thread synchronization issues.)
184 bool need_to_wait_for_handle_closing_;
185
186 // True if we have called WinHttpRequestThrottle::SubmitRequest but haven't
187 // called WinHttpRequestThrottle::NotifyRequestDone.
188 bool request_submitted_;
189
190 // True if we have used the username/password embedded in the URL.
191 bool used_embedded_credentials_;
192
193 DISALLOW_EVIL_CONSTRUCTORS(HttpTransactionWinHttp);
194 };
195
196 } // namespace net
197
198 #endif // NET_HTTP_HTTP_TRANSACTION_WINHTTP_H__
199
OLDNEW
« no previous file with comments | « net/http/http_network_layer.cc ('k') | net/http/http_transaction_winhttp.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698