// 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_BROWSER_DOM_STORAGE_DOM_STORAGE_HOST_H_ #define CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_HOST_H_ #include #include "base/memory/ref_counted.h" #include "base/strings/nullable_string16.h" #include "base/strings/string16.h" #include "content/browser/dom_storage/dom_storage_namespace.h" #include "content/common/content_export.h" #include "content/common/dom_storage/dom_storage_types.h" class GURL; namespace content { class DOMStorageContextImpl; class DOMStorageHost; class DOMStorageNamespace; class DOMStorageArea; // One instance is allocated in the main process for each client process. // Used by DOMStorageMessageFilter in Chrome. // This class is single threaded, and performs blocking file reads/writes, // so it shouldn't be used on chrome's IO thread. // See class comments for DOMStorageContextImpl for a larger overview. class CONTENT_EXPORT DOMStorageHost { public: DOMStorageHost(DOMStorageContextImpl* context, int render_process_id); ~DOMStorageHost(); bool OpenStorageArea(int connection_id, int namespace_id, const GURL& origin); void CloseStorageArea(int connection_id); bool ExtractAreaValues(int connection_id, DOMStorageValuesMap* map, bool* send_log_get_messages); unsigned GetAreaLength(int connection_id); base::NullableString16 GetAreaKey(int connection_id, unsigned index); base::NullableString16 GetAreaItem(int connection_id, const base::string16& key); bool SetAreaItem(int connection_id, const base::string16& key, const base::string16& value, const GURL& page_url, base::NullableString16* old_value); void LogGetAreaItem(int connection_id, const base::string16& key, const base::NullableString16& value); bool RemoveAreaItem(int connection_id, const base::string16& key, const GURL& page_url, base::string16* old_value); bool ClearArea(int connection_id, const GURL& page_url); bool HasAreaOpen(int64 namespace_id, const GURL& origin, int64* alias_namespace_id) const; // Resets all open areas for the namespace provided. Returns true // iff there were any areas to reset. bool ResetOpenAreasForNamespace(int64 namespace_id); private: // Struct to hold references needed for areas that are open // within our associated client process. struct NamespaceAndArea { scoped_refptr namespace_; scoped_refptr area_; NamespaceAndArea(); ~NamespaceAndArea(); }; typedef std::map AreaMap; DOMStorageArea* GetOpenArea(int connection_id); DOMStorageNamespace* GetNamespace(int connection_id); void MaybeLogTransaction( int connection_id, DOMStorageNamespace::LogType transaction_type, const GURL& origin, const GURL& page_url, const base::string16& key, const base::NullableString16& value); scoped_refptr context_; AreaMap connections_; int render_process_id_; DISALLOW_COPY_AND_ASSIGN(DOMStorageHost); }; } // namespace content #endif // CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_HOST_H_