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

Unified Diff: net/http/winhttp_request_throttle.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_transaction_winhttp_unittest.cc ('k') | net/http/winhttp_request_throttle.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/winhttp_request_throttle.h
===================================================================
--- net/http/winhttp_request_throttle.h (revision 7967)
+++ net/http/winhttp_request_throttle.h (working copy)
@@ -1,104 +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_WINHTTP_REQUEST_THROTTLE_H_
-#define NET_HTTP_WINHTTP_REQUEST_THROTTLE_H_
-
-#include <windows.h>
-#include <winhttp.h>
-
-#include <map>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/linked_ptr.h"
-#include "testing/gtest/include/gtest/gtest_prod.h"
-
-namespace net {
-
-// The WinHttpRequestThrottle class regulates the rate at which we call
-// WinHttpSendRequest, ensuring that at any time there are at most 6 WinHTTP
-// requests in progress for each server or proxy.
-//
-// The throttling is intended to cause WinHTTP to maintain at most 6
-// persistent HTTP connections with each server or proxy. This works well in
-// most cases, except when making HTTPS requests via a proxy, in which case
-// WinHTTP may open much more than 6 connections to the proxy in spite of our
-// rate limiting.
-//
-// Because we identify a server by its hostname rather than its IP address,
-// we also can't distinguish between two different hostnames that resolve to
-// the same IP address.
-//
-// Although WinHTTP has the WINHTTP_OPTION_MAX_CONNS_PER_SERVER option to
-// limit the number of connections allowed per server, we can't use it
-// because it has two serious bugs:
-// 1. It causes WinHTTP to not close idle persistent connections, leaving
-// many connections in the CLOSE_WAIT state. This may cause system
-// crashes (Blue Screen of Death) when VPN is used.
-// 2. It causes WinHTTP to crash intermittently in
-// HTTP_REQUEST_HANDLE_OBJECT::OpenProxyTunnel_Fsm() if a proxy is used.
-// Therefore, we have to resort to throttling our WinHTTP requests to achieve
-// the same effect.
-//
-// Note on thread safety: The WinHttpRequestThrottle class is only used by
-// the IO thread, so it doesn't need to be protected with a lock. The
-// drawback is that the time we mark a request done is only approximate.
-// We do that in the HttpTransactionWinHttp destructor, rather than in the
-// WinHTTP status callback upon receiving HANDLE_CLOSING.
-class WinHttpRequestThrottle {
- public:
- WinHttpRequestThrottle() {}
-
- virtual ~WinHttpRequestThrottle();
-
- // Intended to be a near drop-in replacement of WinHttpSendRequest.
- BOOL SubmitRequest(const std::string& server,
- HINTERNET request_handle,
- DWORD total_size,
- DWORD_PTR context);
-
- // Called when a request failed or completed successfully.
- void NotifyRequestDone(const std::string& server);
-
- // Called from the HttpTransactionWinHttp destructor.
- void RemoveRequest(const std::string& server,
- HINTERNET request_handle);
-
- protected:
- // Unit tests can stub out this method in a derived class.
- virtual BOOL SendRequest(HINTERNET request_handle,
- DWORD total_size,
- DWORD_PTR context,
- bool report_async_error);
-
- private:
- FRIEND_TEST(WinHttpRequestThrottleTest, GarbageCollect);
-
- class RequestQueue;
-
- struct PerServerThrottle {
- PerServerThrottle();
- ~PerServerThrottle();
-
- int num_requests; // Number of requests in progress
- linked_ptr<RequestQueue> request_queue; // Requests waiting to be sent
- };
-
- typedef std::map<std::string, PerServerThrottle> ThrottleMap;
-
- static const int kMaxConnectionsPerServer;
- static const int kGarbageCollectionThreshold;
-
- void GarbageCollect();
-
- ThrottleMap throttles_;
-
- DISALLOW_EVIL_CONSTRUCTORS(WinHttpRequestThrottle);
-};
-
-} // namespace net
-
-#endif // NET_HTTP_WINHTTP_REQUEST_THROTTLE_H_
-
« no previous file with comments | « net/http/http_transaction_winhttp_unittest.cc ('k') | net/http/winhttp_request_throttle.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698