0

[Extensions] Move rules registry IDs to a separate file.

The various declarative API directories have a number of circular
dependencies that need to be broken up, and this is the first in a
series of CLs to do that.

This CL creates a separate file in extensions/browser that defines the
IDs that were previously defined in RulesRegistryService.

Bug: 40593486
Change-Id: I7f263e79b0af5b805d01951b403a28d814c4d463
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6288584
Auto-Submit: David Bertoni <dbertoni@chromium.org>
Reviewed-by: Solomon Kinard <solomonkinard@chromium.org>
Commit-Queue: David Bertoni <dbertoni@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1423468}
This commit is contained in:
David Bertoni
2025-02-21 15:57:11 -08:00
committed by Chromium LUCI CQ
parent 23b6788f2f
commit 19744a04ed
15 changed files with 52 additions and 32 deletions

@ -25,6 +25,7 @@
#include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
#include "extensions/browser/api/declarative_webrequest/webrequest_rules_registry.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/common/extension.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/test_extension_dir.h"
@ -115,7 +116,7 @@ class DeclarativeApiTest : public ExtensionApiTest {
extensions::RulesRegistryService::Get(browser()->profile());
scoped_refptr<RulesRegistry> rules_registry =
rules_registry_service->GetRulesRegistry(
RulesRegistryService::kDefaultRulesRegistryID,
rules_registry_ids::kDefaultRulesRegistryID,
extensions::declarative_webrequest_constants::kOnRequest);
std::vector<const api::events::Rule*> rules;

@ -21,6 +21,7 @@
#include "content/public/test/browser_task_environment.h"
#include "extensions/browser/api/declarative/test_rules_registry.h"
#include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/common/api/declarative/declarative_constants.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h"
@ -70,7 +71,7 @@ class RulesRegistryServiceTest : public testing::Test {
TEST_F(RulesRegistryServiceTest, TestConstructionAndMultiThreading) {
RulesRegistryService registry_service(nullptr);
int key = RulesRegistryService::kDefaultRulesRegistryID;
int key = rules_registry_ids::kDefaultRulesRegistryID;
TestRulesRegistry* ui_registry = new TestRulesRegistry("ui", key);
// Test registration.
@ -140,13 +141,13 @@ TEST_F(RulesRegistryServiceTest, DefaultRulesRegistryRegistered) {
EXPECT_EQ(
test_case.expect_api_enabled,
registry_service
.GetRulesRegistry(RulesRegistryService::kDefaultRulesRegistryID,
.GetRulesRegistry(rules_registry_ids::kDefaultRulesRegistryID,
declarative_webrequest_constants::kOnRequest)
.get() != nullptr);
// Content rules registry should always be created.
EXPECT_TRUE(registry_service.GetRulesRegistry(
RulesRegistryService::kDefaultRulesRegistryID,
rules_registry_ids::kDefaultRulesRegistryID,
declarative_content_constants::kOnPageChanged));
EXPECT_TRUE(registry_service.content_rules_registry());

@ -26,6 +26,7 @@
#include "extensions/browser/api/declarative/test_rules_registry.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/common/extension.h"
#include "extensions/common/features/feature_channel.h"
#include "extensions/common/manifest_constants.h"
@ -40,7 +41,7 @@ const char kRule2Id[] = "rule2";
}
namespace extensions {
const int kRulesRegistryID = RulesRegistryService::kDefaultRulesRegistryID;
const int kRulesRegistryID = rules_registry_ids::kDefaultRulesRegistryID;
class RulesRegistryWithCacheTest : public testing::Test {
public:

@ -18,6 +18,7 @@
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/extension_util.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/common/api/declarative/declarative_constants.h"
#include "extensions/common/extension_id.h"
@ -82,7 +83,7 @@ ChromeContentRulesRegistry::ChromeContentRulesRegistry(
: ContentRulesRegistry(browser_context,
declarative_content_constants::kOnPageChanged,
cache_delegate,
RulesRegistryService::kDefaultRulesRegistryID),
rules_registry_ids::kDefaultRulesRegistryID),
evaluators_(std::move(evaluators_factory).Run(this)),
evaluation_disposition_(EVALUATE_REQUESTS) {}

@ -35,6 +35,7 @@
#include "extensions/browser/extension_action_manager.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/browser/test_extension_registry_observer.h"
#include "extensions/common/api/extension_action/action_info.h"
#include "extensions/common/api/extension_action/action_info_test_util.h"
@ -1163,7 +1164,7 @@ IN_PROC_BROWSER_TEST_P(DeclarativeContentApiTestWithContextType,
extensions::RulesRegistryService::Get(browser()->profile());
scoped_refptr<RulesRegistry> rules_registry =
rules_registry_service->GetRulesRegistry(
RulesRegistryService::kDefaultRulesRegistryID,
rules_registry_ids::kDefaultRulesRegistryID,
"declarativeContent.onPageChanged");
DCHECK(rules_registry);

@ -15,6 +15,7 @@
#include "extensions/browser/api/declarative/rules_registry_service.h"
#include "extensions/browser/extension_action.h"
#include "extensions/browser/extension_action_manager.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/common/features/feature_channel.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/test_extension_dir.h"
@ -127,7 +128,7 @@ IN_PROC_BROWSER_TEST_F(SetIconAPITest, Parameter) {
scoped_refptr<RulesRegistry> rules_registry =
extensions::RulesRegistryService::Get(browser()->profile())
->GetRulesRegistry(RulesRegistryService::kDefaultRulesRegistryID,
->GetRulesRegistry(rules_registry_ids::kDefaultRulesRegistryID,
"declarativeContent.onPageChanged");
ASSERT_TRUE(rules_registry);

@ -28,6 +28,7 @@
#include "extensions/browser/api/web_request/web_request_info.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/rules_registry_ids.h"
#include "services/network/public/mojom/fetch_api.mojom-shared.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest-message.h"
@ -71,7 +72,7 @@ class TestWebRequestRulesRegistry : public WebRequestRulesRegistry {
explicit TestWebRequestRulesRegistry(content::BrowserContext* context)
: WebRequestRulesRegistry(context,
nullptr /* cache_delegate */,
RulesRegistryService::kDefaultRulesRegistryID),
rules_registry_ids::kDefaultRulesRegistryID),
num_clear_cache_calls_(0) {}
// Returns how often the in-memory caches of the renderers were instructed

@ -442,6 +442,7 @@ source_set("browser_sources") {
"renderer_startup_helper.h",
"requirements_checker.cc",
"requirements_checker.h",
"rules_registry_ids.h",
"ruleset_parse_result.cc",
"ruleset_parse_result.h",
"sandboxed_unpacker.cc",

@ -23,6 +23,7 @@
#include "extensions/browser/api/declarative/rules_registry_service.h"
#include "extensions/browser/api/extensions_api_client.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/common/api/events.h"
#include "extensions/common/extension_api.h"
#include "extensions/common/permissions/permissions_data.h"
@ -162,7 +163,7 @@ ExtensionFunction::ResponseAction RulesFunction::Run() {
RecordUMA(event_name);
// If we are not operating on a particular <webview>, then the key is 0.
int rules_registry_id = RulesRegistryService::kDefaultRulesRegistryID;
int rules_registry_id = rules_registry_ids::kDefaultRulesRegistryID;
#if BUILDFLAG(ENABLE_GUEST_VIEW)
bool from_web_view = web_view_instance_id != 0;

@ -28,13 +28,8 @@
namespace extensions {
const int RulesRegistryService::kDefaultRulesRegistryID = 0;
const int RulesRegistryService::kInvalidRulesRegistryID = -1;
RulesRegistryService::RulesRegistryService(content::BrowserContext* context)
: current_rules_registry_id_(kDefaultRulesRegistryID),
content_rules_registry_(nullptr),
browser_context_(context) {
: browser_context_(context) {
if (browser_context_) {
extension_registry_observation_.Observe(
ExtensionRegistry::Get(browser_context_));
@ -64,7 +59,7 @@ void RulesRegistryService::Shutdown() {
// instance is.
WebRequestEventRouter::Get(browser_context_)
->RegisterRulesRegistry(browser_context_,
RulesRegistryService::kDefaultRulesRegistryID,
rules_registry_ids::kDefaultRulesRegistryID,
nullptr);
}
@ -109,7 +104,8 @@ scoped_refptr<RulesRegistry> RulesRegistryService::GetRulesRegistry(
// We should have attempted creation of the default rule registries at
// construction.
if (!browser_context_ || rules_registry_id == kDefaultRulesRegistryID) {
if (!browser_context_ ||
rules_registry_id == rules_registry_ids::kDefaultRulesRegistryID) {
return nullptr;
}
@ -204,7 +200,7 @@ void RulesRegistryService::EnsureDefaultRulesRegistriesRegistered() {
DCHECK(!base::Contains(
rule_registries_,
RulesRegistryKey(declarative_webrequest_constants::kOnRequest,
kDefaultRulesRegistryID)));
rules_registry_ids::kDefaultRulesRegistryID)));
// Only register the default web request rules registry if the
// declarativeWebRequest API is enabled. See crbug.com/693243.
@ -215,7 +211,7 @@ void RulesRegistryService::EnsureDefaultRulesRegistriesRegistered() {
.is_available();
if (is_api_enabled) {
// Persist the cache since it pertains to regular pages (i.e. not webviews).
RegisterWebRequestRulesRegistry(kDefaultRulesRegistryID,
RegisterWebRequestRulesRegistry(rules_registry_ids::kDefaultRulesRegistryID,
RulesCacheDelegate::Type::kPersistent);
}

@ -20,6 +20,7 @@
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/browser/rules_registry_ids.h"
namespace content {
class BrowserContext;
@ -37,9 +38,6 @@ class RulesRegistryService : public BrowserContextKeyedAPI,
public ExtensionRegistryObserver,
public RulesCacheDelegate::Observer {
public:
static const int kDefaultRulesRegistryID;
static const int kInvalidRulesRegistryID;
struct RulesRegistryKey {
std::string event_name;
int rules_registry_id;
@ -162,7 +160,7 @@ class RulesRegistryService : public BrowserContextKeyedAPI,
static const bool kServiceHasOwnInstanceInIncognito = true;
static const bool kServiceIsNULLWhileTesting = true;
int current_rules_registry_id_;
int current_rules_registry_id_ = rules_registry_ids::kDefaultRulesRegistryID;
RulesRegistryMap rule_registries_;
@ -172,7 +170,7 @@ class RulesRegistryService : public BrowserContextKeyedAPI,
// Weak pointer into rule_registries_ to make it easier to handle content rule
// conditions.
raw_ptr<ContentRulesRegistry, AcrossTasksDanglingUntriaged>
content_rules_registry_;
content_rules_registry_ = nullptr;
// Listen to extension load, unloaded notification.
base::ScopedObservation<ExtensionRegistry, ExtensionRegistryObserver>

@ -15,18 +15,19 @@
#include "extensions/browser/api/declarative/rules_registry_service.h"
#include "extensions/browser/api/declarative/test_rules_registry.h"
#include "extensions/browser/api_test_utils.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace extensions {
namespace {
const char kExtensionId[] = "foobar";
const char kRuleId[] = "foo";
const int key = extensions::RulesRegistryService::kDefaultRulesRegistryID;
const int key = rules_registry_ids::kDefaultRulesRegistryID;
} // namespace
namespace extensions {
TEST(RulesRegistryTest, FillOptionalIdentifiers) {
content::BrowserTaskEnvironment task_environment;

@ -20,7 +20,6 @@
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
#include "extensions/browser/api/declarative/rules_registry_service.h"
#include "extensions/browser/api/declarative_net_request/action_tracker.h"
#include "extensions/browser/api/declarative_net_request/constants.h"
#include "extensions/browser/api/declarative_net_request/request_action.h"
@ -44,6 +43,7 @@
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extensions_browser_client.h"
#include "extensions/browser/process_map.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/common/api/web_request/web_request_activity_log_constants.h"
#include "extensions/common/error_utils.h"
#include "extensions/common/extension_id.h"
@ -2575,7 +2575,7 @@ bool WebRequestEventRouter::ProcessDeclarativeRules(
int rules_registry_id = request->is_web_view
? request->web_view_rules_registry_id
: RulesRegistryService::kDefaultRulesRegistryID;
: rules_registry_ids::kDefaultRulesRegistryID;
// First parameter identifies the registry, the second indicates whether the
// registry belongs to the cross browser_context.

@ -68,6 +68,7 @@
#include "extensions/browser/guest_view/web_view/web_view_permission_types.h"
#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
#include "extensions/browser/process_manager.h"
#include "extensions/browser/rules_registry_ids.h"
#include "extensions/browser/url_loader_factory_manager.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension_features.h"
@ -396,7 +397,7 @@ int WebViewGuest::GetOrGenerateRulesRegistryID(int embedder_process_id,
int webview_instance_id) {
bool is_web_view = embedder_process_id && webview_instance_id;
if (!is_web_view)
return RulesRegistryService::kDefaultRulesRegistryID;
return rules_registry_ids::kDefaultRulesRegistryID;
WebViewKey key = std::make_pair(content::ChildProcessId(embedder_process_id),
webview_instance_id);
@ -1176,7 +1177,7 @@ bool WebViewGuest::ClearData(base::Time remove_since,
WebViewGuest::WebViewGuest(content::RenderFrameHost* owner_rfh)
: GuestView<WebViewGuest>(owner_rfh),
rules_registry_id_(RulesRegistryService::kInvalidRulesRegistryID),
rules_registry_id_(rules_registry_ids::kInvalidRulesRegistryID),
find_helper_(this),
javascript_dialog_helper_(this),
web_view_guest_delegate_(base::WrapUnique(

@ -0,0 +1,15 @@
// Copyright 2025 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_RULES_REGISTRY_IDS_H_
#define EXTENSIONS_BROWSER_RULES_REGISTRY_IDS_H_
namespace extensions::rules_registry_ids {
inline constexpr int kDefaultRulesRegistryID = 0;
inline constexpr int kInvalidRulesRegistryID = -1;
} // namespace extensions::rules_registry_ids
#endif // EXTENSIONS_BROWSER_RULES_REGISTRY_IDS_H_