diff options
author | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-05 08:21:36 +0000 |
---|---|---|
committer | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-05 08:21:36 +0000 |
commit | b813ed790aa8a212b197c231b883bdf193595aa3 (patch) | |
tree | 833830e3a6fd5895485efbada982ba36dcbc625f /chrome/browser/extensions/api/declarative | |
parent | b3ee317ffd1621d89a8ce1b330586667d5f9ba41 (diff) | |
download | chromium_src-b813ed790aa8a212b197c231b883bdf193595aa3.zip chromium_src-b813ed790aa8a212b197c231b883bdf193595aa3.tar.gz chromium_src-b813ed790aa8a212b197c231b883bdf193595aa3.tar.bz2 |
Hook up WebRequestRulesRegistry into old WebRequest API
BUG=112155
TEST=no
Review URL: https://chromiumcodereview.appspot.com/9965019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@130867 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/api/declarative')
4 files changed, 45 insertions, 24 deletions
diff --git a/chrome/browser/extensions/api/declarative/declarative_api.cc b/chrome/browser/extensions/api/declarative/declarative_api.cc index 8f09411..72d9fc1 100644 --- a/chrome/browser/extensions/api/declarative/declarative_api.cc +++ b/chrome/browser/extensions/api/declarative/declarative_api.cc @@ -8,7 +8,7 @@ #include "base/bind_helpers.h" #include "base/values.h" #include "chrome/browser/extensions/api/declarative/rules_registry_service.h" -#include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/extension_system_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/experimental.declarative.h" #include "content/public/browser/browser_thread.h" @@ -46,7 +46,8 @@ bool RulesFunction::RunImpl() { EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &event_name)); RulesRegistryService* rules_registry_service = - profile()->GetExtensionService()->GetRulesRegistryService(); + ExtensionSystemFactory::GetForProfile(profile())-> + rules_registry_service(); rules_registry_ = rules_registry_service->GetRulesRegistry(event_name); // Raw access to this function is not available to extensions, therefore // there should never be a request for a nonexisting rules registry. diff --git a/chrome/browser/extensions/api/declarative/declarative_apitest.cc b/chrome/browser/extensions/api/declarative/declarative_apitest.cc index d40a401..3e56f45 100644 --- a/chrome/browser/extensions/api/declarative/declarative_apitest.cc +++ b/chrome/browser/extensions/api/declarative/declarative_apitest.cc @@ -7,9 +7,10 @@ #include "base/command_line.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/extensions/api/declarative/rules_registry_service.h" +#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.h" #include "chrome/browser/extensions/extension_apitest.h" -#include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/extension_system_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_switches.h" @@ -21,35 +22,18 @@ using extensions::RulesRegistry; using extensions::RulesRegistryService; using extensions::WebRequestRulesRegistry; -namespace { -const char kTestEvent[] = "experimental.webRequest.onRequest"; -} // namespace - class DeclarativeApiTest : public ExtensionApiTest { public: - DeclarativeApiTest() : rules_registry_(NULL) {} + DeclarativeApiTest() {} virtual ~DeclarativeApiTest() {} virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { ExtensionApiTest::SetUpCommandLine(command_line); command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis); } - - void RegisterTestRuleRegistry() { - Profile* profile = browser()->profile(); - RulesRegistryService* rules_registry_service = - profile->GetExtensionService()->GetRulesRegistryService(); - rules_registry_ = new WebRequestRulesRegistry(); - // TODO(battre): The registry should register itself when the - // RulesRegistryService is instantiated. - rules_registry_service->RegisterRulesRegistry(kTestEvent, rules_registry_); - } - - scoped_refptr<RulesRegistry> rules_registry_; }; IN_PROC_BROWSER_TEST_F(DeclarativeApiTest, DeclarativeApi) { - RegisterTestRuleRegistry(); ASSERT_TRUE(RunExtensionTest("declarative/api")) << message_; // Check that unloading the page has removed all rules. @@ -60,15 +44,22 @@ IN_PROC_BROWSER_TEST_F(DeclarativeApiTest, DeclarativeApi) { // to process this unloading. The next task to retrive all rules // is therefore processed after the UnloadExtension task has been executed. + RulesRegistryService* rules_registry_service = + ExtensionSystemFactory::GetForProfile(browser()->profile())-> + rules_registry_service(); + scoped_refptr<RulesRegistry> rules_registry = + rules_registry_service->GetRulesRegistry( + extensions::declarative_webrequest_constants::kOnRequest); + std::vector<linked_ptr<RulesRegistry::Rule> > known_rules; content::BrowserThread::PostTask( - rules_registry_->GetOwnerThread(), + rules_registry->GetOwnerThread(), FROM_HERE, base::Bind(base::IgnoreResult(&RulesRegistry::GetAllRules), - rules_registry_, extension_id, &known_rules)); + rules_registry, extension_id, &known_rules)); - ui_test_utils::RunAllPendingInMessageLoop(rules_registry_->GetOwnerThread()); + ui_test_utils::RunAllPendingInMessageLoop(rules_registry->GetOwnerThread()); EXPECT_TRUE(known_rules.empty()); } diff --git a/chrome/browser/extensions/api/declarative/rules_registry_service.cc b/chrome/browser/extensions/api/declarative/rules_registry_service.cc index 40d5c12..dcd1746 100644 --- a/chrome/browser/extensions/api/declarative/rules_registry_service.cc +++ b/chrome/browser/extensions/api/declarative/rules_registry_service.cc @@ -6,7 +6,11 @@ #include "base/bind.h" #include "base/logging.h" +#include "content/public/browser/browser_thread.h" #include "chrome/browser/extensions/api/declarative/initializing_rules_registry.h" +#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h" +#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.h" +#include "chrome/browser/extensions/api/web_request/web_request_api.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/extensions/extension.h" #include "content/public/browser/notification_details.h" @@ -14,6 +18,17 @@ namespace extensions { +namespace { + +// Registers |web_request_rules_registry| on the IO thread. +void RegisterToExtensionWebRequestEventRouterOnIO( + scoped_refptr<WebRequestRulesRegistry> web_request_rules_registry) { + ExtensionWebRequestEventRouter::GetInstance()->RegisterRulesRegistry( + web_request_rules_registry); +} + +} // namespace + RulesRegistryService::RulesRegistryService(Profile* profile) { if (profile) { registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, @@ -23,6 +38,17 @@ RulesRegistryService::RulesRegistryService(Profile* profile) { RulesRegistryService::~RulesRegistryService() {} +void RulesRegistryService::RegisterDefaultRulesRegistries() { + scoped_refptr<WebRequestRulesRegistry> web_request_rules_registry( + new WebRequestRulesRegistry); + RegisterRulesRegistry(declarative_webrequest_constants::kOnRequest, + web_request_rules_registry); + content::BrowserThread::PostTask( + content::BrowserThread::IO, FROM_HERE, + base::Bind(&RegisterToExtensionWebRequestEventRouterOnIO, + web_request_rules_registry)); +} + void RulesRegistryService::RegisterRulesRegistry( const std::string& event_name, scoped_refptr<RulesRegistry> rule_registry) { diff --git a/chrome/browser/extensions/api/declarative/rules_registry_service.h b/chrome/browser/extensions/api/declarative/rules_registry_service.h index 145f62d..92bb166 100644 --- a/chrome/browser/extensions/api/declarative/rules_registry_service.h +++ b/chrome/browser/extensions/api/declarative/rules_registry_service.h @@ -34,6 +34,9 @@ class RulesRegistryService : public content::NotificationObserver { explicit RulesRegistryService(Profile* profile); virtual ~RulesRegistryService(); + // Registers the default RulesRegistries used in Chromium. + void RegisterDefaultRulesRegistries(); + // Registers a RulesRegistry and wraps it in an InitializingRulesRegistry. void RegisterRulesRegistry(const std::string& event_name, scoped_refptr<RulesRegistry> rule_registry); |