Index: net/http/http_transaction_winhttp.h |
=================================================================== |
--- net/http/http_transaction_winhttp.h (revision 7967) |
+++ net/http/http_transaction_winhttp.h (working copy) |
@@ -1,199 +0,0 @@ |
-// Copyright (c) 2006-2008 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_HTTP_HTTP_TRANSACTION_WINHTTP_H__ |
-#define NET_HTTP_HTTP_TRANSACTION_WINHTTP_H__ |
- |
-#include <windows.h> |
-#include <winhttp.h> |
- |
-#include <string> |
- |
-#include "base/ref_counted.h" |
-#include "net/base/completion_callback.h" |
-#include "net/http/http_response_info.h" |
-#include "net/http/http_transaction.h" |
-#include "net/http/http_transaction_factory.h" |
-#include "net/proxy/proxy_service.h" |
- |
-namespace net { |
- |
-class UploadDataStream; |
- |
-class HttpTransactionWinHttp : public HttpTransaction { |
- class Session; // Represents a WinHttp session handle. |
- class SessionCallback; |
- public: |
- // Instantiate this class, and use it to create HttpTransaction objects. |
- class Factory : public HttpTransactionFactory { |
- public: |
- explicit Factory(ProxyService* proxy_service) |
- : session_(NULL), proxy_service_(proxy_service), is_suspended_(false) { |
- DCHECK(proxy_service); |
- } |
- ~Factory(); |
- |
- virtual HttpTransaction* CreateTransaction(); |
- virtual HttpCache* GetCache(); |
- virtual void Suspend(bool suspend); |
- |
- private: |
- Session* session_; |
- ProxyService* proxy_service_; |
- bool is_suspended_; |
- DISALLOW_EVIL_CONSTRUCTORS(Factory); |
- }; |
- |
- virtual ~HttpTransactionWinHttp(); |
- |
- // HttpTransaction methods: |
- virtual int Start(const HttpRequestInfo*, CompletionCallback*); |
- virtual int RestartIgnoringLastError(CompletionCallback*); |
- virtual int RestartWithAuth(const std::wstring&, |
- const std::wstring&, |
- CompletionCallback*); |
- virtual int Read(char*, int, CompletionCallback*); |
- virtual const HttpResponseInfo* GetResponseInfo() const; |
- virtual LoadState GetLoadState() const; |
- virtual uint64 GetUploadProgress() const; |
- |
- static void CALLBACK StatusCallback(HINTERNET handle, |
- DWORD_PTR context, |
- DWORD status, |
- LPVOID status_info, |
- DWORD status_info_len); |
- |
- // Called via the message loop in response to a WinHttp status callback. |
- void HandleStatusCallback(DWORD status, |
- DWORD_PTR result, |
- DWORD error, |
- DWORD secure_failure); |
- |
- private: |
- friend class Factory; |
- |
- // Methods ------------------------------------------------------------------ |
- |
- HttpTransactionWinHttp(Session* session, const ProxyInfo* info); |
- |
- void DoCallback(int rv); |
- int ResolveProxy(); |
- bool OpenRequest(); |
- int SendRequest(); |
- bool ReopenRequest(); |
- int Restart(CompletionCallback* callback); |
- int RestartInternal(); |
- int DidResolveProxy(); |
- int DidReceiveError(DWORD error, DWORD secure_failure); |
- int DidSendRequest(); |
- int DidWriteData(DWORD num_bytes); |
- int DidReadData(DWORD num_bytes); |
- void LogTransactionMetrics() const; |
- int DidReceiveHeaders(); |
- |
- int PopulateAuthChallenge(); |
- void ApplyAuth(); |
- |
- std::string GetRequestHeaders() const; |
- X509Certificate* GetServerCertificate() const; |
- int GetSecurityBits() const; |
- void PopulateSSLInfo(DWORD secure_failure); |
- |
- void OnProxyInfoAvailable(int result); |
- |
- // Variables ---------------------------------------------------------------- |
- |
- Session* session_; |
- const HttpRequestInfo* request_; |
- |
- // A copy of request_->load_flags that we can modify in |
- // RestartIgnoringLastError. |
- int load_flags_; |
- |
- // Optional auth data for proxy and origin server. |
- scoped_refptr<AuthData> proxy_auth_; |
- scoped_refptr<AuthData> server_auth_; |
- |
- // The key for looking up the auth data in the auth cache, consisting |
- // of the scheme, host, and port of the request URL and the realm in |
- // the auth challenge. |
- std::string proxy_auth_cache_key_; |
- std::string server_auth_cache_key_; |
- |
- // The peer of the connection. For a direct connection, this is the |
- // destination server. If we use a proxy, this is the proxy. |
- std::string connect_peer_; |
- |
- // The last error from SendRequest that occurred. Used by |
- // RestartIgnoringLastError to adjust load_flags_ to ignore this error. |
- DWORD last_error_; |
- |
- // This value is non-negative when we are streaming a response over a |
- // non-keepalive connection. We decrement this value as we receive data to |
- // allow us to discover end-of-file. This is used to workaround a bug in |
- // WinHttp (see bug 1063336). |
- int64 content_length_remaining_; |
- |
- ProxyInfo proxy_info_; |
- ProxyService::PacRequest* pac_request_; |
- CompletionCallbackImpl<HttpTransactionWinHttp> proxy_callback_; |
- |
- HttpResponseInfo response_; |
- CompletionCallback* callback_; |
- HINTERNET connect_handle_; |
- HINTERNET request_handle_; |
- scoped_refptr<SessionCallback> session_callback_; |
- scoped_ptr<UploadDataStream> upload_stream_; |
- uint64 upload_progress_; |
- |
- // True if the URL's scheme is https. |
- bool is_https_; |
- |
- // True if the SSL server doesn't support TLS but also cannot correctly |
- // negotiate with a TLS-enabled client to use SSL 3.0. The workaround is |
- // for the client to downgrade to SSL 3.0 and retry the SSL handshake. |
- bool is_tls_intolerant_; |
- |
- // True if revocation checking of the SSL server certificate is enabled. |
- bool rev_checking_enabled_; |
- |
- // A flag to indicate whether or not we already have proxy information. |
- // If false, we will attempt to resolve proxy information from the proxy |
- // service. This flag is set to true if proxy information is supplied by |
- // a client. |
- bool have_proxy_info_; |
- |
- // If WinHTTP is still using our caller's data (upload data or read buffer), |
- // we need to wait for the HANDLE_CLOSING status notification after we close |
- // the request handle. |
- // |
- // There are only five WinHTTP functions that work asynchronously (listed in |
- // the order in which they're called): |
- // WinHttpSendRequest, WinHttpWriteData, WinHttpReceiveResponse, |
- // WinHttpQueryDataAvailable, WinHttpReadData. |
- // WinHTTP is using our caller's data during the two time intervals: |
- // - From the first WinHttpWriteData call to the completion of the last |
- // WinHttpWriteData call. (We may call WinHttpWriteData multiple times.) |
- // - From the WinHttpReadData call to its completion. |
- // We set need_to_wait_for_handle_closing_ to true at the beginning of these |
- // time intervals and set it to false at the end. We're not sandwiching the |
- // intervals as tightly as possible. (To do that, we'd need to give WinHTTP |
- // worker threads access to the need_to_wait_for_handle_closing_ flag and |
- // worry about thread synchronization issues.) |
- bool need_to_wait_for_handle_closing_; |
- |
- // True if we have called WinHttpRequestThrottle::SubmitRequest but haven't |
- // called WinHttpRequestThrottle::NotifyRequestDone. |
- bool request_submitted_; |
- |
- // True if we have used the username/password embedded in the URL. |
- bool used_embedded_credentials_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(HttpTransactionWinHttp); |
-}; |
- |
-} // namespace net |
- |
-#endif // NET_HTTP_HTTP_TRANSACTION_WINHTTP_H__ |
- |