| Index: net/proxy/init_proxy_resolver.h
|
| ===================================================================
|
| --- net/proxy/init_proxy_resolver.h (revision 0)
|
| +++ net/proxy/init_proxy_resolver.h (revision 0)
|
| @@ -0,0 +1,104 @@
|
| +// 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_INIT_PROXY_RESOLVER_H_
|
| +#define NET_PROXY_INIT_PROXY_RESOLVER_H_
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "googleurl/src/gurl.h"
|
| +#include "net/base/completion_callback.h"
|
| +
|
| +namespace net {
|
| +
|
| +class ProxyConfig;
|
| +class ProxyResolver;
|
| +class ProxyScriptFetcher;
|
| +
|
| +// InitProxyResolver is a helper class used by ProxyService to
|
| +// initialize a ProxyResolver with the PAC script data specified
|
| +// by a particular ProxyConfig.
|
| +//
|
| +// This involves trying to use PAC scripts in this order:
|
| +//
|
| +// (1) WPAD if auto-detect is on.
|
| +// (2) Custom PAC script if a URL was given.
|
| +//
|
| +// If no PAC script was successfully downloaded + parsed, then it fails with
|
| +// a network error. Otherwise the proxy resolver is left initialized with
|
| +// the PAC script.
|
| +//
|
| +// Deleting InitProxyResolver while Init() is in progress, will
|
| +// cancel the request.
|
| +//
|
| +class InitProxyResolver {
|
| + public:
|
| + // |resolver| and |proxy_script_fetcher| must remain valid for
|
| + // the lifespan of InitProxyResolver.
|
| + InitProxyResolver(ProxyResolver* resolver,
|
| + ProxyScriptFetcher* proxy_script_fetcher);
|
| +
|
| + // Aborts any in-progress request.
|
| + ~InitProxyResolver();
|
| +
|
| + // Apply the PAC settings of |config| to |resolver_|.
|
| + int Init(const ProxyConfig& config, CompletionCallback* callback);
|
| +
|
| + private:
|
| + enum State {
|
| + STATE_NONE,
|
| + STATE_FETCH_PAC_SCRIPT,
|
| + STATE_FETCH_PAC_SCRIPT_COMPLETE,
|
| + STATE_SET_PAC_SCRIPT,
|
| + STATE_SET_PAC_SCRIPT_COMPLETE,
|
| + };
|
| + typedef std::vector<GURL> UrlList;
|
| +
|
| + // Returns ordered list of PAC urls to try for |config|.
|
| + UrlList BuildPacUrlsFallbackList(const ProxyConfig& config) const;
|
| +
|
| + void OnIOCompletion(int result);
|
| + int DoLoop(int result);
|
| + void DoCallback(int result);
|
| +
|
| + int DoFetchPacScript();
|
| + int DoFetchPacScriptComplete(int result);
|
| +
|
| + int DoSetPacScript();
|
| + int DoSetPacScriptComplete(int result);
|
| +
|
| + // Tries restarting using the next fallback PAC URL:
|
| + // |pac_urls_[++current_pac_url_index]|.
|
| + // Returns OK and rewinds the state machine when there
|
| + // is something to try, otherwise returns |error|.
|
| + int TryToFallbackPacUrl(int error);
|
| +
|
| + // Gets the initial state (we skip fetching when the
|
| + // ProxyResolver doesn't |expect_pac_bytes()|.
|
| + State GetStartState() const;
|
| +
|
| + // Returns the current PAC URL we are fetching/testing.
|
| + const GURL& current_pac_url() const;
|
| +
|
| + ProxyResolver* resolver_;
|
| + ProxyScriptFetcher* proxy_script_fetcher_;
|
| +
|
| + CompletionCallbackImpl<InitProxyResolver> io_callback_;
|
| + CompletionCallback* user_callback_;
|
| +
|
| + size_t current_pac_url_index_;
|
| +
|
| + // Filled when the PAC script fetch completes.
|
| + std::string pac_bytes_;
|
| +
|
| + UrlList pac_urls_;
|
| + State next_state_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(InitProxyResolver);
|
| +};
|
| +
|
| +} // namespace net
|
| +
|
| +#endif // NET_PROXY_INIT_PROXY_RESOLVER_H_
|
|
|
| Property changes on: net\proxy\init_proxy_resolver.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|