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

Side by Side Diff: webkit/dom_storage/dom_storage_cached_area.cc

Issue 12398008: Purge in-memory localStorage areas if the # of areas exceeds the limit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 "webkit/dom_storage/dom_storage_cached_area.h" 5 #include "webkit/dom_storage/dom_storage_cached_area.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/time.h" 8 #include "base/time.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "webkit/dom_storage/dom_storage_map.h" 10 #include "webkit/dom_storage/dom_storage_map.h"
11 #include "webkit/dom_storage/dom_storage_proxy.h" 11 #include "webkit/dom_storage/dom_storage_proxy.h"
12 12
13 namespace dom_storage { 13 namespace dom_storage {
14 14
15 DomStorageCachedArea::DomStorageCachedArea( 15 DomStorageCachedArea::DomStorageCachedArea(
16 int64 namespace_id, const GURL& origin, DomStorageProxy* proxy) 16 int64 namespace_id, const GURL& origin, DomStorageProxy* proxy,
17 int64 storage_size)
17 : ignore_all_mutations_(false), 18 : ignore_all_mutations_(false),
18 namespace_id_(namespace_id), origin_(origin), 19 namespace_id_(namespace_id), origin_(origin),
19 proxy_(proxy), weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 20 proxy_(proxy), weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
21 global_storage_size_(storage_size) {
20 } 22 }
21 23
22 DomStorageCachedArea::~DomStorageCachedArea() { 24 DomStorageCachedArea::~DomStorageCachedArea() {
23 } 25 }
24 26
25 unsigned DomStorageCachedArea::GetLength(int connection_id) { 27 unsigned DomStorageCachedArea::GetLength(int connection_id) {
26 PrimeIfNeeded(connection_id); 28 PrimeIfNeeded(connection_id);
27 return map_->Length(); 29 return map_->Length();
28 } 30 }
29 31
(...skipping 10 matching lines...) Expand all
40 } 42 }
41 43
42 bool DomStorageCachedArea::SetItem( 44 bool DomStorageCachedArea::SetItem(
43 int connection_id, const string16& key, 45 int connection_id, const string16& key,
44 const string16& value, const GURL& page_url) { 46 const string16& value, const GURL& page_url) {
45 // A quick check to reject obviously overbudget items to avoid 47 // A quick check to reject obviously overbudget items to avoid
46 // the priming the cache. 48 // the priming the cache.
47 if (key.length() + value.length() > dom_storage::kPerAreaQuota) 49 if (key.length() + value.length() > dom_storage::kPerAreaQuota)
48 return false; 50 return false;
49 51
52 // TENTATIVE: Limit the global data to 512MB.
53 if (key.length() + value.length() + global_storage_size_
54 > 512 * 1024 * 1024) {
55 return false;
56 }
57
50 PrimeIfNeeded(connection_id); 58 PrimeIfNeeded(connection_id);
51 NullableString16 unused; 59 NullableString16 unused;
52 if (!map_->SetItem(key, value, &unused)) 60 if (!map_->SetItem(key, value, &unused))
53 return false; 61 return false;
54 62
55 // Ignore mutations to 'key' until OnSetItemComplete. 63 // Ignore mutations to 'key' until OnSetItemComplete.
56 ignore_key_mutations_[key]++; 64 ignore_key_mutations_[key]++;
57 proxy_->SetItem( 65 proxy_->SetItem(
58 connection_id, key, value, page_url, 66 connection_id, key, value, page_url,
59 base::Bind(&DomStorageCachedArea::OnSetItemComplete, 67 base::Bind(&DomStorageCachedArea::OnSetItemComplete,
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 ignore_key_mutations_.erase(found); 226 ignore_key_mutations_.erase(found);
219 } 227 }
220 228
221 void DomStorageCachedArea::OnClearComplete(bool success) { 229 void DomStorageCachedArea::OnClearComplete(bool success) {
222 DCHECK(success); 230 DCHECK(success);
223 DCHECK(ignore_all_mutations_); 231 DCHECK(ignore_all_mutations_);
224 ignore_all_mutations_ = false; 232 ignore_all_mutations_ = false;
225 } 233 }
226 234
227 } // namespace dom_storage 235 } // namespace dom_storage
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698