#include "extensions/browser/api/declarative_net_request/ruleset_manager.h"
#include <iterator>
#include <optional>
#include <tuple>
#include "base/check_op.h"
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/functional/bind.h"
#include "base/metrics/histogram_macros.h"
#include "base/not_fatal_until.h"
#include "base/notreached.h"
#include "base/ranges/algorithm.h"
#include "base/time/time.h"
#include "base/timer/elapsed_timer.h"
#include "components/web_cache/browser/web_cache_manager.h"
#include "extensions/browser/api/declarative_net_request/composite_matcher.h"
#include "extensions/browser/api/declarative_net_request/constants.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"
#include "extensions/browser/api/declarative_webrequest/request_stage.h"
#include "extensions/browser/api/extensions_api_client.h"
#include "extensions/browser/api/web_request/permission_helper.h"
#include "extensions/browser/api/web_request/web_request_info.h"
#include "extensions/browser/api/web_request/web_request_permissions.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_util.h"
#include "extensions/common/api/declarative_net_request.h"
#include "extensions/common/constants.h"
#include "extensions/common/switches.h"
#include "url/origin.h"
namespace extensions::declarative_net_request {
namespace {
flat_rule;
dnr_api;
PageAccess;
void NotifyRequestWithheld(const ExtensionId& extension_id,
const WebRequestInfo& request) { … }
class ScopedEvaluateRequestTimer { … };
}
RulesetManager::RulesetManager(content::BrowserContext* browser_context)
: … { … }
RulesetManager::~RulesetManager() { … }
void RulesetManager::AddRuleset(const ExtensionId& extension_id,
std::unique_ptr<CompositeMatcher> matcher) { … }
void RulesetManager::RemoveRuleset(const ExtensionId& extension_id) { … }
std::set<ExtensionId> RulesetManager::GetExtensionsWithRulesets() const { … }
CompositeMatcher* RulesetManager::GetMatcherForExtension(
const ExtensionId& extension_id) { … }
const CompositeMatcher* RulesetManager::GetMatcherForExtension(
const ExtensionId& extension_id) const { … }
const std::vector<RequestAction>& RulesetManager::EvaluateBeforeRequest(
const WebRequestInfo& request,
bool is_incognito_context) const { … }
std::vector<RequestAction> RulesetManager::EvaluateRequestWithHeaders(
const WebRequestInfo& request,
const net::HttpResponseHeaders* response_headers,
bool is_incognito_context) const { … }
bool RulesetManager::HasAnyExtraHeadersMatcher() const { … }
bool RulesetManager::HasExtraHeadersMatcherForRequest(
const WebRequestInfo& request,
bool is_incognito_context) const { … }
void RulesetManager::OnRenderFrameCreated(content::RenderFrameHost* host) { … }
void RulesetManager::OnRenderFrameDeleted(content::RenderFrameHost* host) { … }
void RulesetManager::OnDidFinishNavigation(
content::NavigationHandle* navigation_handle) { … }
bool RulesetManager::HasRulesets(RulesetMatchingStage stage) const { … }
std::vector<RequestAction> RulesetManager::MergeModifyHeaderActions(
std::vector<RequestAction> lhs_actions,
std::vector<RequestAction> rhs_actions) const { … }
void RulesetManager::SetObserverForTest(TestObserver* observer) { … }
RulesetManager::ExtensionRulesetData::ExtensionRulesetData(
const ExtensionId& extension_id,
const base::Time& extension_install_time,
std::unique_ptr<CompositeMatcher> matcher)
: … { … }
RulesetManager::ExtensionRulesetData::~ExtensionRulesetData() = default;
RulesetManager::ExtensionRulesetData::ExtensionRulesetData(
ExtensionRulesetData&& other) = default;
RulesetManager::ExtensionRulesetData& RulesetManager::ExtensionRulesetData::
operator=(ExtensionRulesetData&& other) = default;
bool RulesetManager::ExtensionRulesetData::operator<(
const ExtensionRulesetData& other) const { … }
std::optional<RequestAction> RulesetManager::GetAction(
const std::vector<RulesetAndPageAccess>& rulesets,
const WebRequestInfo& request,
const RequestParams& params,
RulesetMatchingStage stage) const { … }
std::vector<RequestAction> RulesetManager::GetModifyHeadersActions(
const std::vector<RulesetAndPageAccess>& rulesets,
const WebRequestInfo& request,
const RequestParams& params,
RulesetMatchingStage stage) const { … }
std::vector<RequestAction> RulesetManager::EvaluateRequestInternal(
const WebRequestInfo& request,
const net::HttpResponseHeaders* response_headers,
bool is_incognito_context) const { … }
bool RulesetManager::ShouldEvaluateRequest(
const WebRequestInfo& request) const { … }
bool RulesetManager::ShouldEvaluateRulesetForRequest(
const ExtensionRulesetData& ruleset,
const WebRequestInfo& request,
bool is_incognito_context,
PageAccess& host_permission_access) const { … }
}