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

Unified Diff: webkit/dom_storage/dom_storage_cached_area.cc

Issue 15990007: Move dom_storage to new locations. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: webkit/dom_storage/dom_storage_cached_area.cc
===================================================================
--- webkit/dom_storage/dom_storage_cached_area.cc (revision 203766)
+++ webkit/dom_storage/dom_storage_cached_area.cc (working copy)
@@ -1,230 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "webkit/dom_storage/dom_storage_cached_area.h"
-
-#include "base/basictypes.h"
-#include "base/time.h"
-#include "base/metrics/histogram.h"
-#include "webkit/dom_storage/dom_storage_map.h"
-#include "webkit/dom_storage/dom_storage_proxy.h"
-
-namespace dom_storage {
-
-DomStorageCachedArea::DomStorageCachedArea(
- int64 namespace_id, const GURL& origin, DomStorageProxy* proxy)
- : ignore_all_mutations_(false),
- namespace_id_(namespace_id), origin_(origin),
- proxy_(proxy), weak_factory_(this) {
-}
-
-DomStorageCachedArea::~DomStorageCachedArea() {
-}
-
-unsigned DomStorageCachedArea::GetLength(int connection_id) {
- PrimeIfNeeded(connection_id);
- return map_->Length();
-}
-
-NullableString16 DomStorageCachedArea::GetKey(
- int connection_id, unsigned index) {
- PrimeIfNeeded(connection_id);
- return map_->Key(index);
-}
-
-NullableString16 DomStorageCachedArea::GetItem(
- int connection_id, const base::string16& key) {
- PrimeIfNeeded(connection_id);
- return map_->GetItem(key);
-}
-
-bool DomStorageCachedArea::SetItem(
- int connection_id, const base::string16& key,
- const base::string16& value, const GURL& page_url) {
- // A quick check to reject obviously overbudget items to avoid
- // the priming the cache.
- if (key.length() + value.length() > dom_storage::kPerAreaQuota)
- return false;
-
- PrimeIfNeeded(connection_id);
- NullableString16 unused;
- if (!map_->SetItem(key, value, &unused))
- return false;
-
- // Ignore mutations to 'key' until OnSetItemComplete.
- ignore_key_mutations_[key]++;
- proxy_->SetItem(
- connection_id, key, value, page_url,
- base::Bind(&DomStorageCachedArea::OnSetItemComplete,
- weak_factory_.GetWeakPtr(), key));
- return true;
-}
-
-void DomStorageCachedArea::RemoveItem(
- int connection_id, const base::string16& key, const GURL& page_url) {
- PrimeIfNeeded(connection_id);
- base::string16 unused;
- if (!map_->RemoveItem(key, &unused))
- return;
-
- // Ignore mutations to 'key' until OnRemoveItemComplete.
- ignore_key_mutations_[key]++;
- proxy_->RemoveItem(
- connection_id, key, page_url,
- base::Bind(&DomStorageCachedArea::OnRemoveItemComplete,
- weak_factory_.GetWeakPtr(), key));
-}
-
-void DomStorageCachedArea::Clear(int connection_id, const GURL& page_url) {
- // No need to prime the cache in this case.
- Reset();
- map_ = new DomStorageMap(dom_storage::kPerAreaQuota);
-
- // Ignore all mutations until OnClearComplete time.
- ignore_all_mutations_ = true;
- proxy_->ClearArea(
- connection_id, page_url,
- base::Bind(&DomStorageCachedArea::OnClearComplete,
- weak_factory_.GetWeakPtr()));
-}
-
-void DomStorageCachedArea::ApplyMutation(
- const NullableString16& key, const NullableString16& new_value) {
- if (!map_.get() || ignore_all_mutations_)
- return;
-
- if (key.is_null()) {
- // It's a clear event.
- scoped_refptr<DomStorageMap> old = map_;
- map_ = new DomStorageMap(dom_storage::kPerAreaQuota);
-
- // We have to retain local additions which happened after this
- // clear operation from another process.
- std::map<base::string16, int>::iterator iter =
- ignore_key_mutations_.begin();
- while (iter != ignore_key_mutations_.end()) {
- NullableString16 value = old->GetItem(iter->first);
- if (!value.is_null()) {
- NullableString16 unused;
- map_->SetItem(iter->first, value.string(), &unused);
- }
- ++iter;
- }
- return;
- }
-
- // We have to retain local changes.
- if (should_ignore_key_mutation(key.string()))
- return;
-
- if (new_value.is_null()) {
- // It's a remove item event.
- base::string16 unused;
- map_->RemoveItem(key.string(), &unused);
- return;
- }
-
- // It's a set item event.
- // We turn off quota checking here to accomodate the over budget
- // allowance that's provided in the browser process.
- NullableString16 unused;
- map_->set_quota(kint32max);
- map_->SetItem(key.string(), new_value.string(), &unused);
- map_->set_quota(dom_storage::kPerAreaQuota);
-}
-
-size_t DomStorageCachedArea::MemoryBytesUsedByCache() const {
- return map_.get() ? map_->bytes_used() : 0;
-}
-
-void DomStorageCachedArea::Prime(int connection_id) {
- DCHECK(!map_.get());
-
- // The LoadArea method is actually synchronous, but we have to
- // wait for an asyncly delivered message to know when incoming
- // mutation events should be applied. Our valuemap is plucked
- // from ipc stream out of order, mutations in front if it need
- // to be ignored.
-
- // Ignore all mutations until OnLoadComplete time.
- ignore_all_mutations_ = true;
- ValuesMap values;
- base::TimeTicks before = base::TimeTicks::Now();
- proxy_->LoadArea(
- connection_id, &values,
- base::Bind(&DomStorageCachedArea::OnLoadComplete,
- weak_factory_.GetWeakPtr()));
- base::TimeDelta time_to_prime = base::TimeTicks::Now() - before;
- // Keeping this histogram named the same (without the ForRenderer suffix)
- // to maintain histogram continuity.
- UMA_HISTOGRAM_TIMES("LocalStorage.TimeToPrimeLocalStorage",
- time_to_prime);
- map_ = new DomStorageMap(dom_storage::kPerAreaQuota);
- map_->SwapValues(&values);
-
- size_t local_storage_size_kb = map_->bytes_used() / 1024;
- // Track localStorage size, from 0-6MB. Note that the maximum size should be
- // 5MB, but we add some slop since we want to make sure the max size is always
- // above what we see in practice, since histograms can't change.
- UMA_HISTOGRAM_CUSTOM_COUNTS("LocalStorage.RendererLocalStorageSizeInKB",
- local_storage_size_kb,
- 0, 6 * 1024, 50);
- if (local_storage_size_kb < 100) {
- UMA_HISTOGRAM_TIMES(
- "LocalStorage.RendererTimeToPrimeLocalStorageUnder100KB",
- time_to_prime);
- } else if (local_storage_size_kb < 1000) {
- UMA_HISTOGRAM_TIMES(
- "LocalStorage.RendererTimeToPrimeLocalStorage100KBTo1MB",
- time_to_prime);
- } else {
- UMA_HISTOGRAM_TIMES(
- "LocalStorage.RendererTimeToPrimeLocalStorage1MBTo5MB",
- time_to_prime);
- }
-}
-
-void DomStorageCachedArea::Reset() {
- map_ = NULL;
- weak_factory_.InvalidateWeakPtrs();
- ignore_key_mutations_.clear();
- ignore_all_mutations_ = false;
-}
-
-void DomStorageCachedArea::OnLoadComplete(bool success) {
- DCHECK(success);
- DCHECK(ignore_all_mutations_);
- ignore_all_mutations_ = false;
-}
-
-void DomStorageCachedArea::OnSetItemComplete(
- const base::string16& key, bool success) {
- if (!success) {
- Reset();
- return;
- }
- std::map<base::string16, int>::iterator found =
- ignore_key_mutations_.find(key);
- DCHECK(found != ignore_key_mutations_.end());
- if (--found->second == 0)
- ignore_key_mutations_.erase(found);
-}
-
-void DomStorageCachedArea::OnRemoveItemComplete(
- const base::string16& key, bool success) {
- DCHECK(success);
- std::map<base::string16, int>::iterator found =
- ignore_key_mutations_.find(key);
- DCHECK(found != ignore_key_mutations_.end());
- if (--found->second == 0)
- ignore_key_mutations_.erase(found);
-}
-
-void DomStorageCachedArea::OnClearComplete(bool success) {
- DCHECK(success);
- DCHECK(ignore_all_mutations_);
- ignore_all_mutations_ = false;
-}
-
-} // namespace dom_storage
« no previous file with comments | « webkit/dom_storage/dom_storage_cached_area.h ('k') | webkit/dom_storage/dom_storage_cached_area_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698