Index: chrome/browser/profiles/profile_impl_io_data.cc |
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc |
index 87e8b891f3f9c6252b21302b33ba8d8a1b357873..95dd07c332f41deceeff51f3501f282773b07d4c 100644 |
--- a/chrome/browser/profiles/profile_impl_io_data.cc |
+++ b/chrome/browser/profiles/profile_impl_io_data.cc |
@@ -171,6 +171,8 @@ void ProfileImplIOData::Handle::Init( |
lazy_params->extensions_cookie_path = extensions_cookie_path; |
lazy_params->session_cookie_mode = session_cookie_mode; |
lazy_params->special_storage_policy = special_storage_policy; |
+ lazy_params->domain_reliability_monitor = |
+ std::move(domain_reliability_monitor); |
PrefService* pref_service = profile_->GetPrefs(); |
lazy_params->http_server_properties_manager.reset( |
@@ -188,11 +190,10 @@ void ProfileImplIOData::Handle::Init( |
io_data_->app_media_cache_max_size_ = media_cache_max_size; |
io_data_->predictor_.reset(predictor); |
- io_data_->domain_reliability_monitor_ = std::move(domain_reliability_monitor); |
io_data_->InitializeMetricsEnabledStateOnUIThread(); |
- if (io_data_->domain_reliability_monitor_) |
- io_data_->domain_reliability_monitor_->MoveToNetworkThread(); |
+ if (io_data_->lazy_params_->domain_reliability_monitor) |
+ io_data_->lazy_params_->domain_reliability_monitor->MoveToNetworkThread(); |
io_data_->previews_io_data_ = base::MakeUnique<previews::PreviewsIOData>( |
BrowserThread::GetTaskRunnerForThread(BrowserThread::UI), |
@@ -426,11 +427,15 @@ ProfileImplIOData::LazyParams::~LazyParams() {} |
ProfileImplIOData::ProfileImplIOData() |
: ProfileIOData(Profile::REGULAR_PROFILE), |
http_server_properties_manager_(NULL), |
+ domain_reliability_monitor_(nullptr), |
app_cache_max_size_(0), |
app_media_cache_max_size_(0) { |
} |
ProfileImplIOData::~ProfileImplIOData() { |
+ if (domain_reliability_monitor_) |
+ domain_reliability_monitor_->Shutdown(); |
+ |
DestroyResourceContext(); |
if (media_request_context_) |
@@ -459,13 +464,18 @@ void ProfileImplIOData::InitializeInternal( |
IOThread* const io_thread = profile_params->io_thread; |
IOThread::Globals* const io_thread_globals = io_thread->globals(); |
- if (domain_reliability_monitor_) { |
- domain_reliability::DomainReliabilityMonitor* monitor = |
- domain_reliability_monitor_.get(); |
- monitor->InitURLRequestContext(main_context); |
- monitor->AddBakedInConfigs(); |
- monitor->SetDiscardUploads(!GetMetricsEnabledStateOnIOThread()); |
- chrome_network_delegate->set_domain_reliability_monitor(monitor); |
+ if (lazy_params_->domain_reliability_monitor) { |
+ // Hold on to a raw pointer to call Shutdown() in ~ProfileImplIOData. |
+ domain_reliability_monitor_ = |
+ lazy_params_->domain_reliability_monitor.get(); |
+ |
+ domain_reliability_monitor_->InitURLRequestContext(main_context); |
+ domain_reliability_monitor_->AddBakedInConfigs(); |
+ domain_reliability_monitor_->SetDiscardUploads( |
+ !GetMetricsEnabledStateOnIOThread()); |
+ |
+ chrome_network_delegate->set_domain_reliability_monitor( |
+ std::move(lazy_params_->domain_reliability_monitor)); |
} |
ApplyProfileParamsToContext(main_context); |