// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_BROWSER_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_RULES_REGISTRY_H_ #define EXTENSIONS_BROWSER_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_RULES_REGISTRY_H_ #include <list> #include <map> #include <memory> #include <set> #include <string> #include <vector> #include "base/gtest_prod_util.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "components/url_matcher/url_matcher.h" #include "extensions/browser/api/declarative/declarative_rule.h" #include "extensions/browser/api/declarative/rules_registry.h" #include "extensions/browser/api/declarative_webrequest/request_stage.h" #include "extensions/browser/api/declarative_webrequest/webrequest_action.h" #include "extensions/browser/api/declarative_webrequest/webrequest_condition.h" #include "extensions/common/extension_id.h" namespace content { class BrowserContext; } namespace extension_web_request_api_helpers { struct EventResponseDelta; } namespace extensions { class PermissionHelper; WebRequestRule; // The WebRequestRulesRegistry is responsible for managing // the internal representation of rules for the Declarative Web Request API. // // Here is the high level overview of this functionality: // // api::events::Rule consists of Conditions and Actions, these are // represented as a WebRequestRule with WebRequestConditions and // WebRequestRuleActions. // // WebRequestConditions represent JSON dictionaries as the following: // { // 'instanceType': 'URLMatcher', // 'host_suffix': 'example.com', // 'path_prefix': '/query', // 'scheme': 'http' // } // // The evaluation of URL related condition attributes (host_suffix, path_prefix) // is delegated to a URLMatcher, because this is capable of evaluating many // of such URL related condition attributes in parallel. // // For this, the URLRequestCondition has a URLMatcherConditionSet, which // represents the {'host_suffix': 'example.com', 'path_prefix': '/query'} part. // We will then ask the URLMatcher, whether a given URL // "http://www.example.com/query/" has any matches, and the URLMatcher // will respond with the base::MatcherStringPattern::ID. We can map this // to the WebRequestRule and check whether also the other conditions (in this // example 'scheme': 'http') are fulfilled. class WebRequestRulesRegistry : public RulesRegistry { … }; } // namespace extensions #endif // EXTENSIONS_BROWSER_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_RULES_REGISTRY_H_