| Index: chrome/browser/safe_browsing/certificate_reporting_service.cc
|
| diff --git a/chrome/browser/safe_browsing/certificate_reporting_service.cc b/chrome/browser/safe_browsing/certificate_reporting_service.cc
|
| index f03baa6a50b640a812e75ff4138dafaae261c12c..9bcecb8a5ef09f64b662356e4190a9317d61355c 100644
|
| --- a/chrome/browser/safe_browsing/certificate_reporting_service.cc
|
| +++ b/chrome/browser/safe_browsing/certificate_reporting_service.cc
|
| @@ -35,6 +35,11 @@ void RecordUMAOnFailure(int net_error) {
|
| UMA_HISTOGRAM_SPARSE_SLOWLY("SSL.CertificateErrorReportFailure", -net_error);
|
| }
|
|
|
| +void CleanupOnIOThread(
|
| + std::unique_ptr<CertificateReportingService::Reporter> reporter) {
|
| + reporter.reset();
|
| +}
|
| +
|
| } // namespace
|
|
|
| CertificateReportingService::BoundedReportList::BoundedReportList(
|
| @@ -164,7 +169,6 @@ CertificateReportingService::CertificateReportingService(
|
| base::TimeDelta max_report_age,
|
| base::Clock* clock)
|
| : pref_service_(*profile->GetPrefs()),
|
| - enabled_(true),
|
| url_request_context_(nullptr),
|
| max_queued_report_count_(max_queued_report_count),
|
| max_report_age_(max_report_age),
|
| @@ -187,7 +191,7 @@ CertificateReportingService::CertificateReportingService(
|
| content::BrowserThread::PostTask(
|
| content::BrowserThread::IO, FROM_HERE,
|
| base::Bind(&CertificateReportingService::InitializeOnIOThread,
|
| - base::Unretained(this), enabled_, url_request_context_getter,
|
| + base::Unretained(this), true, url_request_context_getter,
|
| max_queued_report_count_, max_report_age_, clock_,
|
| server_public_key_, server_public_key_version_));
|
| }
|
| @@ -199,8 +203,10 @@ CertificateReportingService::~CertificateReportingService() {
|
| void CertificateReportingService::Shutdown() {
|
| // Shutdown will be called twice: Once after SafeBrowsing shuts down, and once
|
| // when all KeyedServices shut down. All calls after the first one are no-op.
|
| - enabled_ = false;
|
| - Reset();
|
| + url_request_context_ = nullptr;
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO, FROM_HERE,
|
| + base::Bind(&CleanupOnIOThread, base::Passed(std::move(reporter_))));
|
| }
|
|
|
| void CertificateReportingService::Send(const std::string& serialized_report) {
|
| @@ -243,8 +249,16 @@ void CertificateReportingService::InitializeOnIOThread(
|
|
|
| void CertificateReportingService::SetEnabled(bool enabled) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| - enabled_ = enabled;
|
| - Reset();
|
| + // Don't reset if the service is already shut down.
|
| + if (!url_request_context_)
|
| + return;
|
| +
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO, FROM_HERE,
|
| + base::Bind(&CertificateReportingService::ResetOnIOThread,
|
| + base::Unretained(this), enabled, url_request_context_,
|
| + max_queued_report_count_, max_report_age_, clock_,
|
| + server_public_key_, server_public_key_version_));
|
| }
|
|
|
| CertificateReportingService::Reporter*
|
| @@ -257,15 +271,6 @@ GURL CertificateReportingService::GetReportingURLForTesting() {
|
| return GURL(kExtendedReportingUploadUrl);
|
| }
|
|
|
| -void CertificateReportingService::Reset() {
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&CertificateReportingService::ResetOnIOThread,
|
| - base::Unretained(this), enabled_, url_request_context_,
|
| - max_queued_report_count_, max_report_age_, clock_,
|
| - server_public_key_, server_public_key_version_));
|
| -}
|
| -
|
| void CertificateReportingService::ResetOnIOThread(
|
| bool enabled,
|
| net::URLRequestContext* url_request_context,
|
| @@ -277,7 +282,7 @@ void CertificateReportingService::ResetOnIOThread(
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| // url_request_context_ is null during shutdown.
|
| if (!enabled || !url_request_context) {
|
| - reporter_.reset(nullptr);
|
| + reporter_.reset();
|
| return;
|
| }
|
| std::unique_ptr<certificate_reporting::ErrorReporter> error_reporter;
|
| @@ -293,7 +298,6 @@ void CertificateReportingService::ResetOnIOThread(
|
| url_request_context, GURL(kExtendedReportingUploadUrl),
|
| net::ReportSender::DO_NOT_SEND_COOKIES));
|
| }
|
| -
|
| reporter_.reset(
|
| new Reporter(std::move(error_reporter),
|
| std::unique_ptr<BoundedReportList>(
|
|
|