| 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() {
|
|
|