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

Side by Side Diff: chrome/browser/profiles/profile_impl_io_data.cc

Issue 10836305: Ensure that isolated apps use the right cookies for media requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix merge conflict. Created 8 years, 4 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/profiles/profile_impl_io_data.h" 5 #include "chrome/browser/profiles/profile_impl_io_data.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 } 65 }
66 66
67 // Clean up all isolated app request contexts. 67 // Clean up all isolated app request contexts.
68 for (ChromeURLRequestContextGetterMap::iterator iter = 68 for (ChromeURLRequestContextGetterMap::iterator iter =
69 app_request_context_getter_map_.begin(); 69 app_request_context_getter_map_.begin();
70 iter != app_request_context_getter_map_.end(); 70 iter != app_request_context_getter_map_.end();
71 ++iter) { 71 ++iter) {
72 iter->second->CleanupOnUIThread(); 72 iter->second->CleanupOnUIThread();
73 } 73 }
74 74
75 // Clean up all isolated media request contexts.
76 for (ChromeURLRequestContextGetterMap::iterator iter =
77 isolated_media_request_context_getter_map_.begin();
78 iter != isolated_media_request_context_getter_map_.end();
79 ++iter) {
80 iter->second->CleanupOnUIThread();
81 }
82
75 if (io_data_->http_server_properties_manager()) 83 if (io_data_->http_server_properties_manager())
76 io_data_->http_server_properties_manager()->ShutdownOnUIThread(); 84 io_data_->http_server_properties_manager()->ShutdownOnUIThread();
77 io_data_->ShutdownOnUIThread(); 85 io_data_->ShutdownOnUIThread();
78 } 86 }
79 87
80 void ProfileImplIOData::Handle::Init( 88 void ProfileImplIOData::Handle::Init(
81 const FilePath& cookie_path, 89 const FilePath& cookie_path,
82 const FilePath& server_bound_cert_path, 90 const FilePath& server_bound_cert_path,
83 const FilePath& cache_path, 91 const FilePath& cache_path,
84 int cache_max_size, 92 int cache_max_size,
(...skipping 17 matching lines...) Expand all
102 lazy_params->cache_path = cache_path; 110 lazy_params->cache_path = cache_path;
103 lazy_params->cache_max_size = cache_max_size; 111 lazy_params->cache_max_size = cache_max_size;
104 lazy_params->media_cache_path = media_cache_path; 112 lazy_params->media_cache_path = media_cache_path;
105 lazy_params->media_cache_max_size = media_cache_max_size; 113 lazy_params->media_cache_max_size = media_cache_max_size;
106 lazy_params->extensions_cookie_path = extensions_cookie_path; 114 lazy_params->extensions_cookie_path = extensions_cookie_path;
107 lazy_params->restore_old_session_cookies = restore_old_session_cookies; 115 lazy_params->restore_old_session_cookies = restore_old_session_cookies;
108 lazy_params->special_storage_policy = special_storage_policy; 116 lazy_params->special_storage_policy = special_storage_policy;
109 117
110 io_data_->lazy_params_.reset(lazy_params); 118 io_data_->lazy_params_.reset(lazy_params);
111 119
112 // Keep track of isolated app path separately so we can use it on demand. 120 // Keep track of isolated app path and cache sizes separately so we can use
121 // them on demand.
113 io_data_->app_path_ = app_path; 122 io_data_->app_path_ = app_path;
123 io_data_->app_cache_max_size_ = cache_max_size;
124 io_data_->app_media_cache_max_size_ = media_cache_max_size;
114 125
115 io_data_->predictor_.reset(predictor); 126 io_data_->predictor_.reset(predictor);
116 127
117 if (!main_request_context_getter_) { 128 if (!main_request_context_getter_) {
118 main_request_context_getter_ = 129 main_request_context_getter_ =
119 ChromeURLRequestContextGetter::CreateOriginal( 130 ChromeURLRequestContextGetter::CreateOriginal(
120 profile_, io_data_); 131 profile_, io_data_);
121 } 132 }
122 io_data_->predictor_->InitNetworkPredictor(profile_->GetPrefs(), 133 io_data_->predictor_->InitNetworkPredictor(profile_->GetPrefs(),
123 local_state, 134 local_state,
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 ChromeURLRequestContextGetter::CreateOriginalForExtensions( 200 ChromeURLRequestContextGetter::CreateOriginalForExtensions(
190 profile_, io_data_); 201 profile_, io_data_);
191 } 202 }
192 return extensions_request_context_getter_; 203 return extensions_request_context_getter_;
193 } 204 }
194 205
195 scoped_refptr<ChromeURLRequestContextGetter> 206 scoped_refptr<ChromeURLRequestContextGetter>
196 ProfileImplIOData::Handle::GetIsolatedAppRequestContextGetter( 207 ProfileImplIOData::Handle::GetIsolatedAppRequestContextGetter(
197 const std::string& app_id) const { 208 const std::string& app_id) const {
198 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 209 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
199 DCHECK(!app_id.empty()); 210 CHECK(!app_id.empty());
200 LazyInitialize(); 211 LazyInitialize();
201 212
202 // Keep a map of request context getters, one per requested app ID. 213 // Keep a map of request context getters, one per requested app ID.
203 ChromeURLRequestContextGetterMap::iterator iter = 214 ChromeURLRequestContextGetterMap::iterator iter =
204 app_request_context_getter_map_.find(app_id); 215 app_request_context_getter_map_.find(app_id);
205 if (iter != app_request_context_getter_map_.end()) 216 if (iter != app_request_context_getter_map_.end())
206 return iter->second; 217 return iter->second;
207 218
208 ChromeURLRequestContextGetter* context = 219 ChromeURLRequestContextGetter* context =
209 ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp( 220 ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp(
210 profile_, io_data_, app_id); 221 profile_, io_data_, app_id);
211 app_request_context_getter_map_[app_id] = context; 222 app_request_context_getter_map_[app_id] = context;
212 223
213 return context; 224 return context;
214 } 225 }
215 226
227 scoped_refptr<ChromeURLRequestContextGetter>
228 ProfileImplIOData::Handle::GetIsolatedMediaRequestContextGetter(
229 const std::string& app_id) const {
230 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
231 // We must have an app ID, or this will act like the default media context.
232 CHECK(!app_id.empty());
233 LazyInitialize();
234
235 // Keep a map of request context getters, one per requested app ID.
236 ChromeURLRequestContextGetterMap::iterator iter =
237 isolated_media_request_context_getter_map_.find(app_id);
238 if (iter != isolated_media_request_context_getter_map_.end())
239 return iter->second;
240
241 ChromeURLRequestContextGetter* context =
242 ChromeURLRequestContextGetter::CreateOriginalForIsolatedMedia(
243 profile_, io_data_, app_id);
244 isolated_media_request_context_getter_map_[app_id] = context;
245
246 return context;
247 }
248
216 void ProfileImplIOData::Handle::ClearNetworkingHistorySince( 249 void ProfileImplIOData::Handle::ClearNetworkingHistorySince(
217 base::Time time) { 250 base::Time time) {
218 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 251 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
219 LazyInitialize(); 252 LazyInitialize();
220 253
221 BrowserThread::PostTask( 254 BrowserThread::PostTask(
222 BrowserThread::IO, FROM_HERE, 255 BrowserThread::IO, FROM_HERE,
223 base::Bind( 256 base::Bind(
224 &ProfileImplIOData::ClearNetworkingHistorySinceOnIOThread, 257 &ProfileImplIOData::ClearNetworkingHistorySinceOnIOThread,
225 base::Unretained(io_data_), 258 base::Unretained(io_data_),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 DestroyResourceContext(); 295 DestroyResourceContext();
263 296
264 if (media_request_context_.get()) 297 if (media_request_context_.get())
265 media_request_context_->AssertNoURLRequests(); 298 media_request_context_->AssertNoURLRequests();
266 } 299 }
267 300
268 void ProfileImplIOData::LazyInitializeInternal( 301 void ProfileImplIOData::LazyInitializeInternal(
269 ProfileParams* profile_params) const { 302 ProfileParams* profile_params) const {
270 ChromeURLRequestContext* main_context = main_request_context(); 303 ChromeURLRequestContext* main_context = main_request_context();
271 ChromeURLRequestContext* extensions_context = extensions_request_context(); 304 ChromeURLRequestContext* extensions_context = extensions_request_context();
272 media_request_context_.reset(new ChromeURLRequestContext(
273 ChromeURLRequestContext::CONTEXT_TYPE_MEDIA, load_time_stats()));
274 305
275 IOThread* const io_thread = profile_params->io_thread; 306 IOThread* const io_thread = profile_params->io_thread;
276 IOThread::Globals* const io_thread_globals = io_thread->globals(); 307 IOThread::Globals* const io_thread_globals = io_thread->globals();
277 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 308 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
278 // Only allow Record Mode if we are in a Debug build or where we are running 309 // Only allow Record Mode if we are in a Debug build or where we are running
279 // a cycle, and the user has limited control. 310 // a cycle, and the user has limited control.
280 bool record_mode = command_line.HasSwitch(switches::kRecordMode) && 311 bool record_mode = command_line.HasSwitch(switches::kRecordMode) &&
281 (chrome::kRecordModeEnabled || 312 (chrome::kRecordModeEnabled ||
282 command_line.HasSwitch(switches::kVisitURLs)); 313 command_line.HasSwitch(switches::kVisitURLs));
283 bool playback_mode = command_line.HasSwitch(switches::kPlaybackMode); 314 bool playback_mode = command_line.HasSwitch(switches::kPlaybackMode);
284 315
285 // Initialize context members. 316 // Initialize context members.
286 317
287 ApplyProfileParamsToContext(main_context); 318 ApplyProfileParamsToContext(main_context);
288 ApplyProfileParamsToContext(media_request_context_.get());
289 ApplyProfileParamsToContext(extensions_context); 319 ApplyProfileParamsToContext(extensions_context);
290 320
291 if (http_server_properties_manager()) 321 if (http_server_properties_manager())
292 http_server_properties_manager()->InitializeOnIOThread(); 322 http_server_properties_manager()->InitializeOnIOThread();
293 323
294 main_context->set_transport_security_state(transport_security_state()); 324 main_context->set_transport_security_state(transport_security_state());
295 media_request_context_->set_transport_security_state(
296 transport_security_state());
297 extensions_context->set_transport_security_state(transport_security_state()); 325 extensions_context->set_transport_security_state(transport_security_state());
298 326
299 main_context->set_net_log(io_thread->net_log()); 327 main_context->set_net_log(io_thread->net_log());
300 media_request_context_->set_net_log(io_thread->net_log());
301 extensions_context->set_net_log(io_thread->net_log()); 328 extensions_context->set_net_log(io_thread->net_log());
302 329
303 main_context->set_network_delegate(network_delegate()); 330 main_context->set_network_delegate(network_delegate());
304 media_request_context_->set_network_delegate(network_delegate());
305 331
306 main_context->set_http_server_properties(http_server_properties_manager()); 332 main_context->set_http_server_properties(http_server_properties_manager());
307 media_request_context_->set_http_server_properties(
308 http_server_properties_manager());
309 333
310 main_context->set_host_resolver( 334 main_context->set_host_resolver(
311 io_thread_globals->host_resolver.get()); 335 io_thread_globals->host_resolver.get());
312 media_request_context_->set_host_resolver(
313 io_thread_globals->host_resolver.get());
314 main_context->set_cert_verifier( 336 main_context->set_cert_verifier(
315 io_thread_globals->cert_verifier.get()); 337 io_thread_globals->cert_verifier.get());
316 media_request_context_->set_cert_verifier(
317 io_thread_globals->cert_verifier.get());
318 main_context->set_http_auth_handler_factory( 338 main_context->set_http_auth_handler_factory(
319 io_thread_globals->http_auth_handler_factory.get()); 339 io_thread_globals->http_auth_handler_factory.get());
320 media_request_context_->set_http_auth_handler_factory(
321 io_thread_globals->http_auth_handler_factory.get());
322 340
323 main_context->set_fraudulent_certificate_reporter( 341 main_context->set_fraudulent_certificate_reporter(
324 fraudulent_certificate_reporter()); 342 fraudulent_certificate_reporter());
325 media_request_context_->set_fraudulent_certificate_reporter(
326 fraudulent_certificate_reporter());
327 343
328 main_context->set_throttler_manager( 344 main_context->set_throttler_manager(
329 io_thread_globals->throttler_manager.get()); 345 io_thread_globals->throttler_manager.get());
330 media_request_context_->set_throttler_manager(
331 io_thread_globals->throttler_manager.get());
332 extensions_context->set_throttler_manager( 346 extensions_context->set_throttler_manager(
333 io_thread_globals->throttler_manager.get()); 347 io_thread_globals->throttler_manager.get());
334 348
335 main_context->set_proxy_service(proxy_service()); 349 main_context->set_proxy_service(proxy_service());
336 media_request_context_->set_proxy_service(proxy_service());
337 350
338 scoped_refptr<net::CookieStore> cookie_store = NULL; 351 scoped_refptr<net::CookieStore> cookie_store = NULL;
339 net::ServerBoundCertService* server_bound_cert_service = NULL; 352 net::ServerBoundCertService* server_bound_cert_service = NULL;
340 if (record_mode || playback_mode) { 353 if (record_mode || playback_mode) {
341 // Don't use existing cookies and use an in-memory store. 354 // Don't use existing cookies and use an in-memory store.
342 cookie_store = new net::CookieMonster( 355 cookie_store = new net::CookieMonster(
343 NULL, profile_params->cookie_monster_delegate); 356 NULL, profile_params->cookie_monster_delegate);
344 // Don't use existing server-bound certs and use an in-memory store. 357 // Don't use existing server-bound certs and use an in-memory store.
345 server_bound_cert_service = new net::ServerBoundCertService( 358 server_bound_cert_service = new net::ServerBoundCertService(
346 new net::DefaultServerBoundCertStore(NULL), 359 new net::DefaultServerBoundCertStore(NULL),
(...skipping 19 matching lines...) Expand all
366 new net::CookieMonster( 379 new net::CookieMonster(
367 new SQLitePersistentCookieStore( 380 new SQLitePersistentCookieStore(
368 lazy_params_->extensions_cookie_path, 381 lazy_params_->extensions_cookie_path,
369 lazy_params_->restore_old_session_cookies, NULL), NULL); 382 lazy_params_->restore_old_session_cookies, NULL), NULL);
370 // Enable cookies for devtools and extension URLs. 383 // Enable cookies for devtools and extension URLs.
371 const char* schemes[] = {chrome::kChromeDevToolsScheme, 384 const char* schemes[] = {chrome::kChromeDevToolsScheme,
372 chrome::kExtensionScheme}; 385 chrome::kExtensionScheme};
373 extensions_cookie_store->SetCookieableSchemes(schemes, 2); 386 extensions_cookie_store->SetCookieableSchemes(schemes, 2);
374 387
375 main_context->set_cookie_store(cookie_store); 388 main_context->set_cookie_store(cookie_store);
376 media_request_context_->set_cookie_store(cookie_store);
377 extensions_context->set_cookie_store(extensions_cookie_store); 389 extensions_context->set_cookie_store(extensions_cookie_store);
378 390
379 // Setup server bound cert service. 391 // Setup server bound cert service.
380 if (!server_bound_cert_service) { 392 if (!server_bound_cert_service) {
381 DCHECK(!lazy_params_->server_bound_cert_path.empty()); 393 DCHECK(!lazy_params_->server_bound_cert_path.empty());
382 394
383 scoped_refptr<SQLiteServerBoundCertStore> server_bound_cert_db = 395 scoped_refptr<SQLiteServerBoundCertStore> server_bound_cert_db =
384 new SQLiteServerBoundCertStore( 396 new SQLiteServerBoundCertStore(
385 lazy_params_->server_bound_cert_path, 397 lazy_params_->server_bound_cert_path,
386 new ClearOnExitPolicy(lazy_params_->special_storage_policy)); 398 new ClearOnExitPolicy(lazy_params_->special_storage_policy));
387 server_bound_cert_service = new net::ServerBoundCertService( 399 server_bound_cert_service = new net::ServerBoundCertService(
388 new net::DefaultServerBoundCertStore(server_bound_cert_db.get()), 400 new net::DefaultServerBoundCertStore(server_bound_cert_db.get()),
389 base::WorkerPool::GetTaskRunner(true)); 401 base::WorkerPool::GetTaskRunner(true));
390 } 402 }
391 403
392 set_server_bound_cert_service(server_bound_cert_service); 404 set_server_bound_cert_service(server_bound_cert_service);
393 main_context->set_server_bound_cert_service(server_bound_cert_service); 405 main_context->set_server_bound_cert_service(server_bound_cert_service);
394 media_request_context_->set_server_bound_cert_service(
395 server_bound_cert_service);
396 406
397 std::string trusted_spdy_proxy; 407 std::string trusted_spdy_proxy;
398 if (command_line.HasSwitch(switches::kTrustedSpdyProxy)) { 408 if (command_line.HasSwitch(switches::kTrustedSpdyProxy)) {
399 trusted_spdy_proxy = command_line.GetSwitchValueASCII( 409 trusted_spdy_proxy = command_line.GetSwitchValueASCII(
400 switches::kTrustedSpdyProxy); 410 switches::kTrustedSpdyProxy);
401 } 411 }
402 net::HttpCache::DefaultBackend* main_backend = 412 net::HttpCache::DefaultBackend* main_backend =
403 new net::HttpCache::DefaultBackend( 413 new net::HttpCache::DefaultBackend(
404 net::DISK_CACHE, 414 net::DISK_CACHE,
405 lazy_params_->cache_path, 415 lazy_params_->cache_path,
406 lazy_params_->cache_max_size, 416 lazy_params_->cache_max_size,
407 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); 417 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE));
408 net::HttpCache* main_cache = new net::HttpCache( 418 net::HttpCache* main_cache = new net::HttpCache(
409 main_context->host_resolver(), 419 main_context->host_resolver(),
410 main_context->cert_verifier(), 420 main_context->cert_verifier(),
411 main_context->server_bound_cert_service(), 421 main_context->server_bound_cert_service(),
412 main_context->transport_security_state(), 422 main_context->transport_security_state(),
413 main_context->proxy_service(), 423 main_context->proxy_service(),
414 GetSSLSessionCacheShard(), 424 GetSSLSessionCacheShard(),
415 main_context->ssl_config_service(), 425 main_context->ssl_config_service(),
416 main_context->http_auth_handler_factory(), 426 main_context->http_auth_handler_factory(),
417 main_context->network_delegate(), 427 main_context->network_delegate(),
418 main_context->http_server_properties(), 428 main_context->http_server_properties(),
419 main_context->net_log(), 429 main_context->net_log(),
420 main_backend, 430 main_backend,
421 trusted_spdy_proxy); 431 trusted_spdy_proxy);
422 432
423 net::HttpCache::DefaultBackend* media_backend =
424 new net::HttpCache::DefaultBackend(
425 net::MEDIA_CACHE, lazy_params_->media_cache_path,
426 lazy_params_->media_cache_max_size,
427 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE));
428 net::HttpNetworkSession* main_network_session = main_cache->GetSession();
429 net::HttpCache* media_cache =
430 new net::HttpCache(main_network_session, media_backend);
431
432 if (record_mode || playback_mode) { 433 if (record_mode || playback_mode) {
433 main_cache->set_mode( 434 main_cache->set_mode(
434 record_mode ? net::HttpCache::RECORD : net::HttpCache::PLAYBACK); 435 record_mode ? net::HttpCache::RECORD : net::HttpCache::PLAYBACK);
435 } 436 }
436 437
437 main_http_factory_.reset(main_cache); 438 main_http_factory_.reset(main_cache);
438 media_http_factory_.reset(media_cache);
439 main_context->set_http_transaction_factory(main_cache); 439 main_context->set_http_transaction_factory(main_cache);
440 media_request_context_->set_http_transaction_factory(media_cache);
441 440
442 ftp_factory_.reset( 441 ftp_factory_.reset(
443 new net::FtpNetworkLayer(io_thread_globals->host_resolver.get())); 442 new net::FtpNetworkLayer(io_thread_globals->host_resolver.get()));
444 main_context->set_ftp_transaction_factory(ftp_factory_.get()); 443 main_context->set_ftp_transaction_factory(ftp_factory_.get());
445 media_request_context_->set_ftp_transaction_factory(ftp_factory_.get());
446 444
447 main_context->set_chrome_url_data_manager_backend( 445 main_context->set_chrome_url_data_manager_backend(
448 chrome_url_data_manager_backend()); 446 chrome_url_data_manager_backend());
449 447
448 // Create a media request context based on the main context, but using a
449 // media cache.
450 media_request_context_.reset(InitializeMediaRequestContext(main_context, ""));
451
450 main_job_factory_.reset(new net::URLRequestJobFactory); 452 main_job_factory_.reset(new net::URLRequestJobFactory);
451 media_request_job_factory_.reset(new net::URLRequestJobFactory); 453 media_request_job_factory_.reset(new net::URLRequestJobFactory);
452 extensions_job_factory_.reset(new net::URLRequestJobFactory); 454 extensions_job_factory_.reset(new net::URLRequestJobFactory);
453 455
454 int set_protocol = main_job_factory_->SetProtocolHandler( 456 int set_protocol = main_job_factory_->SetProtocolHandler(
455 chrome::kFileScheme, new net::FileProtocolHandler(network_delegate())); 457 chrome::kFileScheme, new net::FileProtocolHandler(network_delegate()));
456 DCHECK(set_protocol); 458 DCHECK(set_protocol);
457 set_protocol = media_request_job_factory_->SetProtocolHandler( 459 set_protocol = media_request_job_factory_->SetProtocolHandler(
458 chrome::kFileScheme, new net::FileProtocolHandler(network_delegate())); 460 chrome::kFileScheme, new net::FileProtocolHandler(network_delegate()));
459 DCHECK(set_protocol); 461 DCHECK(set_protocol);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 media_request_context_->set_job_factory(media_request_job_factory_.get()); 503 media_request_context_->set_job_factory(media_request_job_factory_.get());
502 extensions_context->set_job_factory(extensions_job_factory_.get()); 504 extensions_context->set_job_factory(extensions_job_factory_.get());
503 505
504 lazy_params_.reset(); 506 lazy_params_.reset();
505 } 507 }
506 508
507 ChromeURLRequestContext* 509 ChromeURLRequestContext*
508 ProfileImplIOData::InitializeAppRequestContext( 510 ProfileImplIOData::InitializeAppRequestContext(
509 ChromeURLRequestContext* main_context, 511 ChromeURLRequestContext* main_context,
510 const std::string& app_id) const { 512 const std::string& app_id) const {
511 AppRequestContext* context = new AppRequestContext(load_time_stats());
512
513 // If this is for a guest process, we should not persist cookies and http 513 // If this is for a guest process, we should not persist cookies and http
514 // cache. 514 // cache.
515 bool guest_process = (app_id.find("guest-") != std::string::npos); 515 bool is_guest_process = (app_id.find("guest-") != std::string::npos);
516 516
517 // Copy most state from the main context. 517 // Copy most state from the main context.
518 AppRequestContext* context = new AppRequestContext(load_time_stats());
518 context->CopyFrom(main_context); 519 context->CopyFrom(main_context);
519 520
520 FilePath app_path = app_path_.AppendASCII(app_id); 521 FilePath app_path = app_path_.AppendASCII(app_id);
521 FilePath cookie_path = app_path.Append(chrome::kCookieFilename); 522 FilePath cookie_path = app_path.Append(chrome::kCookieFilename);
522 FilePath cache_path = app_path.Append(chrome::kCacheDirname); 523 FilePath cache_path = app_path.Append(chrome::kCacheDirname);
523 // TODO(creis): Determine correct cache size.
524 int cache_max_size = 0;
525 524
526 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 525 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
527 // Only allow Record Mode if we are in a Debug build or where we are running 526 // Only allow Record Mode if we are in a Debug build or where we are running
528 // a cycle, and the user has limited control. 527 // a cycle, and the user has limited control.
529 bool record_mode = command_line.HasSwitch(switches::kRecordMode) && 528 bool record_mode = command_line.HasSwitch(switches::kRecordMode) &&
530 (chrome::kRecordModeEnabled || 529 (chrome::kRecordModeEnabled ||
531 command_line.HasSwitch(switches::kVisitURLs)); 530 command_line.HasSwitch(switches::kVisitURLs));
532 bool playback_mode = command_line.HasSwitch(switches::kPlaybackMode); 531 bool playback_mode = command_line.HasSwitch(switches::kPlaybackMode);
533 532
534 // Use a separate HTTP disk cache for isolated apps. 533 // Use a separate HTTP disk cache for isolated apps.
535 net::HttpCache::BackendFactory* app_backend = NULL; 534 net::HttpCache::BackendFactory* app_backend = NULL;
536 if (guest_process) { 535 if (is_guest_process) {
537 app_backend = net::HttpCache::DefaultBackend::InMemory(0); 536 app_backend = net::HttpCache::DefaultBackend::InMemory(0);
538 } else { 537 } else {
539 app_backend = new net::HttpCache::DefaultBackend( 538 app_backend = new net::HttpCache::DefaultBackend(
540 net::DISK_CACHE, 539 net::DISK_CACHE,
541 cache_path, 540 cache_path,
542 cache_max_size, 541 app_cache_max_size_,
543 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); 542 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE));
544 } 543 }
545 net::HttpNetworkSession* main_network_session = 544 net::HttpNetworkSession* main_network_session =
546 main_http_factory_->GetSession(); 545 main_http_factory_->GetSession();
547 net::HttpCache* app_http_cache = 546 net::HttpCache* app_http_cache =
548 new net::HttpCache(main_network_session, app_backend); 547 new net::HttpCache(main_network_session, app_backend);
549 548
550 scoped_refptr<net::CookieStore> cookie_store = NULL; 549 scoped_refptr<net::CookieStore> cookie_store = NULL;
551 if (guest_process) { 550 if (is_guest_process) {
552 cookie_store = new net::CookieMonster(NULL, NULL); 551 cookie_store = new net::CookieMonster(NULL, NULL);
553 } else if (record_mode || playback_mode) { 552 } else if (record_mode || playback_mode) {
554 // Don't use existing cookies and use an in-memory store. 553 // Don't use existing cookies and use an in-memory store.
555 // TODO(creis): We should have a cookie delegate for notifying the cookie 554 // TODO(creis): We should have a cookie delegate for notifying the cookie
556 // extensions API, but we need to update it to understand isolated apps 555 // extensions API, but we need to update it to understand isolated apps
557 // first. 556 // first.
558 cookie_store = new net::CookieMonster(NULL, NULL); 557 cookie_store = new net::CookieMonster(NULL, NULL);
559 app_http_cache->set_mode( 558 app_http_cache->set_mode(
560 record_mode ? net::HttpCache::RECORD : net::HttpCache::PLAYBACK); 559 record_mode ? net::HttpCache::RECORD : net::HttpCache::PLAYBACK);
561 } 560 }
562 561
563 // Use an app-specific cookie store. 562 // Use an app-specific cookie store.
564 if (!cookie_store) { 563 if (!cookie_store) {
565 DCHECK(!cookie_path.empty()); 564 DCHECK(!cookie_path.empty());
566 565
567 scoped_refptr<SQLitePersistentCookieStore> cookie_db = 566 scoped_refptr<SQLitePersistentCookieStore> cookie_db =
568 new SQLitePersistentCookieStore(cookie_path, false, NULL); 567 new SQLitePersistentCookieStore(cookie_path, false, NULL);
569 // TODO(creis): We should have a cookie delegate for notifying the cookie 568 // TODO(creis): We should have a cookie delegate for notifying the cookie
570 // extensions API, but we need to update it to understand isolated apps 569 // extensions API, but we need to update it to understand isolated apps
571 // first. 570 // first.
572 cookie_store = new net::CookieMonster(cookie_db.get(), NULL); 571 cookie_store = new net::CookieMonster(cookie_db.get(), NULL);
573 } 572 }
574 573
574 // Transfer ownership of the cookies and cache to AppRequestContext.
575 context->SetCookieStore(cookie_store); 575 context->SetCookieStore(cookie_store);
576 context->SetHttpTransactionFactory(app_http_cache); 576 context->SetHttpTransactionFactory(app_http_cache);
577 577
578 return context; 578 return context;
579 } 579 }
580 580
581 ChromeURLRequestContext* 581 ChromeURLRequestContext*
582 ProfileImplIOData::InitializeMediaRequestContext(
583 ChromeURLRequestContext* original_context,
584 const std::string& app_id) const {
585 // If this is for a guest process, we do not persist storage, so we can
586 // simply use the app's in-memory cache (like off-the-record mode).
587 if (app_id.find("guest-") != std::string::npos)
588 return original_context;
589
590 // Copy most state from the original context.
591 MediaRequestContext* context = new MediaRequestContext(load_time_stats());
592 context->CopyFrom(original_context);
593
594 FilePath app_path = app_path_.AppendASCII(app_id);
595 FilePath cache_path;
596 int cache_max_size = app_media_cache_max_size_;
597 if (app_id.empty()) {
598 // lazy_params_ is only valid for the default media context creation.
599 cache_path = lazy_params_->media_cache_path;
600 cache_max_size = lazy_params_->media_cache_max_size;
601 } else {
602 cache_path = app_path.Append(chrome::kMediaCacheDirname);
603 }
604
605 // Use a separate HTTP disk cache for isolated apps.
606 net::HttpCache::BackendFactory* media_backend =
607 new net::HttpCache::DefaultBackend(
608 net::MEDIA_CACHE,
609 cache_path,
610 cache_max_size,
611 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE));
612 net::HttpNetworkSession* main_network_session =
613 main_http_factory_->GetSession();
614 net::HttpCache* media_http_cache =
615 new net::HttpCache(main_network_session, media_backend);
616
617 // Transfer ownership of the cache to MediaRequestContext.
618 context->SetHttpTransactionFactory(media_http_cache);
619
620 return context;
621 }
622
623 ChromeURLRequestContext*
582 ProfileImplIOData::AcquireMediaRequestContext() const { 624 ProfileImplIOData::AcquireMediaRequestContext() const {
583 DCHECK(media_request_context_.get()); 625 DCHECK(media_request_context_.get());
584 return media_request_context_.get(); 626 return media_request_context_.get();
585 } 627 }
586 628
587 ChromeURLRequestContext* 629 ChromeURLRequestContext*
588 ProfileImplIOData::AcquireIsolatedAppRequestContext( 630 ProfileImplIOData::AcquireIsolatedAppRequestContext(
589 ChromeURLRequestContext* main_context, 631 ChromeURLRequestContext* main_context,
590 const std::string& app_id) const { 632 const std::string& app_id) const {
591 // We create per-app contexts on demand, unlike the others above. 633 // We create per-app contexts on demand, unlike the others above.
592 ChromeURLRequestContext* app_request_context = 634 ChromeURLRequestContext* app_request_context =
593 InitializeAppRequestContext(main_context, app_id); 635 InitializeAppRequestContext(main_context, app_id);
594 DCHECK(app_request_context); 636 DCHECK(app_request_context);
595 return app_request_context; 637 return app_request_context;
596 } 638 }
597 639
640 ChromeURLRequestContext*
641 ProfileImplIOData::AcquireIsolatedMediaRequestContext(
642 ChromeURLRequestContext* app_context,
643 const std::string& app_id) const {
644 // We create per-app media contexts on demand, unlike the others above.
645 ChromeURLRequestContext* media_request_context =
646 InitializeMediaRequestContext(app_context, app_id);
647 DCHECK(media_request_context);
648 return media_request_context;
649 }
650
598 chrome_browser_net::LoadTimeStats* ProfileImplIOData::GetLoadTimeStats( 651 chrome_browser_net::LoadTimeStats* ProfileImplIOData::GetLoadTimeStats(
599 IOThread::Globals* io_thread_globals) const { 652 IOThread::Globals* io_thread_globals) const {
600 return io_thread_globals->load_time_stats.get(); 653 return io_thread_globals->load_time_stats.get();
601 } 654 }
602 655
603 void ProfileImplIOData::CreateFtpProtocolHandler( 656 void ProfileImplIOData::CreateFtpProtocolHandler(
604 net::URLRequestJobFactory* job_factory, 657 net::URLRequestJobFactory* job_factory,
605 net::FtpAuthCache* ftp_auth_cache) const { 658 net::FtpAuthCache* ftp_auth_cache) const {
606 job_factory->SetProtocolHandler( 659 job_factory->SetProtocolHandler(
607 chrome::kFtpScheme, 660 chrome::kFtpScheme,
608 new net::FtpProtocolHandler(network_delegate(), 661 new net::FtpProtocolHandler(network_delegate(),
609 ftp_factory_.get(), 662 ftp_factory_.get(),
610 ftp_auth_cache)); 663 ftp_auth_cache));
611 } 664 }
612 665
613 void ProfileImplIOData::ClearNetworkingHistorySinceOnIOThread( 666 void ProfileImplIOData::ClearNetworkingHistorySinceOnIOThread(
614 base::Time time) { 667 base::Time time) {
615 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 668 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
616 LazyInitialize(); 669 LazyInitialize();
617 670
618 DCHECK(transport_security_state()); 671 DCHECK(transport_security_state());
619 transport_security_state()->DeleteSince(time); 672 transport_security_state()->DeleteSince(time);
620 DCHECK(http_server_properties_manager()); 673 DCHECK(http_server_properties_manager());
621 http_server_properties_manager()->Clear(); 674 http_server_properties_manager()->Clear();
622 } 675 }
OLDNEW
« no previous file with comments | « chrome/browser/profiles/profile_impl_io_data.h ('k') | chrome/browser/profiles/profile_io_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698