Home | History | Annotate | Download | only in browser
      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 COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_RULE_H_
      8 #define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_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 "components/content_settings/core/common/content_settings_pattern.h"
     17 
     18 namespace content_settings {
     19 
     20 struct 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 
     33 class RuleIterator {
     34  public:
     35   virtual ~RuleIterator();
     36   virtual bool HasNext() const = 0;
     37   virtual Rule Next() = 0;
     38 };
     39 
     40 class EmptyRuleIterator : public RuleIterator {
     41  public:
     42   virtual ~EmptyRuleIterator();
     43   virtual bool HasNext() const OVERRIDE;
     44   virtual Rule Next() OVERRIDE;
     45 };
     46 
     47 class 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  // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_RULE_H_
     64