OLD | NEW |
1 // Copyright (c) 2011 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 #ifndef CONTENT_BROWSER_IN_PROCESS_WEBKIT_DOM_STORAGE_NAMESPACE_H_ | 5 #ifndef WEBKIT_DOM_STORAGE_DOM_STORAGE_NAMESPACE_H_ |
6 #define CONTENT_BROWSER_IN_PROCESS_WEBKIT_DOM_STORAGE_NAMESPACE_H_ | 6 #define WEBKIT_DOM_STORAGE_DOM_STORAGE_NAMESPACE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include "base/hash_tables.h" | 9 #include <map> |
10 #include "base/memory/scoped_ptr.h" | |
11 #include "base/string16.h" | |
12 #include "content/common/dom_storage_common.h" | |
13 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" | |
14 | 10 |
15 class DOMStorageArea; | 11 #include "base/basictypes.h" |
16 class DOMStorageContext; | 12 #include "base/file_path.h" |
17 class FilePath; | 13 #include "base/memory/ref_counted.h" |
| 14 #include "webkit/dom_storage/dom_storage_area.h" |
18 | 15 |
19 namespace WebKit { | 16 class GURL; |
20 class WebStorageArea; | |
21 class WebStorageNamespace; | |
22 } | |
23 | 17 |
24 // Only to be used on the WebKit thread. | 18 namespace dom_storage { |
25 class DOMStorageNamespace { | 19 |
| 20 class DomStorageArea; |
| 21 class DomStorageTaskRunner; |
| 22 |
| 23 const int64 kLocalStorageNamespaceId = 0; |
| 24 |
| 25 class DomStorageNamespace |
| 26 : public base::RefCountedThreadSafe<DomStorageNamespace> { |
26 public: | 27 public: |
27 static DOMStorageNamespace* CreateLocalStorageNamespace( | 28 DomStorageNamespace(int64 namespace_id, |
28 DOMStorageContext* dom_storage_context, const FilePath& data_dir_path); | 29 const FilePath& directory, // may be empty |
29 static DOMStorageNamespace* CreateSessionStorageNamespace( | 30 DomStorageTaskRunner* task_runner); |
30 DOMStorageContext* dom_storage_context, int64 namespace_id); | |
31 | 31 |
32 ~DOMStorageNamespace(); | 32 int64 namespace_id() const { return namespace_id_; } |
33 | 33 |
34 DOMStorageArea* GetStorageArea(const string16& origin); | 34 // Returns the storage area for the given origin, |
35 DOMStorageNamespace* Copy(int64 clone_namespace_id); | 35 // creating instance if needed. Each call to open |
| 36 // must be balanced with a call to CloseStorageArea. |
| 37 DomStorageArea* OpenStorageArea(const GURL& origin); |
| 38 void CloseStorageArea(DomStorageArea* area); |
36 | 39 |
37 void PurgeMemory(); | 40 // Creates a clone of |this| namespace including |
| 41 // shallow copies of all contained areas. |
| 42 // Should only be called for session storage namespaces. |
| 43 DomStorageNamespace* Clone(int64 clone_namespace_id); |
38 | 44 |
39 const DOMStorageContext* dom_storage_context() const { | 45 bool is_session_storage() { return namespace_id_ != 0; } |
40 return dom_storage_context_; | |
41 } | |
42 int64 id() const { return id_; } | |
43 const WebKit::WebString& data_dir_path() const { return data_dir_path_; } | |
44 DOMStorageType dom_storage_type() const { return dom_storage_type_; } | |
45 | |
46 // Creates a WebStorageArea for the given origin. This should only be called | |
47 // by an owned DOMStorageArea. | |
48 WebKit::WebStorageArea* CreateWebStorageArea(const string16& origin); | |
49 | 46 |
50 private: | 47 private: |
51 // Called by the static factory methods above. | |
52 DOMStorageNamespace(DOMStorageContext* dom_storage_context, | |
53 int64 id, | |
54 const WebKit::WebString& data_dir_path, | |
55 DOMStorageType storage_type); | |
56 | 48 |
57 // Creates the underlying WebStorageNamespace on demand. | 49 struct AreaHolder { |
58 void CreateWebStorageNamespaceIfNecessary(); | 50 int open_count_; |
| 51 scoped_refptr<DomStorageArea> area_; |
| 52 AreaHolder() : open_count_(0) {} |
| 53 AreaHolder(DomStorageArea* area, int count) |
| 54 : area_(area), open_count_(count) {} |
| 55 }; |
| 56 typedef std::map<GURL, AreaHolder> AreaMap; |
59 | 57 |
60 // All the storage areas we own. | 58 // Returns a pointer to the area holder in our map or NULL. |
61 typedef base::hash_map<string16, DOMStorageArea*> OriginToStorageAreaMap; | 59 AreaHolder* GetAreaHolder(const GURL& origin); |
62 OriginToStorageAreaMap origin_to_storage_area_; | |
63 | 60 |
64 // The DOMStorageContext that owns us. | 61 int64 namespace_id_; |
65 DOMStorageContext* dom_storage_context_; | 62 FilePath directory_; |
66 | 63 AreaMap areas_; |
67 // The WebKit storage namespace we manage. | 64 scoped_refptr<DomStorageTaskRunner> task_runner_; |
68 scoped_ptr<WebKit::WebStorageNamespace> storage_namespace_; | |
69 | |
70 // Our id. Unique to our parent WebKitContext class. | |
71 int64 id_; | |
72 | |
73 // The path used to create us, so we can recreate our WebStorageNamespace on | |
74 // demand. | |
75 WebKit::WebString data_dir_path_; | |
76 | |
77 // SessionStorage vs. LocalStorage. | |
78 const DOMStorageType dom_storage_type_; | |
79 | |
80 DISALLOW_IMPLICIT_CONSTRUCTORS(DOMStorageNamespace); | |
81 }; | 65 }; |
82 | 66 |
83 #endif // CONTENT_BROWSER_IN_PROCESS_WEBKIT_DOM_STORAGE_NAMESPACE_H_ | 67 } // namespace dom_storage |
| 68 |
| 69 |
| 70 #endif // WEBKIT_DOM_STORAGE_DOM_STORAGE_NAMESPACE_H_ |
OLD | NEW |