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