Chromium Code Reviews| Index: extensions/browser/api/declarative/rules_registry_service.cc |
| diff --git a/extensions/browser/api/declarative/rules_registry_service.cc b/extensions/browser/api/declarative/rules_registry_service.cc |
| index 9ddc450d66727494e544197ea28ad9a0ecc2e281..406bfaf8d8b39b8ef187709f77376102fa2f5c33 100644 |
| --- a/extensions/browser/api/declarative/rules_registry_service.cc |
| +++ b/extensions/browser/api/declarative/rules_registry_service.cc |
| @@ -21,6 +21,7 @@ |
| #include "extensions/browser/api/extensions_api_client.h" |
| #include "extensions/browser/api/web_request/web_request_api.h" |
| #include "extensions/browser/extension_registry.h" |
| +#include "extensions/browser/guest_view/web_view/web_view_guest.h" |
|
Fady Samuel
2014/11/26 23:39:40
Avoid this include.
Xi Han
2014/11/27 23:25:25
Done.
|
| #include "extensions/common/extension.h" |
| namespace extensions { |
| @@ -30,20 +31,17 @@ namespace { |
| // Registers |web_request_rules_registry| on the IO thread. |
| void RegisterToExtensionWebRequestEventRouterOnIO( |
| content::BrowserContext* browser_context, |
| - const RulesRegistryService::WebViewKey& webview_key, |
| + int rules_registry_id, |
| scoped_refptr<WebRequestRulesRegistry> web_request_rules_registry) { |
| ExtensionWebRequestEventRouter::GetInstance()->RegisterRulesRegistry( |
| - browser_context, webview_key, web_request_rules_registry); |
| -} |
| - |
| -bool IsWebView(const RulesRegistryService::WebViewKey& webview_key) { |
| - return webview_key.embedder_process_id && webview_key.webview_instance_id; |
| + browser_context, rules_registry_id, web_request_rules_registry); |
| } |
| } // namespace |
| RulesRegistryService::RulesRegistryService(content::BrowserContext* context) |
| - : content_rules_registry_(NULL), |
| + : current_rules_registry_id_(0), |
| + content_rules_registry_(NULL), |
| extension_registry_observer_(this), |
| browser_context_(context) { |
| if (browser_context_) { |
| @@ -51,19 +49,23 @@ RulesRegistryService::RulesRegistryService(content::BrowserContext* context) |
| registrar_.Add( |
| this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
| content::NotificationService::AllBrowserContextsAndSources()); |
| - EnsureDefaultRulesRegistriesRegistered(WebViewKey(0, 0)); |
| + EnsureDefaultRulesRegistriesRegistered(kDefultRulesRegistryID, false); |
| } |
| } |
| RulesRegistryService::~RulesRegistryService() {} |
| +int RulesRegistryService::GetNextRulesRegistryId() { |
|
Fady Samuel
2014/11/26 23:39:40
GetNextRulesRegistryID
Xi Han
2014/11/27 23:25:25
Done.
|
| + return ++current_rules_registry_id_; |
| +} |
| + |
| void RulesRegistryService::EnsureDefaultRulesRegistriesRegistered( |
| - const WebViewKey& webview_key) { |
| + int rules_registry_id, |
| + bool is_web_view) { |
|
Fady Samuel
2014/11/26 23:39:40
bool cache_rules
Xi Han
2014/11/27 23:25:25
Done.
|
| if (!browser_context_) |
| return; |
| - |
| RulesRegistryKey key(declarative_webrequest_constants::kOnRequest, |
| - webview_key); |
| + rules_registry_id); |
| // If we can find the key in the |rule_registries_| then we have already |
| // installed the default registries. |
| if (ContainsKey(rule_registries_, key)) |
| @@ -71,24 +73,24 @@ void RulesRegistryService::EnsureDefaultRulesRegistriesRegistered( |
| RulesCacheDelegate* web_request_cache_delegate = NULL; |
| - if (!IsWebView(webview_key)) { |
| + if (!is_web_view) { |
|
Fady Samuel
2014/11/26 23:39:40
if (!cache_rules)
Xi Han
2014/11/27 23:25:25
Done.
|
| web_request_cache_delegate = |
| new RulesCacheDelegate(true /*log_storage_init_delay*/); |
| cache_delegates_.push_back(web_request_cache_delegate); |
| } |
| scoped_refptr<WebRequestRulesRegistry> web_request_rules_registry( |
| - new WebRequestRulesRegistry(browser_context_, |
| - web_request_cache_delegate, |
| - webview_key)); |
| + new WebRequestRulesRegistry(browser_context_, web_request_cache_delegate, |
| + rules_registry_id)); |
| RegisterRulesRegistry(web_request_rules_registry); |
| content::BrowserThread::PostTask( |
| content::BrowserThread::IO, FROM_HERE, |
| base::Bind(&RegisterToExtensionWebRequestEventRouterOnIO, |
| - browser_context_, webview_key, web_request_rules_registry)); |
| + browser_context_, rules_registry_id, |
| + web_request_rules_registry)); |
| // Only create a ContentRulesRegistry for regular pages and not webviews. |
| - if (!IsWebView(webview_key)) { |
| + if (!is_web_view) { |
|
Fady Samuel
2014/11/26 23:39:41
!cache_rules
Xi Han
2014/11/27 23:25:25
Done.
|
| RulesCacheDelegate* content_rules_cache_delegate = |
| new RulesCacheDelegate(false /*log_storage_init_delay*/); |
| cache_delegates_.push_back(content_rules_cache_delegate); |
| @@ -113,8 +115,8 @@ void RulesRegistryService::Shutdown() { |
| content::BrowserThread::PostTask( |
| content::BrowserThread::IO, FROM_HERE, |
| base::Bind(&RegisterToExtensionWebRequestEventRouterOnIO, |
| - browser_context_, WebViewKey(0, 0), |
| - scoped_refptr<WebRequestRulesRegistry>(NULL))); |
| + browser_context_, 0 /* not for web_view*/, |
|
Fady Samuel
2014/11/26 23:39:41
Use kDefaultRulesRegistryID
Xi Han
2014/11/27 23:25:25
Done.
|
| + scoped_refptr<WebRequestRulesRegistry>(NULL))); |
| } |
| static base::LazyInstance<BrowserContextKeyedAPIFactory<RulesRegistryService> > |
| @@ -135,17 +137,18 @@ RulesRegistryService* RulesRegistryService::Get( |
| void RulesRegistryService::RegisterRulesRegistry( |
| scoped_refptr<RulesRegistry> rule_registry) { |
| const std::string event_name(rule_registry->event_name()); |
| - RulesRegistryKey key(event_name, rule_registry->webview_key()); |
| + RulesRegistryKey key(event_name, rule_registry->rules_registry_id()); |
|
Fady Samuel
2014/11/26 23:39:40
This seems really redundant. How about just callin
Xi Han
2014/11/27 23:25:25
Done.
|
| DCHECK(rule_registries_.find(key) == rule_registries_.end()); |
| rule_registries_[key] = rule_registry; |
| } |
| scoped_refptr<RulesRegistry> RulesRegistryService::GetRulesRegistry( |
| - const WebViewKey& webview_key, |
| + int rules_registry_id, |
| + bool is_web_view, |
|
Fady Samuel
2014/11/26 23:39:41
bool cache_rules
Xi Han
2014/11/27 23:25:25
Done.
|
| const std::string& event_name) { |
| - EnsureDefaultRulesRegistriesRegistered(webview_key); |
| + EnsureDefaultRulesRegistriesRegistered(rules_registry_id, is_web_view); |
| - RulesRegistryKey key(event_name, webview_key); |
| + RulesRegistryKey key(event_name, rules_registry_id); |
| RulesRegistryMap::const_iterator i = rule_registries_.find(key); |
| if (i == rule_registries_.end()) |
| return scoped_refptr<RulesRegistry>(); |
| @@ -159,8 +162,9 @@ void RulesRegistryService::RemoveWebViewRulesRegistries(int process_id) { |
| for (RulesRegistryMap::iterator it = rule_registries_.begin(); |
| it != rule_registries_.end(); ++it) { |
| const RulesRegistryKey& key = it->first; |
| - const WebViewKey& webview_key = key.webview_key; |
| - int embedder_process_id = webview_key.embedder_process_id; |
| + int rules_registry_id = key.rules_registry_id; |
| + int embedder_process_id = |
| + WebViewGuest::GetEmbedderProcessID(rules_registry_id); |
| // |process_id| will always be non-zero. |
| // |embedder_process_id| will only be non-zero if the key corresponds to a |
| // webview registry. |
| @@ -175,6 +179,7 @@ void RulesRegistryService::RemoveWebViewRulesRegistries(int process_id) { |
| } |
| for (std::set<RulesRegistryKey>::iterator it = registries_to_delete.begin(); |
| it != registries_to_delete.end(); ++it) { |
| + WebViewGuest::RemoveRulesRegistryID(it->rules_registry_id); |
| rule_registries_.erase(*it); |
| } |
| } |