1// Copyright (c) 2011 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. 4 5// Interface for objects providing content setting rules. 6 7#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_RULE_H_ 8#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_RULE_H_ 9 10#include "base/compiler_specific.h" 11#include "base/memory/linked_ptr.h" 12#include "base/memory/scoped_ptr.h" 13#include "base/memory/scoped_vector.h" 14#include "base/synchronization/lock.h" 15#include "base/values.h" 16#include "chrome/common/content_settings_pattern.h" 17 18namespace content_settings { 19 20struct Rule { 21 Rule(); 22 // Rule takes ownership of |value|. 23 Rule(const ContentSettingsPattern& primary_pattern, 24 const ContentSettingsPattern& secondary_pattern, 25 base::Value* value); 26 ~Rule(); 27 28 ContentSettingsPattern primary_pattern; 29 ContentSettingsPattern secondary_pattern; 30 linked_ptr<base::Value> value; 31}; 32 33class RuleIterator { 34 public: 35 virtual ~RuleIterator(); 36 virtual bool HasNext() const = 0; 37 virtual Rule Next() = 0; 38}; 39 40class EmptyRuleIterator : public RuleIterator { 41 public: 42 virtual ~EmptyRuleIterator(); 43 virtual bool HasNext() const OVERRIDE; 44 virtual Rule Next() OVERRIDE; 45}; 46 47class ConcatenationIterator : public RuleIterator { 48 public: 49 // ConcatenationIterator takes ownership of the pointers in the |iterators| 50 // list and |auto_lock|. |auto_lock| can be NULL if no locking is needed. 51 ConcatenationIterator(ScopedVector<RuleIterator>* iterators, 52 base::AutoLock* auto_lock); 53 virtual ~ConcatenationIterator(); 54 virtual bool HasNext() const OVERRIDE; 55 virtual Rule Next() OVERRIDE; 56 private: 57 ScopedVector<RuleIterator> iterators_; 58 scoped_ptr<base::AutoLock> auto_lock_; 59}; 60 61} // namespace content_settings 62 63#endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_RULE_H_ 64