Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / net / chrome_url_request_context_getter.h
1 // Copyright 2014 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.
4
5 #ifndef CHROME_BROWSER_NET_CHROME_URL_REQUEST_CONTEXT_GETTER_H_
6 #define CHROME_BROWSER_NET_CHROME_URL_REQUEST_CONTEXT_GETTER_H_
7
8 #include <string>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
12 #include "net/url_request/url_request_context.h"
13 #include "net/url_request/url_request_context_getter.h"
14 #include "net/url_request/url_request_job_factory.h"
15
16 class ChromeURLRequestContextFactory;
17 class IOThread;
18 class Profile;
19 class ProfileIOData;
20 struct StoragePartitionDescriptor;
21
22 // A net::URLRequestContextGetter subclass used by the browser. This returns a
23 // subclass of net::URLRequestContext which can be used to store extra
24 // information about requests.
25 //
26 // Most methods are expected to be called on the UI thread, except for
27 // the destructor and GetURLRequestContext().
28 class ChromeURLRequestContextGetter : public net::URLRequestContextGetter {
29  public:
30   // Constructs a ChromeURLRequestContextGetter that will use |factory| to
31   // create the URLRequestContext.
32   explicit ChromeURLRequestContextGetter(
33       ChromeURLRequestContextFactory* factory);
34
35   // Note that GetURLRequestContext() can only be called from the IO
36   // thread (it will assert otherwise).
37   // GetIOMessageLoopProxy however can be called from any thread.
38   //
39   // net::URLRequestContextGetter implementation.
40   net::URLRequestContext* GetURLRequestContext() override;
41   scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner()
42       const override;
43
44   // Create an instance for use with an 'original' (non-OTR) profile. This is
45   // expected to get called on the UI thread.
46   static ChromeURLRequestContextGetter* Create(
47       Profile* profile,
48       const ProfileIOData* profile_io_data,
49       content::ProtocolHandlerMap* protocol_handlers,
50       content::URLRequestInterceptorScopedVector request_interceptors);
51
52   // Create an instance for an original profile for media. This is expected to
53   // get called on UI thread. This method takes a profile and reuses the
54   // 'original' net::URLRequestContext for common files.
55   static ChromeURLRequestContextGetter* CreateForMedia(
56       Profile* profile, const ProfileIOData* profile_io_data);
57
58   // Create an instance for an original profile for extensions. This is expected
59   // to get called on UI thread.
60   static ChromeURLRequestContextGetter* CreateForExtensions(
61       Profile* profile, const ProfileIOData* profile_io_data);
62
63   // Create an instance for an original profile for an app with isolated
64   // storage. This is expected to get called on UI thread.
65   static ChromeURLRequestContextGetter* CreateForIsolatedApp(
66       Profile* profile,
67       const ProfileIOData* profile_io_data,
68       const StoragePartitionDescriptor& partition_descriptor,
69       scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
70           protocol_handler_interceptor,
71       content::ProtocolHandlerMap* protocol_handlers,
72       content::URLRequestInterceptorScopedVector request_interceptors);
73
74   // Create an instance for an original profile for media with isolated
75   // storage. This is expected to get called on UI thread.
76   static ChromeURLRequestContextGetter* CreateForIsolatedMedia(
77       Profile* profile,
78       ChromeURLRequestContextGetter* app_context,
79       const ProfileIOData* profile_io_data,
80       const StoragePartitionDescriptor& partition_descriptor);
81
82   // Discard reference to URLRequestContext.
83   // Access only from the IO thread.
84   void Invalidate();
85
86  private:
87   ~ChromeURLRequestContextGetter() override;
88
89   // Deferred logic for creating a URLRequestContext.
90   // Access only from the IO thread.
91   scoped_ptr<ChromeURLRequestContextFactory> factory_;
92
93   // NULL before initialization and after invalidation.
94   // Otherwise, it is the URLRequestContext instance that
95   // was lazily created by GetURLRequestContext().
96   // Access only from the IO thread.
97   net::URLRequestContext* url_request_context_;
98
99   DISALLOW_COPY_AND_ASSIGN(ChromeURLRequestContextGetter);
100 };
101
102 #endif  // CHROME_BROWSER_NET_CHROME_URL_REQUEST_CONTEXT_GETTER_H_