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

Unified Diff: net/proxy/multi_threaded_proxy_resolver.h

Issue 2945004: Revert 51877, since SpdyNetworkTransactionTest.CorruptFrameSessionError start... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 5 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/net.gyp ('k') | net/proxy/multi_threaded_proxy_resolver.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/multi_threaded_proxy_resolver.h
===================================================================
--- net/proxy/multi_threaded_proxy_resolver.h (revision 51891)
+++ net/proxy/multi_threaded_proxy_resolver.h (working copy)
@@ -1,144 +0,0 @@
-// Copyright (c) 2009 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_PROXY_MULTI_THREADED_PROXY_RESOLVER_H_
-#define NET_PROXY_MULTI_THREADED_PROXY_RESOLVER_H_
-
-#include <deque>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/non_thread_safe.h"
-#include "base/ref_counted.h"
-#include "base/scoped_ptr.h"
-#include "net/proxy/proxy_resolver.h"
-
-namespace base {
-class Thread;
-} // namespace base
-
-namespace net {
-
-// ProxyResolverFactory is an interface for creating ProxyResolver instances.
-class ProxyResolverFactory {
- public:
- explicit ProxyResolverFactory(bool resolvers_expect_pac_bytes)
- : resolvers_expect_pac_bytes_(resolvers_expect_pac_bytes) {}
-
- virtual ~ProxyResolverFactory() {}
-
- // Creates a new ProxyResolver. The caller is responsible for freeing this
- // object.
- virtual ProxyResolver* CreateProxyResolver() = 0;
-
- bool resolvers_expect_pac_bytes() const {
- return resolvers_expect_pac_bytes_;
- }
-
- private:
- bool resolvers_expect_pac_bytes_;
- DISALLOW_COPY_AND_ASSIGN(ProxyResolverFactory);
-};
-
-// MultiThreadedProxyResolver is a ProxyResolver implementation that runs
-// synchronous ProxyResolver implementations on worker threads.
-//
-// Threads are created lazily on demand, up to a maximum total. The advantage
-// of having a pool of threads, is faster performance. In particular, being
-// able to keep servicing PAC requests even if one blocks its execution.
-//
-// During initialization (SetPacScript), a single thread is spun up to test
-// the script. If this succeeds, we cache the input script, and will re-use
-// this to lazily provision any new threads as needed.
-//
-// For each new thread that we spawn, a corresponding new ProxyResolver is
-// created using ProxyResolverFactory.
-//
-// Because we are creating multiple ProxyResolver instances, this means we
-// are duplicating script contexts for what is ordinarily seen as being a
-// single script. This can affect compatibility on some classes of PAC
-// script:
-//
-// (a) Scripts whose initialization has external dependencies on network or
-// time may end up successfully initializing on some threads, but not
-// others. So depending on what thread services the request, the result
-// may jump between several possibilities.
-//
-// (b) Scripts whose FindProxyForURL() depends on side-effects may now
-// work differently. For example, a PAC script which was incrementing
-// a global counter and using that to make a decision. In the
-// multi-threaded model, each thread may have a different value for this
-// counter, so it won't globally be seen as monotonically increasing!
-class MultiThreadedProxyResolver : public ProxyResolver, public NonThreadSafe {
- public:
- // Creates an asynchronous ProxyResolver that runs requests on up to
- // |max_num_threads|.
- //
- // For each thread that is created, an accompanying synchronous ProxyResolver
- // will be provisioned using |resolver_factory|. All methods on these
- // ProxyResolvers will be called on the one thread, with the exception of
- // ProxyResolver::Shutdown() which will be called from the origin thread
- // prior to destruction.
- //
- // The constructor takes ownership of |resolver_factory|.
- MultiThreadedProxyResolver(ProxyResolverFactory* resolver_factory,
- size_t max_num_threads);
-
- virtual ~MultiThreadedProxyResolver();
-
- // ProxyResolver implementation:
- virtual int GetProxyForURL(const GURL& url,
- ProxyInfo* results,
- CompletionCallback* callback,
- RequestHandle* request,
- const BoundNetLog& net_log);
- virtual void CancelRequest(RequestHandle request);
- virtual void CancelSetPacScript();
- virtual void PurgeMemory();
-
- private:
- class Executor;
- class Job;
- class SetPacScriptJob;
- class GetProxyForURLJob;
- // FIFO queue of pending jobs waiting to be started.
- // TODO(eroman): Make this priority queue.
- typedef std::deque<scoped_refptr<Job> > PendingJobsQueue;
- typedef std::vector<scoped_refptr<Executor> > ExecutorList;
-
- // ProxyResolver implementation:
- virtual int SetPacScript(const GURL& pac_url,
- const string16& pac_script,
- CompletionCallback* callback);
-
- // Asserts that there are no outstanding user-initiated jobs on any of the
- // worker threads.
- void CheckNoOutstandingUserRequests() const;
-
- // Stops and deletes all of the worker threads.
- void ReleaseAllExecutors();
-
- // Returns an idle worker thread which is ready to receive GetProxyForURL()
- // requests. If all threads are occupied, returns NULL.
- Executor* FindIdleExecutor();
-
- // Creates a new worker thread, and appends it to |executors_|.
- Executor* AddNewExecutor();
-
- // Starts the next job from |pending_jobs_| if possible.
- void OnExecutorReady(Executor* executor);
-
- const scoped_ptr<ProxyResolverFactory> resolver_factory_;
- const size_t max_num_threads_;
- PendingJobsQueue pending_jobs_;
- ExecutorList executors_;
- bool was_set_pac_script_called_;
- GURL current_pac_url_;
- string16 current_pac_script_;
-};
-
-} // namespace net
-
-#endif // NET_PROXY_MULTI_THREADED_PROXY_RESOLVER_H_
« no previous file with comments | « net/net.gyp ('k') | net/proxy/multi_threaded_proxy_resolver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698