Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Side by Side Diff: content/browser/browser_context.cc

Issue 9963107: Persist sessionStorage on disk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/dom_storage/dom_storage_context_impl.h" 8 #include "content/browser/dom_storage/dom_storage_context_impl.h"
9 #include "content/browser/download/download_file_manager.h" 9 #include "content/browser/download/download_file_manager.h"
10 #include "content/browser/download/download_manager_impl.h" 10 #include "content/browser/download/download_manager_impl.h"
(...skipping 20 matching lines...) Expand all
31 using webkit_database::DatabaseTracker; 31 using webkit_database::DatabaseTracker;
32 32
33 // Key names on BrowserContext. 33 // Key names on BrowserContext.
34 static const char* kAppCacheServicKeyName = "content_appcache_service_tracker"; 34 static const char* kAppCacheServicKeyName = "content_appcache_service_tracker";
35 static const char* kDatabaseTrackerKeyName = "content_database_tracker"; 35 static const char* kDatabaseTrackerKeyName = "content_database_tracker";
36 static const char* kDOMStorageContextKeyName = "content_dom_storage_context"; 36 static const char* kDOMStorageContextKeyName = "content_dom_storage_context";
37 static const char* kDownloadManagerKeyName = "download_manager"; 37 static const char* kDownloadManagerKeyName = "download_manager";
38 static const char* kFileSystemContextKeyName = "content_file_system_context"; 38 static const char* kFileSystemContextKeyName = "content_file_system_context";
39 static const char* kIndexedDBContextKeyName = "content_indexed_db_context"; 39 static const char* kIndexedDBContextKeyName = "content_indexed_db_context";
40 static const char* kQuotaManagerKeyName = "content_quota_manager"; 40 static const char* kQuotaManagerKeyName = "content_quota_manager";
41 static const char* kSaveSessionStorageOnDiskKeyName =
42 "save_session_storage_on_disk";
41 43
42 namespace content { 44 namespace content {
43 45
44 namespace { 46 namespace {
45 47
46 void CreateQuotaManagerAndClients(BrowserContext* context) { 48 void CreateQuotaManagerAndClients(BrowserContext* context) {
47 if (context->GetUserData(kQuotaManagerKeyName)) { 49 if (context->GetUserData(kQuotaManagerKeyName)) {
48 DCHECK(context->GetUserData(kDatabaseTrackerKeyName)); 50 DCHECK(context->GetUserData(kDatabaseTrackerKeyName));
49 DCHECK(context->GetUserData(kDOMStorageContextKeyName)); 51 DCHECK(context->GetUserData(kDOMStorageContextKeyName));
50 DCHECK(context->GetUserData(kFileSystemContextKeyName)); 52 DCHECK(context->GetUserData(kFileSystemContextKeyName));
(...skipping 22 matching lines...) Expand all
73 kFileSystemContextKeyName, 75 kFileSystemContextKeyName,
74 new UserDataAdapter<FileSystemContext>(filesystem_context)); 76 new UserDataAdapter<FileSystemContext>(filesystem_context));
75 77
76 scoped_refptr<DatabaseTracker> db_tracker = new DatabaseTracker( 78 scoped_refptr<DatabaseTracker> db_tracker = new DatabaseTracker(
77 context->GetPath(), context->IsOffTheRecord(), 79 context->GetPath(), context->IsOffTheRecord(),
78 context->GetSpecialStoragePolicy(), quota_manager->proxy(), 80 context->GetSpecialStoragePolicy(), quota_manager->proxy(),
79 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); 81 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
80 context->SetUserData(kDatabaseTrackerKeyName, 82 context->SetUserData(kDatabaseTrackerKeyName,
81 new UserDataAdapter<DatabaseTracker>(db_tracker)); 83 new UserDataAdapter<DatabaseTracker>(db_tracker));
82 84
85 bool session_storage_on_disk =
86 context->GetUserData(kSaveSessionStorageOnDiskKeyName) != 0;
83 FilePath path = context->IsOffTheRecord() ? FilePath() : context->GetPath(); 87 FilePath path = context->IsOffTheRecord() ? FilePath() : context->GetPath();
84 scoped_refptr<DOMStorageContextImpl> dom_storage_context = 88 scoped_refptr<DOMStorageContextImpl> dom_storage_context =
85 new DOMStorageContextImpl(path, context->GetSpecialStoragePolicy()); 89 new DOMStorageContextImpl(path, context->GetSpecialStoragePolicy(),
90 session_storage_on_disk);
86 context->SetUserData( 91 context->SetUserData(
87 kDOMStorageContextKeyName, 92 kDOMStorageContextKeyName,
88 new UserDataAdapter<DOMStorageContextImpl>(dom_storage_context)); 93 new UserDataAdapter<DOMStorageContextImpl>(dom_storage_context));
89 94
90 scoped_refptr<IndexedDBContext> indexed_db_context = new IndexedDBContextImpl( 95 scoped_refptr<IndexedDBContext> indexed_db_context = new IndexedDBContextImpl(
91 path, context->GetSpecialStoragePolicy(), quota_manager->proxy(), 96 path, context->GetSpecialStoragePolicy(), quota_manager->proxy(),
92 BrowserThread::GetMessageLoopProxyForThread( 97 BrowserThread::GetMessageLoopProxyForThread(
93 BrowserThread::WEBKIT_DEPRECATED)); 98 BrowserThread::WEBKIT_DEPRECATED));
94 context->SetUserData( 99 context->SetUserData(
95 kIndexedDBContextKeyName, 100 kIndexedDBContextKeyName,
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { 244 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) {
240 BrowserThread::PostTask( 245 BrowserThread::PostTask(
241 BrowserThread::IO, FROM_HERE, 246 BrowserThread::IO, FROM_HERE,
242 base::Bind(&PurgeMemoryOnIOThread, 247 base::Bind(&PurgeMemoryOnIOThread,
243 browser_context->GetResourceContext())); 248 browser_context->GetResourceContext()));
244 } 249 }
245 250
246 GetDOMStorageContextImpl(browser_context)->PurgeMemory(); 251 GetDOMStorageContextImpl(browser_context)->PurgeMemory();
247 } 252 }
248 253
254 // static
255 bool BrowserContext::SetSaveSessionStorageOnDisk(
256 BrowserContext* browser_context, bool save_session_storage_on_disk) {
257 if (browser_context->GetUserData(kQuotaManagerKeyName)) {
258 // Too late.
michaeln 2012/07/10 01:16:58 Is this case ever to be expected, if not should we
marja 2012/07/10 13:40:52 Done. DCHECK added. I wasn't sure if it's ok to ad
259 return false;
260 }
261 browser_context->SetUserData(
262 kSaveSessionStorageOnDiskKeyName,
263 save_session_storage_on_disk ? new base::SupportsUserData::Data() : 0);
264 return true;
265 }
266
249 BrowserContext::~BrowserContext() { 267 BrowserContext::~BrowserContext() {
250 // These message loop checks are just to avoid leaks in unittests. 268 // These message loop checks are just to avoid leaks in unittests.
251 if (GetUserData(kDatabaseTrackerKeyName) && 269 if (GetUserData(kDatabaseTrackerKeyName) &&
252 BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) { 270 BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) {
253 BrowserThread::PostTask( 271 BrowserThread::PostTask(
254 BrowserThread::FILE, FROM_HERE, 272 BrowserThread::FILE, FROM_HERE,
255 base::Bind(&webkit_database::DatabaseTracker::Shutdown, 273 base::Bind(&webkit_database::DatabaseTracker::Shutdown,
256 GetDatabaseTracker(this))); 274 GetDatabaseTracker(this)));
257 } 275 }
258 276
259 if (GetUserData(kDOMStorageContextKeyName)) 277 if (GetUserData(kDOMStorageContextKeyName))
260 GetDOMStorageContextImpl(this)->Shutdown(); 278 GetDOMStorageContextImpl(this)->Shutdown();
261 279
262 if (GetUserData(kDownloadManagerKeyName)) 280 if (GetUserData(kDownloadManagerKeyName))
263 GetDownloadManager(this)->Shutdown(); 281 GetDownloadManager(this)->Shutdown();
264 } 282 }
265 283
266 } // namespace content 284 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698