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

Side by Side Diff: chrome/browser/net/chrome_url_request_context.cc

Issue 11308362: Add StoragePartition's ProtocolHandlers at URLRequestContext construction time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move ShellResourceContext into .cc file Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/net/chrome_url_request_context.h" 5 #include "chrome/browser/net/chrome_url_request_context.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
(...skipping 22 matching lines...) Expand all
33 33
34 namespace { 34 namespace {
35 35
36 // ---------------------------------------------------------------------------- 36 // ----------------------------------------------------------------------------
37 // Helper factories 37 // Helper factories
38 // ---------------------------------------------------------------------------- 38 // ----------------------------------------------------------------------------
39 39
40 // Factory that creates the main ChromeURLRequestContext. 40 // Factory that creates the main ChromeURLRequestContext.
41 class FactoryForMain : public ChromeURLRequestContextFactory { 41 class FactoryForMain : public ChromeURLRequestContextFactory {
42 public: 42 public:
43 explicit FactoryForMain(const ProfileIOData* profile_io_data) 43 explicit FactoryForMain(
awong 2012/12/12 03:44:37 remove explicit. Not needed anymore.
pauljensen 2012/12/12 18:39:37 Done.
44 : profile_io_data_(profile_io_data) {} 44 const ProfileIOData* profile_io_data,
45 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
46 blob_protocol_handler,
47 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
48 file_system_protocol_handler,
49 scoped_ptr<net::URLRequestJobFactory::Interceptor>
50 developer_protocol_handler)
51 : profile_io_data_(profile_io_data),
52 blob_protocol_handler_(blob_protocol_handler.Pass()),
53 file_system_protocol_handler_(file_system_protocol_handler.Pass()),
54 developer_protocol_handler_(developer_protocol_handler.Pass()) {}
45 55
46 virtual ChromeURLRequestContext* Create() OVERRIDE { 56 virtual ChromeURLRequestContext* Create() OVERRIDE {
47 return profile_io_data_->GetMainRequestContext(); 57 return profile_io_data_->GetMainRequestContext(
58 blob_protocol_handler_.Pass(), file_system_protocol_handler_.Pass(),
59 developer_protocol_handler_.Pass());
48 } 60 }
49 61
50 private: 62 private:
51 const ProfileIOData* const profile_io_data_; 63 const ProfileIOData* const profile_io_data_;
64 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> blob_protocol_handler_;
65 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
66 file_system_protocol_handler_;
67 scoped_ptr<net::URLRequestJobFactory::Interceptor>
68 developer_protocol_handler_;
52 }; 69 };
53 70
54 // Factory that creates the ChromeURLRequestContext for extensions. 71 // Factory that creates the ChromeURLRequestContext for extensions.
55 class FactoryForExtensions : public ChromeURLRequestContextFactory { 72 class FactoryForExtensions : public ChromeURLRequestContextFactory {
56 public: 73 public:
57 explicit FactoryForExtensions(const ProfileIOData* profile_io_data) 74 explicit FactoryForExtensions(const ProfileIOData* profile_io_data)
58 : profile_io_data_(profile_io_data) {} 75 : profile_io_data_(profile_io_data) {}
59 76
60 virtual ChromeURLRequestContext* Create() OVERRIDE { 77 virtual ChromeURLRequestContext* Create() OVERRIDE {
61 return profile_io_data_->GetExtensionsRequestContext(); 78 return profile_io_data_->GetExtensionsRequestContext();
62 } 79 }
63 80
64 private: 81 private:
65 const ProfileIOData* const profile_io_data_; 82 const ProfileIOData* const profile_io_data_;
66 }; 83 };
67 84
68 // Factory that creates the ChromeURLRequestContext for a given isolated app. 85 // Factory that creates the ChromeURLRequestContext for a given isolated app.
69 class FactoryForIsolatedApp : public ChromeURLRequestContextFactory { 86 class FactoryForIsolatedApp : public ChromeURLRequestContextFactory {
70 public: 87 public:
71 FactoryForIsolatedApp(const ProfileIOData* profile_io_data, 88 FactoryForIsolatedApp(const ProfileIOData* profile_io_data,
72 const StoragePartitionDescriptor& partition_descriptor, 89 const StoragePartitionDescriptor& partition_descriptor,
73 ChromeURLRequestContextGetter* main_context, 90 ChromeURLRequestContextGetter* main_context,
74 scoped_ptr<net::URLRequestJobFactory::Interceptor> 91 scoped_ptr<net::URLRequestJobFactory::Interceptor>
75 protocol_handler_interceptor) 92 protocol_handler_interceptor,
93 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
94 blob_protocol_handler,
95 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
96 file_system_protocol_handler,
97 scoped_ptr<net::URLRequestJobFactory::Interceptor>
98 developer_protocol_handler)
76 : profile_io_data_(profile_io_data), 99 : profile_io_data_(profile_io_data),
77 partition_descriptor_(partition_descriptor), 100 partition_descriptor_(partition_descriptor),
78 main_request_context_getter_(main_context), 101 main_request_context_getter_(main_context),
79 protocol_handler_interceptor_(protocol_handler_interceptor.Pass()) {} 102 protocol_handler_interceptor_(protocol_handler_interceptor.Pass()),
103 blob_protocol_handler_(blob_protocol_handler.Pass()),
104 file_system_protocol_handler_(file_system_protocol_handler.Pass()),
105 developer_protocol_handler_(developer_protocol_handler.Pass()) {}
80 106
81 virtual ChromeURLRequestContext* Create() OVERRIDE { 107 virtual ChromeURLRequestContext* Create() OVERRIDE {
82 // We will copy most of the state from the main request context. 108 // We will copy most of the state from the main request context.
83 // 109 //
84 // Note that this factory is one-shot. After Create() is called once, the 110 // Note that this factory is one-shot. After Create() is called once, the
85 // factory is actually destroyed. Thus it is safe to destructively pass 111 // factory is actually destroyed. Thus it is safe to destructively pass
86 // state onwards. 112 // state onwards.
87 return profile_io_data_->GetIsolatedAppRequestContext( 113 return profile_io_data_->GetIsolatedAppRequestContext(
88 main_request_context_getter_->GetIOContext(), partition_descriptor_, 114 main_request_context_getter_->GetIOContext(), partition_descriptor_,
89 protocol_handler_interceptor_.Pass()); 115 protocol_handler_interceptor_.Pass(), blob_protocol_handler_.Pass(),
116 file_system_protocol_handler_.Pass(),
117 developer_protocol_handler_.Pass());
90 } 118 }
91 119
92 private: 120 private:
93 const ProfileIOData* const profile_io_data_; 121 const ProfileIOData* const profile_io_data_;
94 const StoragePartitionDescriptor partition_descriptor_; 122 const StoragePartitionDescriptor partition_descriptor_;
95 scoped_refptr<ChromeURLRequestContextGetter> 123 scoped_refptr<ChromeURLRequestContextGetter>
96 main_request_context_getter_; 124 main_request_context_getter_;
97 scoped_ptr<net::URLRequestJobFactory::Interceptor> 125 scoped_ptr<net::URLRequestJobFactory::Interceptor>
98 protocol_handler_interceptor_; 126 protocol_handler_interceptor_;
127 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
128 blob_protocol_handler_;
129 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
130 file_system_protocol_handler_;
131 scoped_ptr<net::URLRequestJobFactory::Interceptor>
132 developer_protocol_handler_;
99 }; 133 };
100 134
101 // Factory that creates the media ChromeURLRequestContext for a given isolated 135 // Factory that creates the media ChromeURLRequestContext for a given isolated
102 // app. The media context is based on the corresponding isolated app's context. 136 // app. The media context is based on the corresponding isolated app's context.
103 class FactoryForIsolatedMedia : public ChromeURLRequestContextFactory { 137 class FactoryForIsolatedMedia : public ChromeURLRequestContextFactory {
104 public: 138 public:
105 FactoryForIsolatedMedia( 139 FactoryForIsolatedMedia(
106 const ProfileIOData* profile_io_data, 140 const ProfileIOData* profile_io_data,
107 const StoragePartitionDescriptor& partition_descriptor, 141 const StoragePartitionDescriptor& partition_descriptor,
108 ChromeURLRequestContextGetter* app_context) 142 ChromeURLRequestContextGetter* app_context)
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 } 208 }
175 209
176 scoped_refptr<base::SingleThreadTaskRunner> 210 scoped_refptr<base::SingleThreadTaskRunner>
177 ChromeURLRequestContextGetter::GetNetworkTaskRunner() const { 211 ChromeURLRequestContextGetter::GetNetworkTaskRunner() const {
178 return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); 212 return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
179 } 213 }
180 214
181 // static 215 // static
182 ChromeURLRequestContextGetter* ChromeURLRequestContextGetter::CreateOriginal( 216 ChromeURLRequestContextGetter* ChromeURLRequestContextGetter::CreateOriginal(
183 Profile* profile, 217 Profile* profile,
184 const ProfileIOData* profile_io_data) { 218 const ProfileIOData* profile_io_data,
219 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
220 blob_protocol_handler,
221 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
222 file_system_protocol_handler,
223 scoped_ptr<net::URLRequestJobFactory::Interceptor>
224 developer_protocol_handler) {
185 DCHECK(!profile->IsOffTheRecord()); 225 DCHECK(!profile->IsOffTheRecord());
186 return new ChromeURLRequestContextGetter( 226 return new ChromeURLRequestContextGetter(
187 new FactoryForMain(profile_io_data)); 227 new FactoryForMain(profile_io_data,
228 blob_protocol_handler.Pass(),
229 file_system_protocol_handler.Pass(),
230 developer_protocol_handler.Pass()));
188 } 231 }
189 232
190 // static 233 // static
191 ChromeURLRequestContextGetter* 234 ChromeURLRequestContextGetter*
192 ChromeURLRequestContextGetter::CreateOriginalForMedia( 235 ChromeURLRequestContextGetter::CreateOriginalForMedia(
193 Profile* profile, const ProfileIOData* profile_io_data) { 236 Profile* profile, const ProfileIOData* profile_io_data) {
194 DCHECK(!profile->IsOffTheRecord()); 237 DCHECK(!profile->IsOffTheRecord());
195 return new ChromeURLRequestContextGetter( 238 return new ChromeURLRequestContextGetter(
196 new FactoryForMedia(profile_io_data)); 239 new FactoryForMedia(profile_io_data));
197 } 240 }
198 241
199 // static 242 // static
200 ChromeURLRequestContextGetter* 243 ChromeURLRequestContextGetter*
201 ChromeURLRequestContextGetter::CreateOriginalForExtensions( 244 ChromeURLRequestContextGetter::CreateOriginalForExtensions(
202 Profile* profile, const ProfileIOData* profile_io_data) { 245 Profile* profile, const ProfileIOData* profile_io_data) {
203 DCHECK(!profile->IsOffTheRecord()); 246 DCHECK(!profile->IsOffTheRecord());
204 return new ChromeURLRequestContextGetter( 247 return new ChromeURLRequestContextGetter(
205 new FactoryForExtensions(profile_io_data)); 248 new FactoryForExtensions(profile_io_data));
206 } 249 }
207 250
208 // static 251 // static
209 ChromeURLRequestContextGetter* 252 ChromeURLRequestContextGetter*
210 ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp( 253 ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp(
211 Profile* profile, 254 Profile* profile,
212 const ProfileIOData* profile_io_data, 255 const ProfileIOData* profile_io_data,
213 const StoragePartitionDescriptor& partition_descriptor, 256 const StoragePartitionDescriptor& partition_descriptor,
214 scoped_ptr<net::URLRequestJobFactory::Interceptor> 257 scoped_ptr<net::URLRequestJobFactory::Interceptor>
215 protocol_handler_interceptor) { 258 protocol_handler_interceptor,
259 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
260 blob_protocol_handler,
261 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
262 file_system_protocol_handler,
263 scoped_ptr<net::URLRequestJobFactory::Interceptor>
264 developer_protocol_handler) {
216 DCHECK(!profile->IsOffTheRecord()); 265 DCHECK(!profile->IsOffTheRecord());
217 ChromeURLRequestContextGetter* main_context = 266 ChromeURLRequestContextGetter* main_context =
218 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext()); 267 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext());
219 return new ChromeURLRequestContextGetter( 268 return new ChromeURLRequestContextGetter(
220 new FactoryForIsolatedApp(profile_io_data, partition_descriptor, 269 new FactoryForIsolatedApp(profile_io_data, partition_descriptor,
221 main_context, protocol_handler_interceptor.Pass())); 270 main_context, protocol_handler_interceptor.Pass(),
271 blob_protocol_handler.Pass(), file_system_protocol_handler.Pass(),
272 developer_protocol_handler.Pass()));
222 } 273 }
223 274
224 // static 275 // static
225 ChromeURLRequestContextGetter* 276 ChromeURLRequestContextGetter*
226 ChromeURLRequestContextGetter::CreateOriginalForIsolatedMedia( 277 ChromeURLRequestContextGetter::CreateOriginalForIsolatedMedia(
227 Profile* profile, 278 Profile* profile,
228 ChromeURLRequestContextGetter* app_context, 279 ChromeURLRequestContextGetter* app_context,
229 const ProfileIOData* profile_io_data, 280 const ProfileIOData* profile_io_data,
230 const StoragePartitionDescriptor& partition_descriptor) { 281 const StoragePartitionDescriptor& partition_descriptor) {
231 DCHECK(!profile->IsOffTheRecord()); 282 DCHECK(!profile->IsOffTheRecord());
232 return new ChromeURLRequestContextGetter( 283 return new ChromeURLRequestContextGetter(
233 new FactoryForIsolatedMedia( 284 new FactoryForIsolatedMedia(
234 profile_io_data, partition_descriptor, app_context)); 285 profile_io_data, partition_descriptor, app_context));
235 } 286 }
236 287
237 // static 288 // static
238 ChromeURLRequestContextGetter* 289 ChromeURLRequestContextGetter*
239 ChromeURLRequestContextGetter::CreateOffTheRecord( 290 ChromeURLRequestContextGetter::CreateOffTheRecord(
240 Profile* profile, const ProfileIOData* profile_io_data) { 291 Profile* profile,
292 const ProfileIOData* profile_io_data,
293 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
294 blob_protocol_handler,
295 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
296 file_system_protocol_handler,
297 scoped_ptr<net::URLRequestJobFactory::Interceptor>
298 developer_protocol_handler) {
241 DCHECK(profile->IsOffTheRecord()); 299 DCHECK(profile->IsOffTheRecord());
242 return new ChromeURLRequestContextGetter( 300 return new ChromeURLRequestContextGetter(
243 new FactoryForMain(profile_io_data)); 301 new FactoryForMain(profile_io_data,
302 blob_protocol_handler.Pass(),
303 file_system_protocol_handler.Pass(),
304 developer_protocol_handler.Pass()));
244 } 305 }
245 306
246 // static 307 // static
247 ChromeURLRequestContextGetter* 308 ChromeURLRequestContextGetter*
248 ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions( 309 ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions(
249 Profile* profile, const ProfileIOData* profile_io_data) { 310 Profile* profile, const ProfileIOData* profile_io_data) {
250 DCHECK(profile->IsOffTheRecord()); 311 DCHECK(profile->IsOffTheRecord());
251 return new ChromeURLRequestContextGetter( 312 return new ChromeURLRequestContextGetter(
252 new FactoryForExtensions(profile_io_data)); 313 new FactoryForExtensions(profile_io_data));
253 } 314 }
254 315
255 // static 316 // static
256 ChromeURLRequestContextGetter* 317 ChromeURLRequestContextGetter*
257 ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp( 318 ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp(
258 Profile* profile, 319 Profile* profile,
259 const ProfileIOData* profile_io_data, 320 const ProfileIOData* profile_io_data,
260 const StoragePartitionDescriptor& partition_descriptor, 321 const StoragePartitionDescriptor& partition_descriptor,
261 scoped_ptr<net::URLRequestJobFactory::Interceptor> 322 scoped_ptr<net::URLRequestJobFactory::Interceptor>
262 protocol_handler_interceptor) { 323 protocol_handler_interceptor,
324 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
325 blob_protocol_handler,
326 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
327 file_system_protocol_handler,
328 scoped_ptr<net::URLRequestJobFactory::Interceptor>
329 developer_protocol_handler) {
263 DCHECK(profile->IsOffTheRecord()); 330 DCHECK(profile->IsOffTheRecord());
264 ChromeURLRequestContextGetter* main_context = 331 ChromeURLRequestContextGetter* main_context =
265 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext()); 332 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext());
266 return new ChromeURLRequestContextGetter( 333 return new ChromeURLRequestContextGetter(
267 new FactoryForIsolatedApp(profile_io_data, partition_descriptor, 334 new FactoryForIsolatedApp(profile_io_data, partition_descriptor,
268 main_context, protocol_handler_interceptor.Pass())); 335 main_context, protocol_handler_interceptor.Pass(),
336 blob_protocol_handler.Pass(), file_system_protocol_handler.Pass(),
337 developer_protocol_handler.Pass()));
269 } 338 }
270 339
271 // ---------------------------------------------------------------------------- 340 // ----------------------------------------------------------------------------
272 // ChromeURLRequestContext 341 // ChromeURLRequestContext
273 // ---------------------------------------------------------------------------- 342 // ----------------------------------------------------------------------------
274 343
275 ChromeURLRequestContext::ChromeURLRequestContext( 344 ChromeURLRequestContext::ChromeURLRequestContext(
276 ContextType type, 345 ContextType type,
277 chrome_browser_net::LoadTimeStats* load_time_stats) 346 chrome_browser_net::LoadTimeStats* load_time_stats)
278 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), 347 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
(...skipping 22 matching lines...) Expand all
301 ChromeURLDataManagerBackend* 370 ChromeURLDataManagerBackend*
302 ChromeURLRequestContext::chrome_url_data_manager_backend() const { 371 ChromeURLRequestContext::chrome_url_data_manager_backend() const {
303 return chrome_url_data_manager_backend_; 372 return chrome_url_data_manager_backend_;
304 } 373 }
305 374
306 void ChromeURLRequestContext::set_chrome_url_data_manager_backend( 375 void ChromeURLRequestContext::set_chrome_url_data_manager_backend(
307 ChromeURLDataManagerBackend* backend) { 376 ChromeURLDataManagerBackend* backend) {
308 DCHECK(backend); 377 DCHECK(backend);
309 chrome_url_data_manager_backend_ = backend; 378 chrome_url_data_manager_backend_ = backend;
310 } 379 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698