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

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

Issue 11308362: Add StoragePartition's ProtocolHandlers at URLRequestContext construction time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Eliminate OffTheRecordProfileIOData::Handle::GetMainRequestContextGetter Created 7 years, 11 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_io_data.h" 5 #include "chrome/browser/profiles/profile_io_data.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 params->notification_service = 167 params->notification_service =
168 DesktopNotificationServiceFactory::GetForProfile(profile); 168 DesktopNotificationServiceFactory::GetForProfile(profile);
169 #endif 169 #endif
170 170
171 ProtocolHandlerRegistry* protocol_handler_registry = 171 ProtocolHandlerRegistry* protocol_handler_registry =
172 ProtocolHandlerRegistryFactory::GetForProfile(profile); 172 ProtocolHandlerRegistryFactory::GetForProfile(profile);
173 DCHECK(protocol_handler_registry); 173 DCHECK(protocol_handler_registry);
174 174
175 // The profile instance is only available here in the InitializeOnUIThread 175 // The profile instance is only available here in the InitializeOnUIThread
176 // method, so we create the url job factory here, then save it for 176 // method, so we create the url job factory here, then save it for
177 // later delivery to the job factory in LazyInitialize. 177 // later delivery to the job factory in Init().
178 params->protocol_handler_interceptor = 178 params->protocol_handler_interceptor =
179 protocol_handler_registry->CreateJobInterceptorFactory(); 179 protocol_handler_registry->CreateJobInterceptorFactory();
180 180
181 ChromeProxyConfigService* proxy_config_service = 181 ChromeProxyConfigService* proxy_config_service =
182 ProxyServiceFactory::CreateProxyConfigService(); 182 ProxyServiceFactory::CreateProxyConfigService();
183 params->proxy_config_service.reset(proxy_config_service); 183 params->proxy_config_service.reset(proxy_config_service);
184 profile->GetProxyConfigTracker()->SetChromeProxyConfigService( 184 profile->GetProxyConfigTracker()->SetChromeProxyConfigService(
185 proxy_config_service); 185 proxy_config_service);
186 params->profile = profile; 186 params->profile = profile;
187 profile_params_.reset(params.release()); 187 profile_params_.reset(params.release());
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 359
360 return IsHandledProtocol(url.scheme()); 360 return IsHandledProtocol(url.scheme());
361 } 361 }
362 362
363 content::ResourceContext* ProfileIOData::GetResourceContext() const { 363 content::ResourceContext* ProfileIOData::GetResourceContext() const {
364 return resource_context_.get(); 364 return resource_context_.get();
365 } 365 }
366 366
367 ChromeURLDataManagerBackend* 367 ChromeURLDataManagerBackend*
368 ProfileIOData::GetChromeURLDataManagerBackend() const { 368 ProfileIOData::GetChromeURLDataManagerBackend() const {
369 LazyInitialize(); 369 DCHECK(initialized_);
370 return chrome_url_data_manager_backend_.get(); 370 return chrome_url_data_manager_backend_.get();
371 } 371 }
372 372
373 ChromeURLRequestContext* 373 ChromeURLRequestContext* ProfileIOData::GetMainRequestContext() const {
374 ProfileIOData::GetMainRequestContext() const { 374 DCHECK(initialized_);
375 LazyInitialize();
376 return main_request_context_.get(); 375 return main_request_context_.get();
377 } 376 }
378 377
379 ChromeURLRequestContext* 378 ChromeURLRequestContext* ProfileIOData::GetMediaRequestContext() const {
380 ProfileIOData::GetMediaRequestContext() const { 379 DCHECK(initialized_);
381 LazyInitialize(); 380 ChromeURLRequestContext* context = AcquireMediaRequestContext();
382 ChromeURLRequestContext* context =
383 AcquireMediaRequestContext();
384 DCHECK(context); 381 DCHECK(context);
385 return context; 382 return context;
386 } 383 }
387 384
388 ChromeURLRequestContext* 385 ChromeURLRequestContext* ProfileIOData::GetExtensionsRequestContext() const {
389 ProfileIOData::GetExtensionsRequestContext() const { 386 DCHECK(initialized_);
390 LazyInitialize();
391 return extensions_request_context_.get(); 387 return extensions_request_context_.get();
392 } 388 }
393 389
394 ChromeURLRequestContext* 390 ChromeURLRequestContext* ProfileIOData::GetIsolatedAppRequestContext(
395 ProfileIOData::GetIsolatedAppRequestContext(
396 ChromeURLRequestContext* main_context, 391 ChromeURLRequestContext* main_context,
397 const StoragePartitionDescriptor& partition_descriptor, 392 const StoragePartitionDescriptor& partition_descriptor,
398 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> 393 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
399 protocol_handler_interceptor) const { 394 protocol_handler_interceptor,
400 LazyInitialize(); 395 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
396 blob_protocol_handler,
397 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
398 file_system_protocol_handler,
399 scoped_ptr<net::URLRequestJobFactory::Interceptor>
400 developer_protocol_handler) const {
401 DCHECK(initialized_);
401 ChromeURLRequestContext* context = NULL; 402 ChromeURLRequestContext* context = NULL;
402 if (ContainsKey(app_request_context_map_, partition_descriptor)) { 403 if (ContainsKey(app_request_context_map_, partition_descriptor)) {
403 context = app_request_context_map_[partition_descriptor]; 404 context = app_request_context_map_[partition_descriptor];
404 } else { 405 } else {
405 context = AcquireIsolatedAppRequestContext( 406 context = AcquireIsolatedAppRequestContext(
406 main_context, partition_descriptor, 407 main_context, partition_descriptor, protocol_handler_interceptor.Pass(),
407 protocol_handler_interceptor.Pass()); 408 blob_protocol_handler.Pass(), file_system_protocol_handler.Pass(),
409 developer_protocol_handler.Pass());
408 app_request_context_map_[partition_descriptor] = context; 410 app_request_context_map_[partition_descriptor] = context;
409 } 411 }
410 DCHECK(context); 412 DCHECK(context);
411 return context; 413 return context;
412 } 414 }
413 415
414 ChromeURLRequestContext* 416 ChromeURLRequestContext* ProfileIOData::GetIsolatedMediaRequestContext(
415 ProfileIOData::GetIsolatedMediaRequestContext(
416 ChromeURLRequestContext* app_context, 417 ChromeURLRequestContext* app_context,
417 const StoragePartitionDescriptor& partition_descriptor) const { 418 const StoragePartitionDescriptor& partition_descriptor) const {
418 LazyInitialize(); 419 DCHECK(initialized_);
419 ChromeURLRequestContext* context = NULL; 420 ChromeURLRequestContext* context = NULL;
420 if (ContainsKey(isolated_media_request_context_map_, partition_descriptor)) { 421 if (ContainsKey(isolated_media_request_context_map_, partition_descriptor)) {
421 context = isolated_media_request_context_map_[partition_descriptor]; 422 context = isolated_media_request_context_map_[partition_descriptor];
422 } else { 423 } else {
423 context = AcquireIsolatedMediaRequestContext(app_context, 424 context = AcquireIsolatedMediaRequestContext(app_context,
424 partition_descriptor); 425 partition_descriptor);
425 isolated_media_request_context_map_[partition_descriptor] = context; 426 isolated_media_request_context_map_[partition_descriptor] = context;
426 } 427 }
427 DCHECK(context); 428 DCHECK(context);
428 return context; 429 return context;
429 } 430 }
430 431
431 ExtensionInfoMap* ProfileIOData::GetExtensionInfoMap() const { 432 ExtensionInfoMap* ProfileIOData::GetExtensionInfoMap() const {
432 DCHECK(extension_info_map_) << "ExtensionSystem not initialized"; 433 DCHECK(initialized_) << "ExtensionSystem not initialized";
433 return extension_info_map_; 434 return extension_info_map_;
434 } 435 }
435 436
436 CookieSettings* ProfileIOData::GetCookieSettings() const { 437 CookieSettings* ProfileIOData::GetCookieSettings() const {
438 // Allow either Init() or SetCookieSettingsForTesting() to initialize.
439 DCHECK(initialized_ || cookie_settings_);
437 return cookie_settings_; 440 return cookie_settings_;
438 } 441 }
439 442
440 #if defined(ENABLE_NOTIFICATIONS) 443 #if defined(ENABLE_NOTIFICATIONS)
441 DesktopNotificationService* ProfileIOData::GetNotificationService() const { 444 DesktopNotificationService* ProfileIOData::GetNotificationService() const {
445 DCHECK(initialized_);
442 return notification_service_; 446 return notification_service_;
443 } 447 }
444 #endif 448 #endif
445 449
446 void ProfileIOData::InitializeMetricsEnabledStateOnUIThread() { 450 void ProfileIOData::InitializeMetricsEnabledStateOnUIThread() {
447 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 451 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
448 #if defined(OS_CHROMEOS) 452 #if defined(OS_CHROMEOS)
449 // Just fetch the value from ChromeOS' settings while we're on the UI thread. 453 // Just fetch the value from ChromeOS' settings while we're on the UI thread.
450 // TODO(stevet): For now, this value is only set on profile initialization. 454 // TODO(stevet): For now, this value is only set on profile initialization.
451 // We will want to do something similar to the PrefMember method below in the 455 // We will want to do something similar to the PrefMember method below in the
(...skipping 30 matching lines...) Expand all
482 486
483 ProfileIOData::ResourceContext::ResourceContext(ProfileIOData* io_data) 487 ProfileIOData::ResourceContext::ResourceContext(ProfileIOData* io_data)
484 : io_data_(io_data), 488 : io_data_(io_data),
485 host_resolver_(NULL), 489 host_resolver_(NULL),
486 request_context_(NULL) { 490 request_context_(NULL) {
487 DCHECK(io_data); 491 DCHECK(io_data);
488 } 492 }
489 493
490 ProfileIOData::ResourceContext::~ResourceContext() {} 494 ProfileIOData::ResourceContext::~ResourceContext() {}
491 495
492 void ProfileIOData::ResourceContext::EnsureInitialized() {
493 io_data_->LazyInitialize();
494 }
495
496 net::HostResolver* ProfileIOData::ResourceContext::GetHostResolver() { 496 net::HostResolver* ProfileIOData::ResourceContext::GetHostResolver() {
497 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 497 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
498 EnsureInitialized(); 498 DCHECK(io_data_->initialized_);
499 return host_resolver_; 499 return host_resolver_;
500 } 500 }
501 501
502 net::URLRequestContext* ProfileIOData::ResourceContext::GetRequestContext() { 502 net::URLRequestContext* ProfileIOData::ResourceContext::GetRequestContext() {
503 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 503 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
504 EnsureInitialized(); 504 DCHECK(io_data_->initialized_);
505 return request_context_; 505 return request_context_;
506 } 506 }
507 507
508 // static 508 // static
509 std::string ProfileIOData::GetSSLSessionCacheShard() { 509 std::string ProfileIOData::GetSSLSessionCacheShard() {
510 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 510 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
511 // The SSL session cache is partitioned by setting a string. This returns a 511 // The SSL session cache is partitioned by setting a string. This returns a
512 // unique string to partition the SSL session cache. Each time we create a 512 // unique string to partition the SSL session cache. Each time we create a
513 // new profile, we'll get a fresh SSL session cache which is separate from 513 // new profile, we'll get a fresh SSL session cache which is separate from
514 // the other profiles. 514 // the other profiles.
515 static unsigned ssl_session_cache_instance = 0; 515 static unsigned ssl_session_cache_instance = 0;
516 return StringPrintf("profile/%u", ssl_session_cache_instance++); 516 return StringPrintf("profile/%u", ssl_session_cache_instance++);
517 } 517 }
518 518
519 void ProfileIOData::LazyInitialize() const { 519 void ProfileIOData::Init(
520 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
521 blob_protocol_handler,
522 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
523 file_system_protocol_handler,
524 scoped_ptr<net::URLRequestJobFactory::Interceptor>
525 developer_protocol_handler) const {
526 // The basic logic is implemented here. The specific initialization
527 // is done in InitializeInternal(), implemented by subtypes. Static helper
528 // functions have been provided to assist in common operations.
520 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 529 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
521 if (initialized_) 530 DCHECK(!initialized_);
522 return;
523 531
524 startup_metric_utils::ScopedSlowStartupUMA 532 startup_metric_utils::ScopedSlowStartupUMA
525 scoped_timer("Startup.SlowStartupProfileIODataInit"); 533 scoped_timer("Startup.SlowStartupProfileIODataInit");
526 534
527 // TODO(jhawkins): Remove once crbug.com/102004 is fixed. 535 // TODO(jhawkins): Remove once crbug.com/102004 is fixed.
528 CHECK(initialized_on_UI_thread_); 536 CHECK(initialized_on_UI_thread_);
529 537
530 // TODO(jhawkins): Return to DCHECK once crbug.com/102004 is fixed. 538 // TODO(jhawkins): Return to DCHECK once crbug.com/102004 is fixed.
531 CHECK(profile_params_.get()); 539 CHECK(profile_params_.get());
532 540
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 extension_info_map_ = profile_params_->extension_info_map; 595 extension_info_map_ = profile_params_->extension_info_map;
588 596
589 resource_context_->host_resolver_ = io_thread_globals->host_resolver.get(); 597 resource_context_->host_resolver_ = io_thread_globals->host_resolver.get();
590 resource_context_->request_context_ = main_request_context_.get(); 598 resource_context_->request_context_ = main_request_context_.get();
591 599
592 if (profile_params_->resource_prefetch_predictor_observer_.get()) { 600 if (profile_params_->resource_prefetch_predictor_observer_.get()) {
593 resource_prefetch_predictor_observer_.reset( 601 resource_prefetch_predictor_observer_.reset(
594 profile_params_->resource_prefetch_predictor_observer_.release()); 602 profile_params_->resource_prefetch_predictor_observer_.release());
595 } 603 }
596 604
597 LazyInitializeInternal(profile_params_.get()); 605 InitializeInternal(profile_params_.get(),
606 blob_protocol_handler.Pass(),
607 file_system_protocol_handler.Pass(),
608 developer_protocol_handler.Pass());
598 609
599 profile_params_.reset(); 610 profile_params_.reset();
600 initialized_ = true; 611 initialized_ = true;
601 } 612 }
602 613
603 void ProfileIOData::ApplyProfileParamsToContext( 614 void ProfileIOData::ApplyProfileParamsToContext(
604 ChromeURLRequestContext* context) const { 615 ChromeURLRequestContext* context) const {
605 context->set_http_user_agent_settings( 616 context->set_http_user_agent_settings(
606 chrome_http_user_agent_settings_.get()); 617 chrome_http_user_agent_settings_.get());
607 context->set_ssl_config_service(profile_params_->ssl_config_service); 618 context->set_ssl_config_service(profile_params_->ssl_config_service);
(...skipping 10 matching lines...) Expand all
618 // ProfileIOData::IsHandledProtocol(). 629 // ProfileIOData::IsHandledProtocol().
619 bool set_protocol = job_factory->SetProtocolHandler( 630 bool set_protocol = job_factory->SetProtocolHandler(
620 chrome::kFileScheme, new net::FileProtocolHandler()); 631 chrome::kFileScheme, new net::FileProtocolHandler());
621 DCHECK(set_protocol); 632 DCHECK(set_protocol);
622 633
623 set_protocol = job_factory->SetProtocolHandler( 634 set_protocol = job_factory->SetProtocolHandler(
624 chrome::kChromeDevToolsScheme, 635 chrome::kChromeDevToolsScheme,
625 CreateDevToolsProtocolHandler(chrome_url_data_manager_backend(), 636 CreateDevToolsProtocolHandler(chrome_url_data_manager_backend(),
626 network_delegate, is_incognito())); 637 network_delegate, is_incognito()));
627 DCHECK(set_protocol); 638 DCHECK(set_protocol);
639 DCHECK(extension_info_map_);
628 set_protocol = job_factory->SetProtocolHandler( 640 set_protocol = job_factory->SetProtocolHandler(
629 extensions::kExtensionScheme, 641 extensions::kExtensionScheme,
630 CreateExtensionProtocolHandler(is_incognito(), GetExtensionInfoMap())); 642 CreateExtensionProtocolHandler(is_incognito(), extension_info_map_));
631 DCHECK(set_protocol); 643 DCHECK(set_protocol);
632 set_protocol = job_factory->SetProtocolHandler( 644 set_protocol = job_factory->SetProtocolHandler(
633 chrome::kExtensionResourceScheme, 645 chrome::kExtensionResourceScheme,
634 CreateExtensionResourceProtocolHandler()); 646 CreateExtensionResourceProtocolHandler());
635 DCHECK(set_protocol); 647 DCHECK(set_protocol);
636 set_protocol = job_factory->SetProtocolHandler( 648 set_protocol = job_factory->SetProtocolHandler(
637 chrome::kChromeUIScheme, 649 chrome::kChromeUIScheme,
638 ChromeURLDataManagerBackend::CreateProtocolHandler( 650 ChromeURLDataManagerBackend::CreateProtocolHandler(
639 chrome_url_data_manager_backend_.get(), 651 chrome_url_data_manager_backend_.get(),
640 is_incognito())); 652 is_incognito()));
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 void ProfileIOData::SetCookieSettingsForTesting( 749 void ProfileIOData::SetCookieSettingsForTesting(
738 CookieSettings* cookie_settings) { 750 CookieSettings* cookie_settings) {
739 DCHECK(!cookie_settings_.get()); 751 DCHECK(!cookie_settings_.get());
740 cookie_settings_ = cookie_settings; 752 cookie_settings_ = cookie_settings;
741 } 753 }
742 754
743 void ProfileIOData::set_signin_names_for_testing( 755 void ProfileIOData::set_signin_names_for_testing(
744 SigninNamesOnIOThread* signin_names) { 756 SigninNamesOnIOThread* signin_names) {
745 signin_names_.reset(signin_names); 757 signin_names_.reset(signin_names);
746 } 758 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698