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

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

Issue 10969017: Create a new URLRequestJobFactory for isolated request contexts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix ordering Created 8 years, 3 months 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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 69
70 private: 70 private:
71 const ProfileIOData* const profile_io_data_; 71 const ProfileIOData* const profile_io_data_;
72 }; 72 };
73 73
74 // Factory that creates the ChromeURLRequestContext for a given isolated app. 74 // Factory that creates the ChromeURLRequestContext for a given isolated app.
75 class FactoryForIsolatedApp : public ChromeURLRequestContextFactory { 75 class FactoryForIsolatedApp : public ChromeURLRequestContextFactory {
76 public: 76 public:
77 FactoryForIsolatedApp(const ProfileIOData* profile_io_data, 77 FactoryForIsolatedApp(const ProfileIOData* profile_io_data,
78 const std::string& app_id, 78 const std::string& app_id,
79 ChromeURLRequestContextGetter* main_context) 79 ChromeURLRequestContextGetter* main_context,
80 scoped_ptr<net::URLRequestJobFactory::Interceptor>
81 protocol_handler_interceptor)
80 : profile_io_data_(profile_io_data), 82 : profile_io_data_(profile_io_data),
81 app_id_(app_id), 83 app_id_(app_id),
82 main_request_context_getter_(main_context) {} 84 main_request_context_getter_(main_context),
85 protocol_handler_interceptor_(protocol_handler_interceptor.Pass()) {}
83 86
84 virtual ChromeURLRequestContext* Create() OVERRIDE { 87 virtual ChromeURLRequestContext* Create() OVERRIDE {
85 // We will copy most of the state from the main request context. 88 // We will copy most of the state from the main request context.
89 //
90 // Note that this factory is one-shot. After Create() is called once, the
91 // factory is actually destroyed. Thus it is safe to destructively pass
92 // state onwards.
86 return profile_io_data_->GetIsolatedAppRequestContext( 93 return profile_io_data_->GetIsolatedAppRequestContext(
87 main_request_context_getter_->GetIOContext(), app_id_); 94 main_request_context_getter_->GetIOContext(), app_id_,
95 protocol_handler_interceptor_.Pass());
88 } 96 }
89 97
90 private: 98 private:
91 const ProfileIOData* const profile_io_data_; 99 const ProfileIOData* const profile_io_data_;
92 const std::string app_id_; 100 const std::string app_id_;
93 scoped_refptr<ChromeURLRequestContextGetter> 101 scoped_refptr<ChromeURLRequestContextGetter>
94 main_request_context_getter_; 102 main_request_context_getter_;
103 scoped_ptr<net::URLRequestJobFactory::Interceptor>
104 protocol_handler_interceptor_;
95 }; 105 };
96 106
97 // Factory that creates the media ChromeURLRequestContext for a given isolated 107 // Factory that creates the media ChromeURLRequestContext for a given isolated
98 // app. The media context is based on the corresponding isolated app's context. 108 // app. The media context is based on the corresponding isolated app's context.
99 // Takes the |main_context| for the profile so that it can find or create the
100 // isolated app's context if necessary.
101 class FactoryForIsolatedMedia : public ChromeURLRequestContextFactory { 109 class FactoryForIsolatedMedia : public ChromeURLRequestContextFactory {
102 public: 110 public:
103 FactoryForIsolatedMedia(const ProfileIOData* profile_io_data, 111 FactoryForIsolatedMedia(const ProfileIOData* profile_io_data,
104 const std::string& app_id, 112 const std::string& app_id,
105 ChromeURLRequestContextGetter* main_context) 113 ChromeURLRequestContextGetter* app_context)
106 : profile_io_data_(profile_io_data), 114 : profile_io_data_(profile_io_data),
107 app_id_(app_id), 115 app_id_(app_id),
108 main_request_context_getter_(main_context) {} 116 app_context_getter_(app_context) {}
109 117
110 virtual ChromeURLRequestContext* Create() OVERRIDE { 118 virtual ChromeURLRequestContext* Create() OVERRIDE {
111 // We will copy most of the state from the corresopnding app's 119 // We will copy most of the state from the corresopnding app's
112 // request context, which we obtain using the main context. 120 // request context. We expect to have the same lifetime as
121 // the associated |app_context_getter_| so we can just reuse
122 // all its backing objects, including the
123 // |protocol_handler_interceptor|. This is why the API
124 // looks different from FactoryForIsolatedApp's.
113 return profile_io_data_->GetIsolatedMediaRequestContext( 125 return profile_io_data_->GetIsolatedMediaRequestContext(
114 main_request_context_getter_->GetIOContext(), app_id_); 126 app_context_getter_->GetIOContext(), app_id_);
115 } 127 }
116 128
117 private: 129 private:
118 const ProfileIOData* const profile_io_data_; 130 const ProfileIOData* const profile_io_data_;
119 const std::string app_id_; 131 const std::string app_id_;
120 scoped_refptr<ChromeURLRequestContextGetter> 132 scoped_refptr<ChromeURLRequestContextGetter> app_context_getter_;
121 main_request_context_getter_;
122 }; 133 };
123 134
124 // Factory that creates the ChromeURLRequestContext for media. 135 // Factory that creates the ChromeURLRequestContext for media.
125 class FactoryForMedia : public ChromeURLRequestContextFactory { 136 class FactoryForMedia : public ChromeURLRequestContextFactory {
126 public: 137 public:
127 explicit FactoryForMedia(const ProfileIOData* profile_io_data) 138 explicit FactoryForMedia(const ProfileIOData* profile_io_data)
128 : profile_io_data_(profile_io_data) { 139 : profile_io_data_(profile_io_data) {
129 } 140 }
130 141
131 virtual ChromeURLRequestContext* Create() OVERRIDE { 142 virtual ChromeURLRequestContext* Create() OVERRIDE {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 return new ChromeURLRequestContextGetter( 218 return new ChromeURLRequestContextGetter(
208 profile, 219 profile,
209 new FactoryForExtensions(profile_io_data)); 220 new FactoryForExtensions(profile_io_data));
210 } 221 }
211 222
212 // static 223 // static
213 ChromeURLRequestContextGetter* 224 ChromeURLRequestContextGetter*
214 ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp( 225 ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp(
215 Profile* profile, 226 Profile* profile,
216 const ProfileIOData* profile_io_data, 227 const ProfileIOData* profile_io_data,
217 const std::string& app_id) { 228 const std::string& app_id,
229 scoped_ptr<net::URLRequestJobFactory::Interceptor>
230 protocol_handler_interceptor) {
218 DCHECK(!profile->IsOffTheRecord()); 231 DCHECK(!profile->IsOffTheRecord());
219 ChromeURLRequestContextGetter* main_context = 232 ChromeURLRequestContextGetter* main_context =
220 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext()); 233 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext());
221 return new ChromeURLRequestContextGetter( 234 return new ChromeURLRequestContextGetter(
222 profile, 235 profile,
223 new FactoryForIsolatedApp(profile_io_data, app_id, main_context)); 236 new FactoryForIsolatedApp(profile_io_data, app_id, main_context,
237 protocol_handler_interceptor.Pass()));
224 } 238 }
225 239
226 // static 240 // static
227 ChromeURLRequestContextGetter* 241 ChromeURLRequestContextGetter*
228 ChromeURLRequestContextGetter::CreateOriginalForIsolatedMedia( 242 ChromeURLRequestContextGetter::CreateOriginalForIsolatedMedia(
229 Profile* profile, 243 Profile* profile,
244 ChromeURLRequestContextGetter* app_context,
230 const ProfileIOData* profile_io_data, 245 const ProfileIOData* profile_io_data,
231 const std::string& app_id) { 246 const std::string& app_id) {
232 DCHECK(!profile->IsOffTheRecord()); 247 DCHECK(!profile->IsOffTheRecord());
233 ChromeURLRequestContextGetter* main_context =
234 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext());
235 return new ChromeURLRequestContextGetter( 248 return new ChromeURLRequestContextGetter(
236 profile, 249 profile,
237 new FactoryForIsolatedMedia(profile_io_data, app_id, main_context)); 250 new FactoryForIsolatedMedia(profile_io_data, app_id, app_context));
238 } 251 }
239 252
240 // static 253 // static
241 ChromeURLRequestContextGetter* 254 ChromeURLRequestContextGetter*
242 ChromeURLRequestContextGetter::CreateOffTheRecord( 255 ChromeURLRequestContextGetter::CreateOffTheRecord(
243 Profile* profile, const ProfileIOData* profile_io_data) { 256 Profile* profile, const ProfileIOData* profile_io_data) {
244 DCHECK(profile->IsOffTheRecord()); 257 DCHECK(profile->IsOffTheRecord());
245 return new ChromeURLRequestContextGetter( 258 return new ChromeURLRequestContextGetter(
246 profile, new FactoryForMain(profile_io_data)); 259 profile, new FactoryForMain(profile_io_data));
247 } 260 }
248 261
249 // static 262 // static
250 ChromeURLRequestContextGetter* 263 ChromeURLRequestContextGetter*
251 ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions( 264 ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions(
252 Profile* profile, const ProfileIOData* profile_io_data) { 265 Profile* profile, const ProfileIOData* profile_io_data) {
253 DCHECK(profile->IsOffTheRecord()); 266 DCHECK(profile->IsOffTheRecord());
254 return new ChromeURLRequestContextGetter( 267 return new ChromeURLRequestContextGetter(
255 profile, new FactoryForExtensions(profile_io_data)); 268 profile, new FactoryForExtensions(profile_io_data));
256 } 269 }
257 270
258 // static 271 // static
259 ChromeURLRequestContextGetter* 272 ChromeURLRequestContextGetter*
260 ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp( 273 ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp(
261 Profile* profile, 274 Profile* profile,
262 const ProfileIOData* profile_io_data, 275 const ProfileIOData* profile_io_data,
263 const std::string& app_id) { 276 const std::string& app_id,
277 scoped_ptr<net::URLRequestJobFactory::Interceptor>
278 protocol_handler_interceptor) {
264 DCHECK(profile->IsOffTheRecord()); 279 DCHECK(profile->IsOffTheRecord());
265 ChromeURLRequestContextGetter* main_context = 280 ChromeURLRequestContextGetter* main_context =
266 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext()); 281 static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext());
267 return new ChromeURLRequestContextGetter( 282 return new ChromeURLRequestContextGetter(
268 profile, 283 profile,
269 new FactoryForIsolatedApp(profile_io_data, app_id, main_context)); 284 new FactoryForIsolatedApp(profile_io_data, app_id, main_context,
285 protocol_handler_interceptor.Pass()));
270 } 286 }
271 287
272 void ChromeURLRequestContextGetter::CleanupOnUIThread() { 288 void ChromeURLRequestContextGetter::CleanupOnUIThread() {
273 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
274 // Unregister for pref notifications. 290 // Unregister for pref notifications.
275 DCHECK(!registrar_.IsEmpty()) << "Called more than once!"; 291 DCHECK(!registrar_.IsEmpty()) << "Called more than once!";
276 registrar_.RemoveAll(); 292 registrar_.RemoveAll();
277 } 293 }
278 294
279 // content::NotificationObserver implementation. 295 // content::NotificationObserver implementation.
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 net::HttpUtil::GenerateAcceptLanguageHeader(accept_language)); 396 net::HttpUtil::GenerateAcceptLanguageHeader(accept_language));
381 } 397 }
382 398
383 void ChromeURLRequestContext::OnDefaultCharsetChange( 399 void ChromeURLRequestContext::OnDefaultCharsetChange(
384 const std::string& default_charset) { 400 const std::string& default_charset) {
385 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 401 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
386 set_referrer_charset(default_charset); 402 set_referrer_charset(default_charset);
387 set_accept_charset( 403 set_accept_charset(
388 net::HttpUtil::GenerateAcceptCharsetHeader(default_charset)); 404 net::HttpUtil::GenerateAcceptCharsetHeader(default_charset));
389 } 405 }
OLDNEW
« no previous file with comments | « chrome/browser/net/chrome_url_request_context.h ('k') | chrome/browser/profiles/off_the_record_profile_io_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698