Index: ios/web/browser_state.cc |
diff --git a/ios/web/browser_state.cc b/ios/web/browser_state.cc |
index 5a8c03270ef169aadb6ede59f61341ee33c24d2c..c7ce99fd31d4e5877211953300d8e164264d76ef 100644 |
--- a/ios/web/browser_state.cc |
+++ b/ios/web/browser_state.cc |
@@ -4,11 +4,44 @@ |
#include "ios/web/public/browser_state.h" |
+#include "base/memory/ref_counted.h" |
+#include "ios/web/public/certificate_policy_cache.h" |
+#include "ios/web/public/web_thread.h" |
+ |
namespace web { |
namespace { |
// Private key used for safe conversion of base::SupportsUserData to |
// web::BrowserState in web::BrowserState::FromSupportsUserData. |
const char kBrowserStateIdentifierKey[] = "BrowserStateIdentifierKey"; |
+// Data key names. |
+const char kCertificatePolicyCacheKeyName[] = "cert_policy_cache"; |
+ |
+// Wraps a CertificatePolicyCache as a SupportsUserData::Data; this is necessary |
+// since reference counted objects can't be user data. |
+struct CertificatePolicyCacheHandle : public base::SupportsUserData::Data { |
+ explicit CertificatePolicyCacheHandle(CertificatePolicyCache* cache) |
+ : policy_cache(cache) {} |
+ |
+ scoped_refptr<CertificatePolicyCache> policy_cache; |
+}; |
+} |
+ |
+// static |
+scoped_refptr<CertificatePolicyCache> BrowserState::GetCertificatePolicyCache( |
+ BrowserState* browser_state) { |
+ DCHECK_CURRENTLY_ON_WEB_THREAD(WebThread::UI); |
+ if (!browser_state->GetUserData(kCertificatePolicyCacheKeyName)) { |
+ CertificatePolicyCacheHandle* cert_cache_service_handle = |
+ new CertificatePolicyCacheHandle(new CertificatePolicyCache()); |
+ |
+ browser_state->SetUserData(kCertificatePolicyCacheKeyName, |
+ cert_cache_service_handle); |
+ } |
+ |
+ CertificatePolicyCacheHandle* handle = |
+ static_cast<CertificatePolicyCacheHandle*>( |
+ browser_state->GetUserData(kCertificatePolicyCacheKeyName)); |
+ return handle->policy_cache; |
} |
BrowserState::BrowserState() { |