blob: 04a6fd75e04da6698b406679ebc5c1d4cc130bfa [file] [log] [blame]
// Copyright 2017 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.
#include "components/subresource_filter/content/common/ruleset_dealer.h"
#include "base/logging.h"
#include "components/subresource_filter/core/common/memory_mapped_ruleset.h"
namespace subresource_filter {
RulesetDealer::RulesetDealer() {
sequence_checker_.DetachFromSequence();
}
RulesetDealer::~RulesetDealer() = default;
void RulesetDealer::SetRulesetFile(base::File ruleset_file) {
DCHECK(sequence_checker_.CalledOnValidSequence());
DCHECK(ruleset_file.IsValid());
ruleset_file_ = std::move(ruleset_file);
weak_cached_ruleset_.reset();
}
bool RulesetDealer::IsRulesetFileAvailable() const {
DCHECK(sequence_checker_.CalledOnValidSequence());
return ruleset_file_.IsValid();
}
scoped_refptr<const MemoryMappedRuleset> RulesetDealer::GetRuleset() {
DCHECK(sequence_checker_.CalledOnValidSequence());
if (!ruleset_file_.IsValid())
return nullptr;
scoped_refptr<const MemoryMappedRuleset> strong_ruleset_ref;
if (weak_cached_ruleset_) {
strong_ruleset_ref = weak_cached_ruleset_.get();
} else {
MemoryMappedRuleset* ruleset =
new MemoryMappedRuleset(ruleset_file_.Duplicate());
strong_ruleset_ref = ruleset;
weak_cached_ruleset_ = ruleset->AsWeakPtr();
}
return strong_ruleset_ref;
}
base::File RulesetDealer::DuplicateRulesetFile() {
return ruleset_file_.Duplicate();
}
} // namespace subresource_filter