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/file_system/browser_file_system_helper.h" | 8 #include "content/browser/file_system/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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 context->SetUserData( | 85 context->SetUserData( |
86 kIndexedDBContextKeyName, | 86 kIndexedDBContextKeyName, |
87 new UserDataAdapter<IndexedDBContext>(indexed_db_context)); | 87 new UserDataAdapter<IndexedDBContext>(indexed_db_context)); |
88 | 88 |
89 scoped_refptr<ChromeAppCacheService> appcache_service = | 89 scoped_refptr<ChromeAppCacheService> appcache_service = |
90 new ChromeAppCacheService(quota_manager->proxy()); | 90 new ChromeAppCacheService(quota_manager->proxy()); |
91 context->SetUserData( | 91 context->SetUserData( |
92 kAppCacheServicKeyName, | 92 kAppCacheServicKeyName, |
93 new UserDataAdapter<ChromeAppCacheService>(appcache_service)); | 93 new UserDataAdapter<ChromeAppCacheService>(appcache_service)); |
94 | 94 |
95 EnsureResourceContextInitialized(context); | 95 InitializeResourceContext(context); |
96 | 96 |
97 // Check first to avoid memory leak in unittests. | 97 // Check first to avoid memory leak in unittests. |
98 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { | 98 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { |
99 BrowserThread::PostTask( | 99 BrowserThread::PostTask( |
100 BrowserThread::IO, FROM_HERE, | 100 BrowserThread::IO, FROM_HERE, |
101 base::Bind(&ChromeAppCacheService::InitializeOnIOThread, | 101 base::Bind(&ChromeAppCacheService::InitializeOnIOThread, |
102 appcache_service, | 102 appcache_service, |
103 context->IsOffTheRecord() ? FilePath() : | 103 context->IsOffTheRecord() ? FilePath() : |
104 context->GetPath().Append(content::kAppCacheDirname), | 104 context->GetPath().Append(content::kAppCacheDirname), |
105 context->GetResourceContext(), | 105 context->GetResourceContext(), |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 } | 162 } |
163 | 163 |
164 FileSystemContext* BrowserContext::GetFileSystemContext( | 164 FileSystemContext* BrowserContext::GetFileSystemContext( |
165 BrowserContext* browser_context) { | 165 BrowserContext* browser_context) { |
166 CreateQuotaManagerAndClients(browser_context); | 166 CreateQuotaManagerAndClients(browser_context); |
167 return UserDataAdapter<FileSystemContext>::Get( | 167 return UserDataAdapter<FileSystemContext>::Get( |
168 browser_context, kFileSystemContextKeyName); | 168 browser_context, kFileSystemContextKeyName); |
169 } | 169 } |
170 | 170 |
171 void BrowserContext::EnsureResourceContextInitialized(BrowserContext* context) { | 171 void BrowserContext::EnsureResourceContextInitialized(BrowserContext* context) { |
172 content::EnsureResourceContextInitialized(context); | 172 // This will be enough to tickle initialization of BrowserContext if |
| 173 // necessary, which initializes ResourceContext. The reason we don't call |
| 174 // ResourceContext::InitializeResourceContext directly here is that if |
| 175 // ResourceContext ends up initializing it will call back into BrowserContext |
| 176 // and when that call return it'll end rewriting its UserData map (with the |
| 177 // same value) but this causes a race condition. See http://crbug.com/115678. |
| 178 CreateQuotaManagerAndClients(context); |
173 } | 179 } |
174 | 180 |
175 void BrowserContext::SaveSessionState(BrowserContext* browser_context) { | 181 void BrowserContext::SaveSessionState(BrowserContext* browser_context) { |
176 GetDatabaseTracker(browser_context)->SaveSessionState(); | 182 GetDatabaseTracker(browser_context)->SaveSessionState(); |
177 | 183 |
178 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { | 184 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { |
179 BrowserThread::PostTask( | 185 BrowserThread::PostTask( |
180 BrowserThread::IO, FROM_HERE, | 186 BrowserThread::IO, FROM_HERE, |
181 base::Bind(&SaveSessionStateOnIOThread, | 187 base::Bind(&SaveSessionStateOnIOThread, |
182 browser_context->GetResourceContext())); | 188 browser_context->GetResourceContext())); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 BrowserThread::IsMessageLoopValid(BrowserThread::WEBKIT_DEPRECATED)) { | 252 BrowserThread::IsMessageLoopValid(BrowserThread::WEBKIT_DEPRECATED)) { |
247 DOMStorageContext* dom_storage_context = | 253 DOMStorageContext* dom_storage_context = |
248 (static_cast<UserDataAdapter<DOMStorageContext>*>( | 254 (static_cast<UserDataAdapter<DOMStorageContext>*>( |
249 GetUserData(kDOMStorageContextKeyName)))->release(); | 255 GetUserData(kDOMStorageContextKeyName)))->release(); |
250 BrowserThread::ReleaseSoon( | 256 BrowserThread::ReleaseSoon( |
251 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, dom_storage_context); | 257 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, dom_storage_context); |
252 } | 258 } |
253 } | 259 } |
254 | 260 |
255 } // namespace content | 261 } // namespace content |
OLD | NEW |