1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef ANDROID_WEBVIEW_BROWSER_NET_AW_URL_REQUEST_CONTEXT_GETTER_H_
6 #define ANDROID_WEBVIEW_BROWSER_NET_AW_URL_REQUEST_CONTEXT_GETTER_H_
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "base/files/file_path.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "content/public/browser/content_browser_client.h"
13 #include "net/http/http_network_session.h"
14 #include "net/url_request/url_request_context_getter.h"
15 #include "net/url_request/url_request_job_factory.h"
19 class HttpTransactionFactory;
21 class ProxyConfigService;
22 class URLRequestContext;
23 class URLRequestJobFactory;
26 namespace data_reduction_proxy {
27 class DataReductionProxyAuthRequestHandler;
28 class DataReductionProxyConfigService;
31 namespace android_webview {
33 class AwNetworkDelegate;
35 class AwURLRequestContextGetter : public net::URLRequestContextGetter {
37 AwURLRequestContextGetter(
38 const base::FilePath& partition_path,
39 net::CookieStore* cookie_store,
40 scoped_ptr<data_reduction_proxy::DataReductionProxyConfigService>
43 // net::URLRequestContextGetter implementation.
44 virtual net::URLRequestContext* GetURLRequestContext() OVERRIDE;
45 virtual scoped_refptr<base::SingleThreadTaskRunner>
46 GetNetworkTaskRunner() const OVERRIDE;
48 data_reduction_proxy::DataReductionProxyAuthRequestHandler*
49 GetDataReductionProxyAuthRequestHandler() const;
51 // NetLog is thread-safe, so clients can call this method from arbitrary
52 // threads (UI and IO).
53 net::NetLog* GetNetLog();
56 friend class AwBrowserContext;
57 virtual ~AwURLRequestContextGetter();
59 // Prior to GetURLRequestContext() being called, this is called to hand over
60 // the objects that GetURLRequestContext() will later install into
61 // |job_factory_|. This ordering is enforced by having
62 // AwBrowserContext::CreateRequestContext() call this method.
63 // This method is necessary because the passed in objects are created
64 // on the UI thread while |job_factory_| must be created on the IO thread.
65 void SetHandlersAndInterceptors(
66 content::ProtocolHandlerMap* protocol_handlers,
67 content::URLRequestInterceptorScopedVector request_interceptors);
69 void InitializeURLRequestContext();
71 const base::FilePath partition_path_;
72 scoped_refptr<net::CookieStore> cookie_store_;
73 scoped_ptr<net::NetLog> net_log_;
74 scoped_ptr<net::URLRequestContext> url_request_context_;
75 scoped_ptr<data_reduction_proxy::DataReductionProxyConfigService>
76 data_reduction_proxy_config_service_;
77 scoped_ptr<data_reduction_proxy::DataReductionProxyAuthRequestHandler>
78 data_reduction_proxy_auth_request_handler_;
79 scoped_ptr<net::URLRequestJobFactory> job_factory_;
80 scoped_ptr<net::HttpTransactionFactory> main_http_factory_;
82 // ProtocolHandlers and interceptors are stored here between
83 // SetHandlersAndInterceptors() and the first GetURLRequestContext() call.
84 content::ProtocolHandlerMap protocol_handlers_;
85 content::URLRequestInterceptorScopedVector request_interceptors_;
87 DISALLOW_COPY_AND_ASSIGN(AwURLRequestContextGetter);
90 } // namespace android_webview
92 #endif // ANDROID_WEBVIEW_BROWSER_NET_AW_URL_REQUEST_CONTEXT_GETTER_H_