// Copyright (c) 2012 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_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_ORIGIN_IDENTIFIER_VALUE_MAP_H_ #define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_ORIGIN_IDENTIFIER_VALUE_MAP_H_ #include #include #include "base/memory/linked_ptr.h" #include "chrome/common/content_settings_pattern.h" #include "chrome/common/content_settings_types.h" class GURL; namespace base { class Lock; class Value; } namespace content_settings { class RuleIterator; class OriginIdentifierValueMap { public: typedef std::string ResourceIdentifier; struct EntryMapKey { ContentSettingsType content_type; ResourceIdentifier resource_identifier; EntryMapKey(ContentSettingsType content_type, const ResourceIdentifier& resource_identifier); bool operator<(const OriginIdentifierValueMap::EntryMapKey& other) const; }; struct PatternPair { ContentSettingsPattern primary_pattern; ContentSettingsPattern secondary_pattern; PatternPair(const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern); bool operator<(const OriginIdentifierValueMap::PatternPair& other) const; }; typedef std::map > Rules; typedef std::map EntryMap; EntryMap::iterator begin() { return entries_.begin(); } EntryMap::iterator end() { return entries_.end(); } EntryMap::const_iterator begin() const { return entries_.begin(); } EntryMap::const_iterator end() const { return entries_.end(); } bool empty() const { return size() == 0u; } size_t size() const; // Returns an iterator for reading the rules for |content_type| and // |resource_identifier|. The caller takes the ownership of the iterator. It // is not allowed to call functions of |OriginIdentifierValueMap| (also // |GetRuleIterator|) before the iterator has been destroyed. If |lock| is // non-NULL, the returned |RuleIterator| locks it and releases it when it is // destroyed. RuleIterator* GetRuleIterator(ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, base::Lock* lock) const; OriginIdentifierValueMap(); ~OriginIdentifierValueMap(); // Returns a weak pointer to the value for the given |primary_pattern|, // |secondary_pattern|, |content_type|, |resource_identifier| tuple. If // no value is stored for the passed parameter |NULL| is returned. base::Value* GetValue( const GURL& primary_url, const GURL& secondary_url, ContentSettingsType content_type, const ResourceIdentifier& resource_identifier) const; // Sets the |value| for the given |primary_pattern|, |secondary_pattern|, // |content_type|, |resource_identifier| tuple. The method takes the ownership // of the passed |value|. void SetValue( const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, base::Value* value); // Deletes the map entry for the given |primary_pattern|, // |secondary_pattern|, |content_type|, |resource_identifier| tuple. void DeleteValue( const ContentSettingsPattern& primary_pattern, const ContentSettingsPattern& secondary_pattern, ContentSettingsType content_type, const ResourceIdentifier& resource_identifier); // Deletes all map entries for the given |content_type| and // |resource_identifier|. void DeleteValues( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier); // Clears all map entries. void clear(); private: EntryMap entries_; DISALLOW_COPY_AND_ASSIGN(OriginIdentifierValueMap); }; } // namespace content_settings #endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_ORIGIN_IDENTIFIER_VALUE_MAP_H_