| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ios/web/public/browser_state.h" | 5 #include "ios/web/public/browser_state.h" |
| 6 | 6 |
| 7 #include "base/location.h" | 7 #include "base/location.h" |
| 8 #include "base/memory/ptr_util.h" |
| 8 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 9 #include "ios/web/active_state_manager_impl.h" | 10 #include "ios/web/active_state_manager_impl.h" |
| 10 #include "ios/web/public/certificate_policy_cache.h" | 11 #include "ios/web/public/certificate_policy_cache.h" |
| 11 #include "ios/web/public/web_thread.h" | 12 #include "ios/web/public/web_thread.h" |
| 12 #include "ios/web/webui/url_data_manager_ios_backend.h" | 13 #include "ios/web/webui/url_data_manager_ios_backend.h" |
| 13 | 14 |
| 14 #if !defined(__has_feature) || !__has_feature(objc_arc) | 15 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 15 #error "This file requires ARC support." | 16 #error "This file requires ARC support." |
| 16 #endif | 17 #endif |
| 17 | 18 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 33 | 34 |
| 34 scoped_refptr<CertificatePolicyCache> policy_cache; | 35 scoped_refptr<CertificatePolicyCache> policy_cache; |
| 35 }; | 36 }; |
| 36 } | 37 } |
| 37 | 38 |
| 38 // static | 39 // static |
| 39 scoped_refptr<CertificatePolicyCache> BrowserState::GetCertificatePolicyCache( | 40 scoped_refptr<CertificatePolicyCache> BrowserState::GetCertificatePolicyCache( |
| 40 BrowserState* browser_state) { | 41 BrowserState* browser_state) { |
| 41 DCHECK_CURRENTLY_ON(WebThread::UI); | 42 DCHECK_CURRENTLY_ON(WebThread::UI); |
| 42 if (!browser_state->GetUserData(kCertificatePolicyCacheKeyName)) { | 43 if (!browser_state->GetUserData(kCertificatePolicyCacheKeyName)) { |
| 43 CertificatePolicyCacheHandle* cert_cache_service_handle = | |
| 44 new CertificatePolicyCacheHandle(new CertificatePolicyCache()); | |
| 45 | |
| 46 browser_state->SetUserData(kCertificatePolicyCacheKeyName, | 44 browser_state->SetUserData(kCertificatePolicyCacheKeyName, |
| 47 cert_cache_service_handle); | 45 base::MakeUnique<CertificatePolicyCacheHandle>( |
| 46 new CertificatePolicyCache())); |
| 48 } | 47 } |
| 49 | 48 |
| 50 CertificatePolicyCacheHandle* handle = | 49 CertificatePolicyCacheHandle* handle = |
| 51 static_cast<CertificatePolicyCacheHandle*>( | 50 static_cast<CertificatePolicyCacheHandle*>( |
| 52 browser_state->GetUserData(kCertificatePolicyCacheKeyName)); | 51 browser_state->GetUserData(kCertificatePolicyCacheKeyName)); |
| 53 return handle->policy_cache; | 52 return handle->policy_cache; |
| 54 } | 53 } |
| 55 | 54 |
| 56 // static | 55 // static |
| 57 bool BrowserState::HasActiveStateManager(BrowserState* browser_state) { | 56 bool BrowserState::HasActiveStateManager(BrowserState* browser_state) { |
| 58 DCHECK_CURRENTLY_ON(WebThread::UI); | 57 DCHECK_CURRENTLY_ON(WebThread::UI); |
| 59 return browser_state->GetUserData(kActiveStateManagerKeyName) != nullptr; | 58 return browser_state->GetUserData(kActiveStateManagerKeyName) != nullptr; |
| 60 } | 59 } |
| 61 | 60 |
| 62 // static | 61 // static |
| 63 ActiveStateManager* BrowserState::GetActiveStateManager( | 62 ActiveStateManager* BrowserState::GetActiveStateManager( |
| 64 BrowserState* browser_state) { | 63 BrowserState* browser_state) { |
| 65 DCHECK_CURRENTLY_ON(WebThread::UI); | 64 DCHECK_CURRENTLY_ON(WebThread::UI); |
| 66 DCHECK(browser_state); | 65 DCHECK(browser_state); |
| 67 | 66 |
| 68 ActiveStateManagerImpl* active_state_manager = | 67 ActiveStateManagerImpl* active_state_manager = |
| 69 static_cast<ActiveStateManagerImpl*>( | 68 static_cast<ActiveStateManagerImpl*>( |
| 70 browser_state->GetUserData(kActiveStateManagerKeyName)); | 69 browser_state->GetUserData(kActiveStateManagerKeyName)); |
| 71 if (!active_state_manager) { | 70 if (!active_state_manager) { |
| 72 active_state_manager = new ActiveStateManagerImpl(browser_state); | 71 active_state_manager = new ActiveStateManagerImpl(browser_state); |
| 73 browser_state->SetUserData(kActiveStateManagerKeyName, | 72 browser_state->SetUserData(kActiveStateManagerKeyName, |
| 74 active_state_manager); | 73 base::WrapUnique(active_state_manager)); |
| 75 } | 74 } |
| 76 return active_state_manager; | 75 return active_state_manager; |
| 77 } | 76 } |
| 78 | 77 |
| 79 BrowserState::BrowserState() : url_data_manager_ios_backend_(nullptr) { | 78 BrowserState::BrowserState() : url_data_manager_ios_backend_(nullptr) { |
| 80 // (Refcounted)?BrowserStateKeyedServiceFactories needs to be able to convert | 79 // (Refcounted)?BrowserStateKeyedServiceFactories needs to be able to convert |
| 81 // a base::SupportsUserData to a BrowserState. Moreover, since the factories | 80 // a base::SupportsUserData to a BrowserState. Moreover, since the factories |
| 82 // may be passed a content::BrowserContext instead of a BrowserState, attach | 81 // may be passed a content::BrowserContext instead of a BrowserState, attach |
| 83 // an empty object to this via a private key. | 82 // an empty object to this via a private key. |
| 84 SetUserData(kBrowserStateIdentifierKey, new SupportsUserData::Data); | 83 SetUserData(kBrowserStateIdentifierKey, |
| 84 base::MakeUnique<SupportsUserData::Data>()); |
| 85 } | 85 } |
| 86 | 86 |
| 87 BrowserState::~BrowserState() { | 87 BrowserState::~BrowserState() { |
| 88 // Delete the URLDataManagerIOSBackend instance on the IO thread if it has | 88 // Delete the URLDataManagerIOSBackend instance on the IO thread if it has |
| 89 // been created. Note that while this check can theoretically race with a | 89 // been created. Note that while this check can theoretically race with a |
| 90 // call to |GetURLDataManagerIOSBackendOnIOThread()|, if any clients of this | 90 // call to |GetURLDataManagerIOSBackendOnIOThread()|, if any clients of this |
| 91 // BrowserState are still accessing it on the IO thread at this point, | 91 // BrowserState are still accessing it on the IO thread at this point, |
| 92 // they're going to have a bad time anyway. | 92 // they're going to have a bad time anyway. |
| 93 if (url_data_manager_ios_backend_) { | 93 if (url_data_manager_ios_backend_) { |
| 94 bool posted = web::WebThread::DeleteSoon(web::WebThread::IO, FROM_HERE, | 94 bool posted = web::WebThread::DeleteSoon(web::WebThread::IO, FROM_HERE, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 109 // static | 109 // static |
| 110 BrowserState* BrowserState::FromSupportsUserData( | 110 BrowserState* BrowserState::FromSupportsUserData( |
| 111 base::SupportsUserData* supports_user_data) { | 111 base::SupportsUserData* supports_user_data) { |
| 112 if (!supports_user_data || | 112 if (!supports_user_data || |
| 113 !supports_user_data->GetUserData(kBrowserStateIdentifierKey)) { | 113 !supports_user_data->GetUserData(kBrowserStateIdentifierKey)) { |
| 114 return nullptr; | 114 return nullptr; |
| 115 } | 115 } |
| 116 return static_cast<BrowserState*>(supports_user_data); | 116 return static_cast<BrowserState*>(supports_user_data); |
| 117 } | 117 } |
| 118 } // namespace web | 118 } // namespace web |
| OLD | NEW |