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 #include "components/content_settings/core/browser/content_settings_rule.h"
6
7 #include <utility>
8
9 #include "base/logging.h"
10
11 namespace content_settings {
12
13 Rule::Rule() = default;
14
Rule(const ContentSettingsPattern & primary_pattern,const ContentSettingsPattern & secondary_pattern,base::Value value)15 Rule::Rule(const ContentSettingsPattern& primary_pattern,
16 const ContentSettingsPattern& secondary_pattern,
17 base::Value value)
18 : primary_pattern(primary_pattern),
19 secondary_pattern(secondary_pattern),
20 value(std::move(value)) {}
21
22 Rule::Rule(Rule&& other) = default;
23
24 Rule& Rule::operator=(Rule&& other) = default;
25
26 Rule::~Rule() = default;
27
28 RuleIterator::~RuleIterator() = default;
29
ConcatenationIterator(std::vector<std::unique_ptr<RuleIterator>> iterators,base::AutoLock * auto_lock)30 ConcatenationIterator::ConcatenationIterator(
31 std::vector<std::unique_ptr<RuleIterator>> iterators,
32 base::AutoLock* auto_lock)
33 : iterators_(std::move(iterators)), auto_lock_(auto_lock) {
34 auto it = iterators_.begin();
35 while (it != iterators_.end()) {
36 if (!(*it)->HasNext())
37 it = iterators_.erase(it);
38 else
39 ++it;
40 }
41 }
42
43 ConcatenationIterator::~ConcatenationIterator() = default;
44
HasNext() const45 bool ConcatenationIterator::HasNext() const {
46 return !iterators_.empty();
47 }
48
Next()49 Rule ConcatenationIterator::Next() {
50 auto current_iterator = iterators_.begin();
51 DCHECK(current_iterator != iterators_.end());
52 DCHECK((*current_iterator)->HasNext());
53 const Rule& next_rule = (*current_iterator)->Next();
54 Rule to_return(next_rule.primary_pattern, next_rule.secondary_pattern,
55 next_rule.value.Clone());
56 if (!(*current_iterator)->HasNext())
57 iterators_.erase(current_iterator);
58 return to_return;
59 }
60
61 } // namespace content_settings
62