13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_PROXY_PROXY_RESOLVER_WINHTTP_H_
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_PROXY_PROXY_RESOLVER_WINHTTP_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "googleurl/src/gurl.h"
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/proxy/proxy_resolver.h"
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttypedef void* HINTERNET;  // From winhttp.h
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net {
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// An implementation of ProxyResolver that uses WinHTTP and the system
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// proxy settings.
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass ProxyResolverWinHttp : public ProxyResolver {
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public:
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  ProxyResolverWinHttp();
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual ~ProxyResolverWinHttp();
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // ProxyResolver implementation:
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual int GetProxyForURL(const GURL& url,
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                             ProxyInfo* results,
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                             CompletionCallback* /*callback*/,
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                             RequestHandle* /*request*/,
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             const BoundNetLog& /*net_log*/);
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void CancelRequest(RequestHandle request);
3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void CancelSetPacScript();
3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual int SetPacScript(
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const scoped_refptr<ProxyResolverScriptData>& script_data,
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      CompletionCallback* /*callback*/);
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private:
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  bool OpenWinHttpSession();
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  void CloseWinHttpSession();
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Proxy configuration is cached on the session handle.
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  HINTERNET session_handle_;
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  GURL pac_url_;
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  DISALLOW_COPY_AND_ASSIGN(ProxyResolverWinHttp);
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace net
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif  // NET_PROXY_PROXY_RESOLVER_WINHTTP_H_
52