#include "extensions/browser/api/declarative_net_request/regex_rules_matcher.h"
#include <optional>
#include "base/containers/contains.h"
#include "base/logging.h"
#include "base/not_fatal_until.h"
#include "base/notreached.h"
#include "base/ranges/algorithm.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "components/url_pattern_index/url_pattern_index.h"
#include "extensions/browser/api/declarative_net_request/request_action.h"
#include "extensions/browser/api/declarative_net_request/request_params.h"
#include "extensions/browser/api/declarative_net_request/utils.h"
namespace extensions::declarative_net_request {
flat_rule;
namespace {
bool IsExtraHeadersMatcherInternal(
const RegexRulesMatcher::RegexRulesList* regex_list) { … }
bool DoesRuleMetadataMatchRequest(const flat_rule::UrlRule& rule,
const RequestParams& params) { … }
bool ActionTypeAllowsMultipleActions(flat::ActionType action_type) { … }
}
RegexRuleInfo::RegexRuleInfo(const flat::RegexRule* regex_rule,
const re2::RE2* regex)
: … { … }
RegexRuleInfo::RegexRuleInfo(const RegexRuleInfo& info) = default;
RegexRuleInfo& RegexRuleInfo::operator=(const RegexRuleInfo& info) = default;
RegexRulesMatcher::RegexRulesMatcher(
const ExtensionId& extension_id,
RulesetID ruleset_id,
const RegexRulesList* before_request_regex_list,
const RegexRulesList* headers_received_regex_list,
const ExtensionMetadataList* metadata_list)
: … { … }
RegexRulesMatcher::~RegexRulesMatcher() = default;
bool RegexRulesMatcher::IsExtraHeadersMatcher() const { … }
size_t RegexRulesMatcher::GetRulesCount() const { … }
size_t RegexRulesMatcher::GetBeforeRequestRulesCount() const { … }
size_t RegexRulesMatcher::GetHeadersReceivedRulesCount() const { … }
std::vector<RequestAction> RegexRulesMatcher::GetModifyHeadersActions(
const RequestParams& params,
RulesetMatchingStage stage,
std::optional<uint64_t> min_priority) const { … }
std::optional<RequestAction> RegexRulesMatcher::GetAllowAllRequestsAction(
const RequestParams& params,
RulesetMatchingStage stage) const { … }
std::optional<RequestAction> RegexRulesMatcher::GetActionIgnoringAncestors(
const RequestParams& params,
RulesetMatchingStage stage) const { … }
RegexRulesMatcher::MatchHelper::MatchHelper(
const raw_ptr<const RegexRulesList> regex_list,
const RegexRulesMatcher* parent_matcher,
RulesetMatchingStage stage)
: … { … }
RegexRulesMatcher::MatchHelper::~MatchHelper() = default;
size_t RegexRulesMatcher::MatchHelper::GetRulesCount() const { … }
const std::vector<RegexRuleInfo>&
RegexRulesMatcher::MatchHelper::GetPotentialMatches(
const RequestParams& params) const { … }
bool RegexRulesMatcher::MatchHelper::IsEmpty() const { … }
void RegexRulesMatcher::MatchHelper::InitializeMatcher() { … }
std::optional<RequestAction> RegexRulesMatcher::CreateActionFromInfo(
const RequestParams& params,
const RegexRuleInfo& info) const { … }
std::optional<RequestAction>
RegexRulesMatcher::CreateRegexSubstitutionRedirectAction(
const RequestParams& params,
const RegexRuleInfo& info) const { … }
const RegexRulesMatcher::MatchHelper& RegexRulesMatcher::GetMatcherForStage(
RulesetMatchingStage stage) const { … }
}