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

Unified Diff: chrome/browser/chromeos/policy/policy_cert_verifier.cc

Issue 24153012: Fix cyclic dependency between ProfilePolicyConnector and PrefService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use callback_list in PolicyCertVerifier. Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/policy/policy_cert_verifier.cc
diff --git a/chrome/browser/chromeos/policy/policy_cert_verifier.cc b/chrome/browser/chromeos/policy/policy_cert_verifier.cc
index 307cdd01bad7994d548531f6a850171a8bd808d1..e56f69fb15e88b44ec39d1d8edcaf2443ef67914 100644
--- a/chrome/browser/chromeos/policy/policy_cert_verifier.cc
+++ b/chrome/browser/chromeos/policy/policy_cert_verifier.cc
@@ -5,7 +5,6 @@
#include "chrome/browser/chromeos/policy/policy_cert_verifier.h"
#include "base/logging.h"
-#include "base/memory/ref_counted.h"
#include "chrome/browser/browser_process.h"
#include "content/public/browser/browser_thread.h"
#include "net/base/net_errors.h"
@@ -14,40 +13,16 @@
namespace policy {
-namespace {
-
-void MaybeSignalAnchorUse(int error,
- const base::Closure& anchor_used_callback,
- const net::CertVerifyResult& verify_result) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
- if (error != net::OK || !verify_result.is_issued_by_additional_trust_anchor ||
- anchor_used_callback.is_null()) {
- return;
- }
- anchor_used_callback.Run();
-}
-
-void CompleteAndSignalAnchorUse(
- const base::Closure& anchor_used_callback,
- const net::CompletionCallback& completion_callback,
- const net::CertVerifyResult* verify_result,
- int error) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
- MaybeSignalAnchorUse(error, anchor_used_callback, *verify_result);
- if (!completion_callback.is_null())
- completion_callback.Run(error);
-}
-
-} // namespace
-
-PolicyCertVerifier::PolicyCertVerifier(
- const base::Closure& anchor_used_callback)
- : anchor_used_callback_(anchor_used_callback) {
+PolicyCertVerifier::PolicyCertVerifier()
+ : weak_ptr_factory_(this), weak_ptr_(weak_ptr_factory_.GetWeakPtr()) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ anchor_used_callback_list_.reset(new base::CallbackList<void()>());
}
PolicyCertVerifier::~PolicyCertVerifier() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+ DCHECK(!anchor_used_callback_list_);
+ DCHECK(!weak_ptr_factory_.HasWeakPtrs());
}
void PolicyCertVerifier::InitializeOnIOThread() {
@@ -64,6 +39,20 @@ void PolicyCertVerifier::InitializeOnIOThread() {
delegate_.reset(verifier);
}
+void PolicyCertVerifier::ShutdownOnUIThread() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ anchor_used_callback_list_.reset();
+ weak_ptr_factory_.InvalidateWeakPtrs();
+}
+
+scoped_ptr<base::CallbackList<void()>::Subscription>
+PolicyCertVerifier::RegisterAnchorUsedCallback(const base::Closure& cb) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ if (anchor_used_callback_list_)
+ return anchor_used_callback_list_->Add(cb);
+ return scoped_ptr<base::CallbackList<void()>::Subscription>();
+}
+
void PolicyCertVerifier::SetTrustAnchors(
const net::CertificateList& trust_anchors) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
@@ -82,13 +71,13 @@ int PolicyCertVerifier::Verify(
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
DCHECK(delegate_);
net::CompletionCallback wrapped_callback =
- base::Bind(&CompleteAndSignalAnchorUse,
- anchor_used_callback_,
+ base::Bind(&PolicyCertVerifier::CompleteAndSignalAnchorUse,
completion_callback,
- verify_result);
+ verify_result,
+ weak_ptr_factory_.GetWeakPtr());
Joao da Silva 2013/10/16 12:44:58 can't do, this is on IO. Use |weak_ptr_| here
pneubeck (no reviews) 2013/10/22 18:47:41 doh. Of course. That was the original intention wh
int error = delegate_->Verify(cert, hostname, flags, crl_set, verify_result,
wrapped_callback, out_req, net_log);
- MaybeSignalAnchorUse(error, anchor_used_callback_, *verify_result);
+ MaybeSignalAnchorUse(error, *verify_result, weak_ptr_factory_.GetWeakPtr());
Joao da Silva 2013/10/16 12:44:58 Same here, use |weak_ptr_|
pneubeck (no reviews) 2013/10/22 18:47:41 Done.
return error;
}
@@ -102,4 +91,36 @@ const net::CertificateList& PolicyCertVerifier::GetAdditionalTrustAnchors() {
return trust_anchors_;
}
+void PolicyCertVerifier::RunCallback() {
Joao da Silva 2013/10/16 12:44:58 rename to NotifyOnUI
pneubeck (no reviews) 2013/10/22 18:47:41 Done.
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ anchor_used_callback_list_->Notify();
+}
+
+// static
+void PolicyCertVerifier::MaybeSignalAnchorUse(
+ int error,
+ const net::CertVerifyResult& verify_result,
+ const base::WeakPtr<PolicyCertVerifier>& weak_ptr) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+ if (error != net::OK || !verify_result.is_issued_by_additional_trust_anchor)
+ return;
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&PolicyCertVerifier::RunCallback, weak_ptr));
+}
+
+// static
+void PolicyCertVerifier::CompleteAndSignalAnchorUse(
+ const net::CompletionCallback& completion_callback,
+ const net::CertVerifyResult* verify_result,
+ const base::WeakPtr<PolicyCertVerifier>& weak_ptr,
+ int error) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+ MaybeSignalAnchorUse(error, *verify_result, weak_ptr);
+ if (!completion_callback.is_null())
+ completion_callback.Run(error);
+}
+
} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698