| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/public/browser/browser_context.h" | 5 #include "content/public/browser/browser_context.h" |
| 6 | 6 |
| 7 #include "content/browser/appcache/chrome_appcache_service.h" | 7 #include "content/browser/appcache/chrome_appcache_service.h" |
| 8 #include "content/browser/fileapi/browser_file_system_helper.h" | 8 #include "content/browser/fileapi/browser_file_system_helper.h" |
| 9 #include "content/browser/in_process_webkit/dom_storage_context_impl.h" | 9 #include "content/browser/in_process_webkit/dom_storage_context_impl.h" |
| 10 #include "content/browser/in_process_webkit/indexed_db_context_impl.h" | 10 #include "content/browser/in_process_webkit/indexed_db_context_impl.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 // Key names on BrowserContext. | 27 // Key names on BrowserContext. |
| 28 static const char* kAppCacheServicKeyName = "content_appcache_service_tracker"; | 28 static const char* kAppCacheServicKeyName = "content_appcache_service_tracker"; |
| 29 static const char* kDatabaseTrackerKeyName = "content_database_tracker"; | 29 static const char* kDatabaseTrackerKeyName = "content_database_tracker"; |
| 30 static const char* kDOMStorageContextKeyName = "content_dom_storage_context"; | 30 static const char* kDOMStorageContextKeyName = "content_dom_storage_context"; |
| 31 static const char* kFileSystemContextKeyName = "content_file_system_context"; | 31 static const char* kFileSystemContextKeyName = "content_file_system_context"; |
| 32 static const char* kIndexedDBContextKeyName = "content_indexed_db_context"; | 32 static const char* kIndexedDBContextKeyName = "content_indexed_db_context"; |
| 33 static const char* kQuotaManagerKeyName = "content_quota_manager"; | 33 static const char* kQuotaManagerKeyName = "content_quota_manager"; |
| 34 | 34 |
| 35 namespace content { | 35 namespace content { |
| 36 | 36 |
| 37 namespace { | |
| 38 | |
| 39 void CreateQuotaManagerAndClients(BrowserContext* context) { | 37 void CreateQuotaManagerAndClients(BrowserContext* context) { |
| 40 if (context->GetUserData(kQuotaManagerKeyName)) { | 38 if (context->GetUserData(kQuotaManagerKeyName)) { |
| 41 DCHECK(context->GetUserData(kDatabaseTrackerKeyName)); | 39 DCHECK(context->GetUserData(kDatabaseTrackerKeyName)); |
| 42 DCHECK(context->GetUserData(kDOMStorageContextKeyName)); | 40 DCHECK(context->GetUserData(kDOMStorageContextKeyName)); |
| 43 DCHECK(context->GetUserData(kFileSystemContextKeyName)); | 41 DCHECK(context->GetUserData(kFileSystemContextKeyName)); |
| 44 DCHECK(context->GetUserData(kIndexedDBContextKeyName)); | 42 DCHECK(context->GetUserData(kIndexedDBContextKeyName)); |
| 45 return; | 43 return; |
| 46 } | 44 } |
| 47 | 45 |
| 48 // All of the clients have to be created and registered with the | 46 // All of the clients have to be created and registered with the |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 } | 108 } |
| 111 | 109 |
| 112 void SaveSessionStateOnIOThread(ResourceContext* resource_context) { | 110 void SaveSessionStateOnIOThread(ResourceContext* resource_context) { |
| 113 resource_context->GetRequestContext()->cookie_store()->GetCookieMonster()-> | 111 resource_context->GetRequestContext()->cookie_store()->GetCookieMonster()-> |
| 114 SaveSessionCookies(); | 112 SaveSessionCookies(); |
| 115 ResourceContext::GetAppCacheService(resource_context)->set_save_session_state( | 113 ResourceContext::GetAppCacheService(resource_context)->set_save_session_state( |
| 116 true); | 114 true); |
| 117 } | 115 } |
| 118 | 116 |
| 119 void SaveSessionStateOnWebkitThread( | 117 void SaveSessionStateOnWebkitThread( |
| 118 scoped_refptr<DOMStorageContextImpl> dom_storage_context, |
| 120 scoped_refptr<IndexedDBContextImpl> indexed_db_context) { | 119 scoped_refptr<IndexedDBContextImpl> indexed_db_context) { |
| 120 dom_storage_context->SaveSessionState(); |
| 121 indexed_db_context->SaveSessionState(); | 121 indexed_db_context->SaveSessionState(); |
| 122 } | 122 } |
| 123 | 123 |
| 124 void PurgeMemoryOnIOThread(ResourceContext* resource_context) { | 124 void PurgeMemoryOnIOThread(ResourceContext* resource_context) { |
| 125 ResourceContext::GetAppCacheService(resource_context)->PurgeMemory(); | 125 ResourceContext::GetAppCacheService(resource_context)->PurgeMemory(); |
| 126 } | 126 } |
| 127 | 127 |
| 128 DOMStorageContextImpl* GetDOMStorageContextImpl(BrowserContext* context) { | 128 void PurgeMemoryOnWebkitThread( |
| 129 return static_cast<DOMStorageContextImpl*>( | 129 scoped_refptr<DOMStorageContextImpl> dom_storage_context) { |
| 130 BrowserContext::GetDOMStorageContext(context)); | 130 dom_storage_context->PurgeMemory(); |
| 131 } | 131 } |
| 132 | 132 |
| 133 } // namespace | |
| 134 | |
| 135 QuotaManager* BrowserContext::GetQuotaManager(BrowserContext* context) { | 133 QuotaManager* BrowserContext::GetQuotaManager(BrowserContext* context) { |
| 136 CreateQuotaManagerAndClients(context); | 134 CreateQuotaManagerAndClients(context); |
| 137 return UserDataAdapter<QuotaManager>::Get(context, kQuotaManagerKeyName); | 135 return UserDataAdapter<QuotaManager>::Get(context, kQuotaManagerKeyName); |
| 138 } | 136 } |
| 139 | 137 |
| 140 DOMStorageContext* BrowserContext::GetDOMStorageContext( | 138 DOMStorageContext* BrowserContext::GetDOMStorageContext( |
| 141 BrowserContext* context) { | 139 BrowserContext* context) { |
| 142 CreateQuotaManagerAndClients(context); | 140 CreateQuotaManagerAndClients(context); |
| 143 return UserDataAdapter<DOMStorageContextImpl>::Get( | 141 return UserDataAdapter<DOMStorageContextImpl>::Get( |
| 144 context, kDOMStorageContextKeyName); | 142 context, kDOMStorageContextKeyName); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 void BrowserContext::SaveSessionState(BrowserContext* browser_context) { | 181 void BrowserContext::SaveSessionState(BrowserContext* browser_context) { |
| 184 GetDatabaseTracker(browser_context)->SaveSessionState(); | 182 GetDatabaseTracker(browser_context)->SaveSessionState(); |
| 185 | 183 |
| 186 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { | 184 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { |
| 187 BrowserThread::PostTask( | 185 BrowserThread::PostTask( |
| 188 BrowserThread::IO, FROM_HERE, | 186 BrowserThread::IO, FROM_HERE, |
| 189 base::Bind(&SaveSessionStateOnIOThread, | 187 base::Bind(&SaveSessionStateOnIOThread, |
| 190 browser_context->GetResourceContext())); | 188 browser_context->GetResourceContext())); |
| 191 } | 189 } |
| 192 | 190 |
| 193 GetDOMStorageContextImpl(browser_context)->SaveSessionState(); | |
| 194 | |
| 195 if (BrowserThread::IsMessageLoopValid(BrowserThread::WEBKIT_DEPRECATED)) { | 191 if (BrowserThread::IsMessageLoopValid(BrowserThread::WEBKIT_DEPRECATED)) { |
| 192 DOMStorageContextImpl* dom_context = static_cast<DOMStorageContextImpl*>( |
| 193 GetDOMStorageContext(browser_context)); |
| 196 IndexedDBContextImpl* indexed_db = static_cast<IndexedDBContextImpl*>( | 194 IndexedDBContextImpl* indexed_db = static_cast<IndexedDBContextImpl*>( |
| 197 GetIndexedDBContext(browser_context)); | 195 GetIndexedDBContext(browser_context)); |
| 198 BrowserThread::PostTask( | 196 BrowserThread::PostTask( |
| 199 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, | 197 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, |
| 200 base::Bind(&SaveSessionStateOnWebkitThread, | 198 base::Bind(&SaveSessionStateOnWebkitThread, |
| 199 make_scoped_refptr(dom_context), |
| 201 make_scoped_refptr(indexed_db))); | 200 make_scoped_refptr(indexed_db))); |
| 202 } | 201 } |
| 203 } | 202 } |
| 204 | 203 |
| 205 void BrowserContext::ClearLocalOnDestruction(BrowserContext* browser_context) { | 204 void BrowserContext::ClearLocalOnDestruction(BrowserContext* browser_context) { |
| 206 GetDOMStorageContextImpl(browser_context)->SetClearLocalState(true); | 205 DOMStorageContextImpl* dom_context = static_cast<DOMStorageContextImpl*>( |
| 206 GetDOMStorageContext(browser_context)); |
| 207 dom_context->set_clear_local_state_on_exit(true); |
| 207 | 208 |
| 208 IndexedDBContextImpl* indexed_db = static_cast<IndexedDBContextImpl*>( | 209 IndexedDBContextImpl* indexed_db = static_cast<IndexedDBContextImpl*>( |
| 209 GetIndexedDBContext(browser_context)); | 210 GetIndexedDBContext(browser_context)); |
| 210 indexed_db->set_clear_local_state_on_exit(true); | 211 indexed_db->set_clear_local_state_on_exit(true); |
| 211 | 212 |
| 212 GetDatabaseTracker(browser_context)->SetClearLocalStateOnExit(true); | 213 GetDatabaseTracker(browser_context)->SetClearLocalStateOnExit(true); |
| 213 | 214 |
| 214 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { | 215 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { |
| 215 BrowserThread::PostTask( | 216 BrowserThread::PostTask( |
| 216 BrowserThread::IO, FROM_HERE, | 217 BrowserThread::IO, FROM_HERE, |
| 217 base::Bind(&appcache::AppCacheService::set_clear_local_state_on_exit, | 218 base::Bind(&appcache::AppCacheService::set_clear_local_state_on_exit, |
| 218 base::Unretained(GetAppCacheService(browser_context)), true)); | 219 base::Unretained(GetAppCacheService(browser_context)), true)); |
| 219 } | 220 } |
| 220 } | 221 } |
| 221 | 222 |
| 222 void BrowserContext::PurgeMemory(BrowserContext* browser_context) { | 223 void BrowserContext::PurgeMemory(BrowserContext* browser_context) { |
| 223 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { | 224 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { |
| 224 BrowserThread::PostTask( | 225 BrowserThread::PostTask( |
| 225 BrowserThread::IO, FROM_HERE, | 226 BrowserThread::IO, FROM_HERE, |
| 226 base::Bind(&PurgeMemoryOnIOThread, | 227 base::Bind(&PurgeMemoryOnIOThread, |
| 227 browser_context->GetResourceContext())); | 228 browser_context->GetResourceContext())); |
| 228 } | 229 } |
| 229 | 230 |
| 230 GetDOMStorageContextImpl(browser_context)->PurgeMemory(); | 231 if (BrowserThread::IsMessageLoopValid(BrowserThread::WEBKIT_DEPRECATED)) { |
| 232 DOMStorageContextImpl* dom_context = static_cast<DOMStorageContextImpl*>( |
| 233 GetDOMStorageContext(browser_context)); |
| 234 BrowserThread::PostTask( |
| 235 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, |
| 236 base::Bind(&PurgeMemoryOnWebkitThread, |
| 237 make_scoped_refptr(dom_context))); |
| 238 } |
| 231 } | 239 } |
| 232 | 240 |
| 233 BrowserContext::~BrowserContext() { | 241 BrowserContext::~BrowserContext() { |
| 234 // These message loop checks are just to avoid leaks in unittests. | 242 // These message loop checks are just to avoid leaks in unittests. |
| 235 if (GetUserData(kDatabaseTrackerKeyName) && | 243 if (GetUserData(kDatabaseTrackerKeyName) && |
| 236 BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) { | 244 BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) { |
| 237 BrowserThread::PostTask( | 245 BrowserThread::PostTask( |
| 238 BrowserThread::FILE, FROM_HERE, | 246 BrowserThread::FILE, FROM_HERE, |
| 239 base::Bind(&webkit_database::DatabaseTracker::Shutdown, | 247 base::Bind(&webkit_database::DatabaseTracker::Shutdown, |
| 240 GetDatabaseTracker(this))); | 248 GetDatabaseTracker(this))); |
| 241 } | 249 } |
| 242 | 250 |
| 243 #ifdef ENABLE_NEW_DOM_STORAGE_BACKEND | |
| 244 if (GetUserData(kDOMStorageContextKeyName)) | |
| 245 GetDOMStorageContextImpl(this)->Shutdown(); | |
| 246 #else | |
| 247 if (GetUserData(kDOMStorageContextKeyName) && | 251 if (GetUserData(kDOMStorageContextKeyName) && |
| 248 BrowserThread::IsMessageLoopValid(BrowserThread::WEBKIT_DEPRECATED)) { | 252 BrowserThread::IsMessageLoopValid(BrowserThread::WEBKIT_DEPRECATED)) { |
| 249 DOMStorageContextImpl* dom_storage_context = | 253 DOMStorageContextImpl* dom_storage_context = |
| 250 (static_cast<UserDataAdapter<DOMStorageContextImpl>*>( | 254 (static_cast<UserDataAdapter<DOMStorageContextImpl>*>( |
| 251 GetUserData(kDOMStorageContextKeyName)))->release(); | 255 GetUserData(kDOMStorageContextKeyName)))->release(); |
| 252 BrowserThread::ReleaseSoon( | 256 BrowserThread::ReleaseSoon( |
| 253 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, dom_storage_context); | 257 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, dom_storage_context); |
| 254 } | 258 } |
| 255 #endif | |
| 256 } | 259 } |
| 257 | 260 |
| 258 } // namespace content | 261 } // namespace content |
| OLD | NEW |