| Index: chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.cc
|
| diff --git a/chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.cc b/chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.cc
|
| index 3aafec6a14e627f70034c6b3d957f797dce4b0be..7cad5c39eb541aab09f8dbacc7a2ae967261c1a9 100644
|
| --- a/chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.cc
|
| +++ b/chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.cc
|
| @@ -31,17 +31,18 @@ class BrowsingDataServerBoundCertHelperImpl
|
| // Fetch the certs. This must be called in the IO thread.
|
| void FetchOnIOThread();
|
|
|
| + void OnFetchComplete(
|
| + const net::ServerBoundCertStore::ServerBoundCertList& cert_list);
|
| +
|
| // Notifies the completion callback. This must be called in the UI thread.
|
| - void NotifyInUIThread();
|
| + void NotifyInUIThread(
|
| + const net::ServerBoundCertStore::ServerBoundCertList& cert_list);
|
|
|
| // Delete a single cert. This must be called in IO thread.
|
| void DeleteOnIOThread(const std::string& server_id);
|
|
|
| - // Access to |server_bound_cert_list_| is triggered indirectly via the UI
|
| - // thread and guarded by |is_fetching_|. This means |server_bound_cert_list_|
|
| - // is only accessed while |is_fetching_| is true. The flag |is_fetching_| is
|
| - // only accessed on the UI thread.
|
| - net::ServerBoundCertStore::ServerBoundCertList server_bound_cert_list_;
|
| + // Called when deletion is done.
|
| + void DeleteCallback();
|
|
|
| // Indicates whether or not we're currently fetching information:
|
| // it's true when StartFetching() is called in the UI thread, and it's reset
|
| @@ -97,20 +98,28 @@ void BrowsingDataServerBoundCertHelperImpl::FetchOnIOThread() {
|
| request_context_getter_->GetURLRequestContext()->
|
| server_bound_cert_service()->GetCertStore();
|
| if (cert_store) {
|
| - server_bound_cert_list_.clear();
|
| - cert_store->GetAllServerBoundCerts(&server_bound_cert_list_);
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&BrowsingDataServerBoundCertHelperImpl::NotifyInUIThread,
|
| - this));
|
| + cert_store->GetAllServerBoundCerts(base::Bind(
|
| + &BrowsingDataServerBoundCertHelperImpl::OnFetchComplete, this));
|
| + } else {
|
| + OnFetchComplete(net::ServerBoundCertStore::ServerBoundCertList());
|
| }
|
| }
|
|
|
| -void BrowsingDataServerBoundCertHelperImpl::NotifyInUIThread() {
|
| +void BrowsingDataServerBoundCertHelperImpl::OnFetchComplete(
|
| + const net::ServerBoundCertStore::ServerBoundCertList& cert_list) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&BrowsingDataServerBoundCertHelperImpl::NotifyInUIThread,
|
| + this, cert_list));
|
| +}
|
| +
|
| +void BrowsingDataServerBoundCertHelperImpl::NotifyInUIThread(
|
| + const net::ServerBoundCertStore::ServerBoundCertList& cert_list) {
|
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| DCHECK(is_fetching_);
|
| is_fetching_ = false;
|
| - completion_callback_.Run(server_bound_cert_list_);
|
| + completion_callback_.Run(cert_list);
|
| completion_callback_.Reset();
|
| }
|
|
|
| @@ -121,16 +130,23 @@ void BrowsingDataServerBoundCertHelperImpl::DeleteOnIOThread(
|
| request_context_getter_->GetURLRequestContext()->
|
| server_bound_cert_service()->GetCertStore();
|
| if (cert_store) {
|
| - cert_store->DeleteServerBoundCert(server_id);
|
| - // Need to close open SSL connections which may be using the channel ids we
|
| - // are deleting.
|
| - // TODO(mattm): http://crbug.com/166069 Make the server bound cert
|
| - // service/store have observers that can notify relevant things directly.
|
| - request_context_getter_->GetURLRequestContext()->ssl_config_service()->
|
| - NotifySSLConfigChange();
|
| + cert_store->DeleteServerBoundCert(
|
| + server_id,
|
| + base::Bind(&BrowsingDataServerBoundCertHelperImpl::DeleteCallback,
|
| + this));
|
| }
|
| }
|
|
|
| +void BrowsingDataServerBoundCertHelperImpl::DeleteCallback() {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| + // Need to close open SSL connections which may be using the channel ids we
|
| + // are deleting.
|
| + // TODO(mattm): http://crbug.com/166069 Make the server bound cert
|
| + // service/store have observers that can notify relevant things directly.
|
| + request_context_getter_->GetURLRequestContext()->ssl_config_service()->
|
| + NotifySSLConfigChange();
|
| +}
|
| +
|
| } // namespace
|
|
|
| // static
|
|
|