blob: 66496e3bfa8ec9b0e321ff757537cacb94ffec54 [file]
// Copyright 2016 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 COMPONENTS_SUBRESOURCE_FILTER_CORE_COMMON_DOCUMENT_SUBRESOURCE_FILTER_H_
#define COMPONENTS_SUBRESOURCE_FILTER_CORE_COMMON_DOCUMENT_SUBRESOURCE_FILTER_H_
#include <stddef.h>
#include <memory>
#include <vector>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "components/subresource_filter/core/common/activation_level.h"
#include "components/subresource_filter/core/common/activation_state.h"
#include "components/subresource_filter/core/common/document_load_statistics.h"
#include "components/subresource_filter/core/common/indexed_ruleset.h"
#include "components/subresource_filter/core/common/load_policy.h"
#include "components/url_pattern_index/proto/rules.pb.h"
class GURL;
namespace url {
class Origin;
} // namespace url
namespace subresource_filter {
class FirstPartyOrigin;
class MemoryMappedRuleset;
// Performs filtering of subresource loads in the scope of a given document.
class DocumentSubresourceFilter {
public:
// Constructs a new filter that will:
// -- Operate in a manner prescribed in |activation_state|.
// -- Filter subresource loads in the scope of a document loaded from
// |document_origin|.
// -- Hold a reference to and use |ruleset| for its entire lifetime.
DocumentSubresourceFilter(url::Origin document_origin,
ActivationState activation_state,
scoped_refptr<const MemoryMappedRuleset> ruleset);
~DocumentSubresourceFilter();
const ActivationState& activation_state() const { return activation_state_; }
const DocumentLoadStatistics& statistics() const { return statistics_; }
// WARNING: This is only to allow DocumentSubresourceFilter's wrappers to
// modify the |statistics|.
// TODO(pkalinnikov): Find a better way to achieve this.
DocumentLoadStatistics& statistics() { return statistics_; }
LoadPolicy GetLoadPolicy(
const GURL& subresource_url,
url_pattern_index::proto::ElementType subresource_type);
private:
const ActivationState activation_state_;
const scoped_refptr<const MemoryMappedRuleset> ruleset_;
const IndexedRulesetMatcher ruleset_matcher_;
// Equals nullptr iff |activation_state_.filtering_disabled_for_document|.
std::unique_ptr<FirstPartyOrigin> document_origin_;
DocumentLoadStatistics statistics_;
DISALLOW_COPY_AND_ASSIGN(DocumentSubresourceFilter);
};
} // namespace subresource_filter
#endif // COMPONENTS_SUBRESOURCE_FILTER_CORE_COMMON_DOCUMENT_SUBRESOURCE_FILTER_H_