1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_HOST_H_
6 #define CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_HOST_H_
10 #include "base/memory/ref_counted.h"
11 #include "base/strings/nullable_string16.h"
12 #include "base/strings/string16.h"
13 #include "content/browser/dom_storage/dom_storage_namespace.h"
14 #include "content/common/content_export.h"
15 #include "content/common/dom_storage/dom_storage_types.h"
21 class DOMStorageContextImpl
;
23 class DOMStorageNamespace
;
26 // One instance is allocated in the main process for each client process.
27 // Used by DOMStorageMessageFilter in Chrome.
28 // This class is single threaded, and performs blocking file reads/writes,
29 // so it shouldn't be used on chrome's IO thread.
30 // See class comments for DOMStorageContextImpl for a larger overview.
31 class CONTENT_EXPORT DOMStorageHost
{
33 DOMStorageHost(DOMStorageContextImpl
* context
, int render_process_id
);
36 bool OpenStorageArea(int connection_id
, int namespace_id
,
38 void CloseStorageArea(int connection_id
);
39 bool ExtractAreaValues(int connection_id
, DOMStorageValuesMap
* map
,
40 bool* send_log_get_messages
);
41 unsigned GetAreaLength(int connection_id
);
42 base::NullableString16
GetAreaKey(int connection_id
, unsigned index
);
43 base::NullableString16
GetAreaItem(int connection_id
,
44 const base::string16
& key
);
45 bool SetAreaItem(int connection_id
, const base::string16
& key
,
46 const base::string16
& value
, const GURL
& page_url
,
47 base::NullableString16
* old_value
);
48 void LogGetAreaItem(int connection_id
, const base::string16
& key
,
49 const base::NullableString16
& value
);
50 bool RemoveAreaItem(int connection_id
, const base::string16
& key
,
52 base::string16
* old_value
);
53 bool ClearArea(int connection_id
, const GURL
& page_url
);
54 bool HasAreaOpen(int64 namespace_id
, const GURL
& origin
,
55 int64
* alias_namespace_id
) const;
56 // Resets all open areas for the namespace provided. Returns true
57 // iff there were any areas to reset.
58 bool ResetOpenAreasForNamespace(int64 namespace_id
);
61 // Struct to hold references needed for areas that are open
62 // within our associated client process.
63 struct NamespaceAndArea
{
64 scoped_refptr
<DOMStorageNamespace
> namespace_
;
65 scoped_refptr
<DOMStorageArea
> area_
;
69 typedef std::map
<int, NamespaceAndArea
> AreaMap
;
71 DOMStorageArea
* GetOpenArea(int connection_id
);
72 DOMStorageNamespace
* GetNamespace(int connection_id
);
73 void MaybeLogTransaction(
75 DOMStorageNamespace::LogType transaction_type
,
78 const base::string16
& key
,
79 const base::NullableString16
& value
);
81 scoped_refptr
<DOMStorageContextImpl
> context_
;
83 int render_process_id_
;
86 } // namespace content
88 #endif // CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_HOST_H_