Index: chrome/renderer/renderer_webstoragearea_impl.h |
=================================================================== |
--- chrome/renderer/renderer_webstoragearea_impl.h (revision 0) |
+++ chrome/renderer/renderer_webstoragearea_impl.h (revision 0) |
@@ -0,0 +1,76 @@ |
+// Copyright (c) 2009 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 CHROME_RENDERER_RENDERER_WEBSTORAGEAREA_IMPL_H_ |
+#define CHROME_RENDERER_RENDERER_WEBSTORAGEAREA_IMPL_H_ |
+ |
+#include "base/basictypes.h" |
+#include "base/hash_tables.h" |
+#include "base/string16.h" |
+#include "webkit/api/public/WebStorageArea.h" |
+#include "webkit/api/public/WebString.h" |
+ |
+class RendererWebStorageAreaImpl : public WebKit::WebStorageArea { |
+ public: |
+ RendererWebStorageAreaImpl(int64 namespace_id, |
+ const WebKit::WebString& origin); |
+ virtual ~RendererWebStorageAreaImpl(); |
+ |
+ // See WebStorageArea.h for documentation on these functions. |
+ virtual void lock(bool& invalidate_cache, size_t& bytes_left_in_quota); |
+ virtual void unlock(); |
+ virtual unsigned length(); |
+ virtual WebKit::WebString key(unsigned index, bool& key_exception); |
+ virtual WebKit::WebString getItem(const WebKit::WebString& key); |
+ virtual void setItem(const WebKit::WebString& key, |
+ const WebKit::WebString& value, |
+ bool& quota_exception); |
+ virtual void removeItem(const WebKit::WebString& key); |
+ virtual void clear(); |
+ |
+ private: |
+ // Calls lock if we haven't already done so, and also gets a storage_area_id |
+ // if we haven't done so. Fetches quota and cache invalidation information |
+ // while locking. Only call on the WebKit thread. |
+ void EnsureInitializedAndLocked(); |
+ |
+ // Update our quota calculation. Returns true if we updated the quota. |
+ // Returns false if we couldn't update because we would have exceeded the |
+ // quota. If an item is not in our cache, it'll require a getItem IPC in |
+ // order to determine the existing value's size. |
+ bool UpdateQuota(const WebKit::WebString& key, |
+ const WebKit::WebString& value); |
+ |
+ // Set a key/value pair in our cache. |
+ void SetCache(const string16& key, const WebKit::WebString& value); |
+ |
+ // Used for initialization or storage_area_id_. |
+ int64 namespace_id_; |
+ string16 origin_; |
+ |
+ // The ID we use for all IPC. Initialized lazily. |
+ int64 storage_area_id_; |
+ |
+ // storage_area_id_ should equal this iff its unitialized. |
+ static const int64 kUninitializedStorageAreaId = -1; |
+ |
+ // Do we currently hold the lock on this storage area? |
+ bool lock_held_; |
+ |
+ // We track how many bytes are left in the quota between lock and unlock |
+ // calls. This allows us to avoid sync IPC on setItem. |
+ size_t bytes_left_in_quota_; |
+ |
+ // A cache of key/value pairs. If the item exists, it's put in the |
+ // cached_items_ map. If not, it's added to the cached_invalid_items_ set. |
+ // The lock IPC call tells us when to invalidate these caches. |
+ // TODO(jorlow): Instead of a map + a set, use NullableString16 once it's |
+ // implemented: http://crbug.com/17343 |
+ typedef base::hash_map<string16, string16> CacheMap; |
+ typedef base::hash_set<string16> CacheSet; |
+ CacheMap cached_items_; |
+ CacheSet cached_invalid_items_; |
+}; |
+ |
+#endif // CHROME_RENDERER_WEBSTORAGEAREA_IMPL_H_ |
Property changes on: chrome\renderer\renderer_webstoragearea_impl.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |