| OLD | NEW |
| 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 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 params->notification_service = | 255 params->notification_service = |
| 256 DesktopNotificationServiceFactory::GetForProfile(profile); | 256 DesktopNotificationServiceFactory::GetForProfile(profile); |
| 257 #endif | 257 #endif |
| 258 | 258 |
| 259 ProtocolHandlerRegistry* protocol_handler_registry = | 259 ProtocolHandlerRegistry* protocol_handler_registry = |
| 260 ProtocolHandlerRegistryFactory::GetForProfile(profile); | 260 ProtocolHandlerRegistryFactory::GetForProfile(profile); |
| 261 DCHECK(protocol_handler_registry); | 261 DCHECK(protocol_handler_registry); |
| 262 | 262 |
| 263 // The profile instance is only available here in the InitializeOnUIThread | 263 // The profile instance is only available here in the InitializeOnUIThread |
| 264 // method, so we create the url job factory here, then save it for | 264 // method, so we create the url job factory here, then save it for |
| 265 // later delivery to the job factory in LazyInitialize. | 265 // later delivery to the job factory in Init(). |
| 266 params->protocol_handler_interceptor = | 266 params->protocol_handler_interceptor = |
| 267 protocol_handler_registry->CreateJobInterceptorFactory(); | 267 protocol_handler_registry->CreateJobInterceptorFactory(); |
| 268 | 268 |
| 269 ChromeProxyConfigService* proxy_config_service = | 269 ChromeProxyConfigService* proxy_config_service = |
| 270 ProxyServiceFactory::CreateProxyConfigService(); | 270 ProxyServiceFactory::CreateProxyConfigService(); |
| 271 params->proxy_config_service.reset(proxy_config_service); | 271 params->proxy_config_service.reset(proxy_config_service); |
| 272 profile->GetProxyConfigTracker()->SetChromeProxyConfigService( | 272 profile->GetProxyConfigTracker()->SetChromeProxyConfigService( |
| 273 proxy_config_service); | 273 proxy_config_service); |
| 274 #if defined(ENABLE_MANAGED_USERS) | 274 #if defined(ENABLE_MANAGED_USERS) |
| 275 ManagedUserService* managed_user_service = | 275 ManagedUserService* managed_user_service = |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 return true; | 452 return true; |
| 453 } | 453 } |
| 454 | 454 |
| 455 return IsHandledProtocol(url.scheme()); | 455 return IsHandledProtocol(url.scheme()); |
| 456 } | 456 } |
| 457 | 457 |
| 458 content::ResourceContext* ProfileIOData::GetResourceContext() const { | 458 content::ResourceContext* ProfileIOData::GetResourceContext() const { |
| 459 return resource_context_.get(); | 459 return resource_context_.get(); |
| 460 } | 460 } |
| 461 | 461 |
| 462 ChromeURLRequestContext* | 462 ChromeURLRequestContext* ProfileIOData::GetMainRequestContext() const { |
| 463 ProfileIOData::GetMainRequestContext() const { | 463 DCHECK(initialized_); |
| 464 LazyInitialize(); | |
| 465 return main_request_context_.get(); | 464 return main_request_context_.get(); |
| 466 } | 465 } |
| 467 | 466 |
| 468 ChromeURLRequestContext* | 467 ChromeURLRequestContext* ProfileIOData::GetMediaRequestContext() const { |
| 469 ProfileIOData::GetMediaRequestContext() const { | 468 DCHECK(initialized_); |
| 470 LazyInitialize(); | 469 ChromeURLRequestContext* context = AcquireMediaRequestContext(); |
| 471 ChromeURLRequestContext* context = | |
| 472 AcquireMediaRequestContext(); | |
| 473 DCHECK(context); | 470 DCHECK(context); |
| 474 return context; | 471 return context; |
| 475 } | 472 } |
| 476 | 473 |
| 477 ChromeURLRequestContext* | 474 ChromeURLRequestContext* ProfileIOData::GetExtensionsRequestContext() const { |
| 478 ProfileIOData::GetExtensionsRequestContext() const { | 475 DCHECK(initialized_); |
| 479 LazyInitialize(); | |
| 480 return extensions_request_context_.get(); | 476 return extensions_request_context_.get(); |
| 481 } | 477 } |
| 482 | 478 |
| 483 ChromeURLRequestContext* | 479 ChromeURLRequestContext* ProfileIOData::GetIsolatedAppRequestContext( |
| 484 ProfileIOData::GetIsolatedAppRequestContext( | |
| 485 ChromeURLRequestContext* main_context, | 480 ChromeURLRequestContext* main_context, |
| 486 const StoragePartitionDescriptor& partition_descriptor, | 481 const StoragePartitionDescriptor& partition_descriptor, |
| 487 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> | 482 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> |
| 488 protocol_handler_interceptor) const { | 483 protocol_handler_interceptor, |
| 489 LazyInitialize(); | 484 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 485 blob_protocol_handler, |
| 486 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 487 file_system_protocol_handler, |
| 488 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 489 developer_protocol_handler, |
| 490 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 491 chrome_protocol_handler, |
| 492 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 493 chrome_devtools_protocol_handler) const { |
| 494 DCHECK(initialized_); |
| 490 ChromeURLRequestContext* context = NULL; | 495 ChromeURLRequestContext* context = NULL; |
| 491 if (ContainsKey(app_request_context_map_, partition_descriptor)) { | 496 if (ContainsKey(app_request_context_map_, partition_descriptor)) { |
| 492 context = app_request_context_map_[partition_descriptor]; | 497 context = app_request_context_map_[partition_descriptor]; |
| 493 } else { | 498 } else { |
| 494 context = AcquireIsolatedAppRequestContext( | 499 context = AcquireIsolatedAppRequestContext( |
| 495 main_context, partition_descriptor, | 500 main_context, partition_descriptor, protocol_handler_interceptor.Pass(), |
| 496 protocol_handler_interceptor.Pass()); | 501 blob_protocol_handler.Pass(), file_system_protocol_handler.Pass(), |
| 502 developer_protocol_handler.Pass(), chrome_protocol_handler.Pass(), |
| 503 chrome_devtools_protocol_handler.Pass()); |
| 497 app_request_context_map_[partition_descriptor] = context; | 504 app_request_context_map_[partition_descriptor] = context; |
| 498 } | 505 } |
| 499 DCHECK(context); | 506 DCHECK(context); |
| 500 return context; | 507 return context; |
| 501 } | 508 } |
| 502 | 509 |
| 503 ChromeURLRequestContext* | 510 ChromeURLRequestContext* ProfileIOData::GetIsolatedMediaRequestContext( |
| 504 ProfileIOData::GetIsolatedMediaRequestContext( | |
| 505 ChromeURLRequestContext* app_context, | 511 ChromeURLRequestContext* app_context, |
| 506 const StoragePartitionDescriptor& partition_descriptor) const { | 512 const StoragePartitionDescriptor& partition_descriptor) const { |
| 507 LazyInitialize(); | 513 DCHECK(initialized_); |
| 508 ChromeURLRequestContext* context = NULL; | 514 ChromeURLRequestContext* context = NULL; |
| 509 if (ContainsKey(isolated_media_request_context_map_, partition_descriptor)) { | 515 if (ContainsKey(isolated_media_request_context_map_, partition_descriptor)) { |
| 510 context = isolated_media_request_context_map_[partition_descriptor]; | 516 context = isolated_media_request_context_map_[partition_descriptor]; |
| 511 } else { | 517 } else { |
| 512 context = AcquireIsolatedMediaRequestContext(app_context, | 518 context = AcquireIsolatedMediaRequestContext(app_context, |
| 513 partition_descriptor); | 519 partition_descriptor); |
| 514 isolated_media_request_context_map_[partition_descriptor] = context; | 520 isolated_media_request_context_map_[partition_descriptor] = context; |
| 515 } | 521 } |
| 516 DCHECK(context); | 522 DCHECK(context); |
| 517 return context; | 523 return context; |
| 518 } | 524 } |
| 519 | 525 |
| 520 ExtensionInfoMap* ProfileIOData::GetExtensionInfoMap() const { | 526 ExtensionInfoMap* ProfileIOData::GetExtensionInfoMap() const { |
| 521 DCHECK(extension_info_map_) << "ExtensionSystem not initialized"; | 527 DCHECK(initialized_) << "ExtensionSystem not initialized"; |
| 522 return extension_info_map_; | 528 return extension_info_map_; |
| 523 } | 529 } |
| 524 | 530 |
| 525 CookieSettings* ProfileIOData::GetCookieSettings() const { | 531 CookieSettings* ProfileIOData::GetCookieSettings() const { |
| 532 // Allow either Init() or SetCookieSettingsForTesting() to initialize. |
| 533 DCHECK(initialized_ || cookie_settings_); |
| 526 return cookie_settings_; | 534 return cookie_settings_; |
| 527 } | 535 } |
| 528 | 536 |
| 529 #if defined(ENABLE_NOTIFICATIONS) | 537 #if defined(ENABLE_NOTIFICATIONS) |
| 530 DesktopNotificationService* ProfileIOData::GetNotificationService() const { | 538 DesktopNotificationService* ProfileIOData::GetNotificationService() const { |
| 539 DCHECK(initialized_); |
| 531 return notification_service_; | 540 return notification_service_; |
| 532 } | 541 } |
| 533 #endif | 542 #endif |
| 534 | 543 |
| 535 void ProfileIOData::InitializeMetricsEnabledStateOnUIThread() { | 544 void ProfileIOData::InitializeMetricsEnabledStateOnUIThread() { |
| 536 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 545 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 537 #if defined(OS_CHROMEOS) | 546 #if defined(OS_CHROMEOS) |
| 538 // Just fetch the value from ChromeOS' settings while we're on the UI thread. | 547 // Just fetch the value from ChromeOS' settings while we're on the UI thread. |
| 539 // TODO(stevet): For now, this value is only set on profile initialization. | 548 // TODO(stevet): For now, this value is only set on profile initialization. |
| 540 // We will want to do something similar to the PrefMember method below in the | 549 // We will want to do something similar to the PrefMember method below in the |
| (...skipping 30 matching lines...) Expand all Loading... |
| 571 | 580 |
| 572 ProfileIOData::ResourceContext::ResourceContext(ProfileIOData* io_data) | 581 ProfileIOData::ResourceContext::ResourceContext(ProfileIOData* io_data) |
| 573 : io_data_(io_data), | 582 : io_data_(io_data), |
| 574 host_resolver_(NULL), | 583 host_resolver_(NULL), |
| 575 request_context_(NULL) { | 584 request_context_(NULL) { |
| 576 DCHECK(io_data); | 585 DCHECK(io_data); |
| 577 } | 586 } |
| 578 | 587 |
| 579 ProfileIOData::ResourceContext::~ResourceContext() {} | 588 ProfileIOData::ResourceContext::~ResourceContext() {} |
| 580 | 589 |
| 581 void ProfileIOData::ResourceContext::EnsureInitialized() { | |
| 582 io_data_->LazyInitialize(); | |
| 583 } | |
| 584 | |
| 585 net::HostResolver* ProfileIOData::ResourceContext::GetHostResolver() { | 590 net::HostResolver* ProfileIOData::ResourceContext::GetHostResolver() { |
| 586 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 591 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 587 EnsureInitialized(); | 592 DCHECK(io_data_->initialized_); |
| 588 return host_resolver_; | 593 return host_resolver_; |
| 589 } | 594 } |
| 590 | 595 |
| 591 net::URLRequestContext* ProfileIOData::ResourceContext::GetRequestContext() { | 596 net::URLRequestContext* ProfileIOData::ResourceContext::GetRequestContext() { |
| 592 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 597 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 593 EnsureInitialized(); | 598 DCHECK(io_data_->initialized_); |
| 594 return request_context_; | 599 return request_context_; |
| 595 } | 600 } |
| 596 | 601 |
| 597 // static | 602 // static |
| 598 std::string ProfileIOData::GetSSLSessionCacheShard() { | 603 std::string ProfileIOData::GetSSLSessionCacheShard() { |
| 599 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 604 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 600 // The SSL session cache is partitioned by setting a string. This returns a | 605 // The SSL session cache is partitioned by setting a string. This returns a |
| 601 // unique string to partition the SSL session cache. Each time we create a | 606 // unique string to partition the SSL session cache. Each time we create a |
| 602 // new profile, we'll get a fresh SSL session cache which is separate from | 607 // new profile, we'll get a fresh SSL session cache which is separate from |
| 603 // the other profiles. | 608 // the other profiles. |
| 604 static unsigned ssl_session_cache_instance = 0; | 609 static unsigned ssl_session_cache_instance = 0; |
| 605 return StringPrintf("profile/%u", ssl_session_cache_instance++); | 610 return StringPrintf("profile/%u", ssl_session_cache_instance++); |
| 606 } | 611 } |
| 607 | 612 |
| 608 void ProfileIOData::LazyInitialize() const { | 613 void ProfileIOData::Init( |
| 614 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 615 blob_protocol_handler, |
| 616 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 617 file_system_protocol_handler, |
| 618 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 619 developer_protocol_handler, |
| 620 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 621 chrome_protocol_handler, |
| 622 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> |
| 623 chrome_devtools_protocol_handler) const { |
| 624 // The basic logic is implemented here. The specific initialization |
| 625 // is done in InitializeInternal(), implemented by subtypes. Static helper |
| 626 // functions have been provided to assist in common operations. |
| 609 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 627 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 610 if (initialized_) | 628 DCHECK(!initialized_); |
| 611 return; | |
| 612 | 629 |
| 613 startup_metric_utils::ScopedSlowStartupUMA | 630 startup_metric_utils::ScopedSlowStartupUMA |
| 614 scoped_timer("Startup.SlowStartupProfileIODataInit"); | 631 scoped_timer("Startup.SlowStartupProfileIODataInit"); |
| 615 | 632 |
| 616 // TODO(jhawkins): Remove once crbug.com/102004 is fixed. | 633 // TODO(jhawkins): Remove once crbug.com/102004 is fixed. |
| 617 CHECK(initialized_on_UI_thread_); | 634 CHECK(initialized_on_UI_thread_); |
| 618 | 635 |
| 619 // TODO(jhawkins): Return to DCHECK once crbug.com/102004 is fixed. | 636 // TODO(jhawkins): Return to DCHECK once crbug.com/102004 is fixed. |
| 620 CHECK(profile_params_.get()); | 637 CHECK(profile_params_.get()); |
| 621 | 638 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 678 | 695 |
| 679 if (profile_params_->resource_prefetch_predictor_observer_.get()) { | 696 if (profile_params_->resource_prefetch_predictor_observer_.get()) { |
| 680 resource_prefetch_predictor_observer_.reset( | 697 resource_prefetch_predictor_observer_.reset( |
| 681 profile_params_->resource_prefetch_predictor_observer_.release()); | 698 profile_params_->resource_prefetch_predictor_observer_.release()); |
| 682 } | 699 } |
| 683 | 700 |
| 684 #if defined(ENABLE_MANAGED_USERS) | 701 #if defined(ENABLE_MANAGED_USERS) |
| 685 managed_mode_url_filter_ = profile_params_->managed_mode_url_filter; | 702 managed_mode_url_filter_ = profile_params_->managed_mode_url_filter; |
| 686 #endif | 703 #endif |
| 687 | 704 |
| 688 LazyInitializeInternal(profile_params_.get()); | 705 InitializeInternal(profile_params_.get(), |
| 706 blob_protocol_handler.Pass(), |
| 707 file_system_protocol_handler.Pass(), |
| 708 developer_protocol_handler.Pass(), |
| 709 chrome_protocol_handler.Pass(), |
| 710 chrome_devtools_protocol_handler.Pass()); |
| 689 | 711 |
| 690 profile_params_.reset(); | 712 profile_params_.reset(); |
| 691 initialized_ = true; | 713 initialized_ = true; |
| 692 } | 714 } |
| 693 | 715 |
| 694 void ProfileIOData::ApplyProfileParamsToContext( | 716 void ProfileIOData::ApplyProfileParamsToContext( |
| 695 ChromeURLRequestContext* context) const { | 717 ChromeURLRequestContext* context) const { |
| 696 context->set_http_user_agent_settings( | 718 context->set_http_user_agent_settings( |
| 697 chrome_http_user_agent_settings_.get()); | 719 chrome_http_user_agent_settings_.get()); |
| 698 context->set_ssl_config_service(profile_params_->ssl_config_service); | 720 context->set_ssl_config_service(profile_params_->ssl_config_service); |
| 699 } | 721 } |
| 700 | 722 |
| 701 scoped_ptr<net::URLRequestJobFactory> ProfileIOData::SetUpJobFactoryDefaults( | 723 scoped_ptr<net::URLRequestJobFactory> ProfileIOData::SetUpJobFactoryDefaults( |
| 702 scoped_ptr<net::URLRequestJobFactoryImpl> job_factory, | 724 scoped_ptr<net::URLRequestJobFactoryImpl> job_factory, |
| 703 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> | 725 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> |
| 704 protocol_handler_interceptor, | 726 protocol_handler_interceptor, |
| 705 net::NetworkDelegate* network_delegate, | 727 net::NetworkDelegate* network_delegate, |
| 706 net::FtpTransactionFactory* ftp_transaction_factory, | 728 net::FtpTransactionFactory* ftp_transaction_factory, |
| 707 net::FtpAuthCache* ftp_auth_cache) const { | 729 net::FtpAuthCache* ftp_auth_cache) const { |
| 708 // NOTE(willchan): Keep these protocol handlers in sync with | 730 // NOTE(willchan): Keep these protocol handlers in sync with |
| 709 // ProfileIOData::IsHandledProtocol(). | 731 // ProfileIOData::IsHandledProtocol(). |
| 710 bool set_protocol = job_factory->SetProtocolHandler( | 732 bool set_protocol = job_factory->SetProtocolHandler( |
| 711 chrome::kFileScheme, new net::FileProtocolHandler()); | 733 chrome::kFileScheme, new net::FileProtocolHandler()); |
| 712 DCHECK(set_protocol); | 734 DCHECK(set_protocol); |
| 713 | 735 |
| 736 DCHECK(extension_info_map_); |
| 714 set_protocol = job_factory->SetProtocolHandler( | 737 set_protocol = job_factory->SetProtocolHandler( |
| 715 extensions::kExtensionScheme, | 738 extensions::kExtensionScheme, |
| 716 CreateExtensionProtocolHandler(is_incognito(), GetExtensionInfoMap())); | 739 CreateExtensionProtocolHandler(is_incognito(), extension_info_map_)); |
| 717 DCHECK(set_protocol); | 740 DCHECK(set_protocol); |
| 718 set_protocol = job_factory->SetProtocolHandler( | 741 set_protocol = job_factory->SetProtocolHandler( |
| 719 chrome::kExtensionResourceScheme, | 742 chrome::kExtensionResourceScheme, |
| 720 CreateExtensionResourceProtocolHandler()); | 743 CreateExtensionResourceProtocolHandler()); |
| 721 DCHECK(set_protocol); | 744 DCHECK(set_protocol); |
| 722 set_protocol = job_factory->SetProtocolHandler( | 745 set_protocol = job_factory->SetProtocolHandler( |
| 723 chrome::kDataScheme, new net::DataProtocolHandler()); | 746 chrome::kDataScheme, new net::DataProtocolHandler()); |
| 724 DCHECK(set_protocol); | 747 DCHECK(set_protocol); |
| 725 #if defined(OS_CHROMEOS) | 748 #if defined(OS_CHROMEOS) |
| 726 if (!is_incognito() && profile_params_.get()) { | 749 if (!is_incognito() && profile_params_.get()) { |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 void ProfileIOData::SetCookieSettingsForTesting( | 844 void ProfileIOData::SetCookieSettingsForTesting( |
| 822 CookieSettings* cookie_settings) { | 845 CookieSettings* cookie_settings) { |
| 823 DCHECK(!cookie_settings_.get()); | 846 DCHECK(!cookie_settings_.get()); |
| 824 cookie_settings_ = cookie_settings; | 847 cookie_settings_ = cookie_settings; |
| 825 } | 848 } |
| 826 | 849 |
| 827 void ProfileIOData::set_signin_names_for_testing( | 850 void ProfileIOData::set_signin_names_for_testing( |
| 828 SigninNamesOnIOThread* signin_names) { | 851 SigninNamesOnIOThread* signin_names) { |
| 829 signin_names_.reset(signin_names); | 852 signin_names_.reset(signin_names); |
| 830 } | 853 } |
| OLD | NEW |