| // Copyright 2013 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. |
| |
| #ifndef CONTENT_COMMON_DOM_STORAGE_DOM_STORAGE_MAP_H_ |
| #define CONTENT_COMMON_DOM_STORAGE_DOM_STORAGE_MAP_H_ |
| |
| #include <map> |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/strings/nullable_string16.h" |
| #include "base/strings/string16.h" |
| #include "content/common/content_export.h" |
| #include "content/common/dom_storage/dom_storage_types.h" |
| |
| namespace content { |
| |
| // A wrapper around a std::map that adds refcounting and |
| // tracks the size in bytes of the keys/values, enforcing a quota. |
| // See class comments for DOMStorageContextImpl for a larger overview. |
| class CONTENT_EXPORT DOMStorageMap |
| : public base::RefCountedThreadSafe<DOMStorageMap> { |
| public: |
| explicit DOMStorageMap(size_t quota); |
| |
| unsigned Length() const; |
| base::NullableString16 Key(unsigned index); |
| base::NullableString16 GetItem(const base::string16& key) const; |
| bool SetItem(const base::string16& key, const base::string16& value, |
| base::NullableString16* old_value); |
| bool RemoveItem(const base::string16& key, base::string16* old_value); |
| |
| // Swaps this instances values_ with |map|. |
| // Note: to grandfather in pre-existing files that are overbudget, |
| // this method does not do quota checking. |
| void SwapValues(DOMStorageValuesMap* map); |
| |
| // Writes a copy of the current set of values_ to the |map|. |
| void ExtractValues(DOMStorageValuesMap* map) const { *map = values_; } |
| |
| // Creates a new instance of DOMStorageMap containing |
| // a deep copy of values_. |
| DOMStorageMap* DeepCopy() const; |
| |
| size_t bytes_used() const { return bytes_used_; } |
| size_t quota() const { return quota_; } |
| void set_quota(size_t quota) { quota_ = quota; } |
| |
| private: |
| friend class base::RefCountedThreadSafe<DOMStorageMap>; |
| ~DOMStorageMap(); |
| |
| void ResetKeyIterator(); |
| |
| DOMStorageValuesMap values_; |
| DOMStorageValuesMap::const_iterator key_iterator_; |
| unsigned last_key_index_; |
| size_t bytes_used_; |
| size_t quota_; |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_COMMON_DOM_STORAGE_DOM_STORAGE_MAP_H_ |