Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: extensions/browser/api/web_request/web_request_api.cc

Issue 2721793002: Extensions: Make ExtensionWebRequestEventRouter leaky. (Closed)
Patch Set: Address review. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/api/web_request/web_request_api.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/api/web_request/web_request_api.cc
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc
index b81023248535d3064adaf563327f06568d444b64..e9d8ff2e52ea1e010e9776e34ceaf9af4fb097f8 100644
--- a/extensions/browser/api/web_request/web_request_api.cc
+++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -401,6 +401,9 @@ void WebRequestAPI::OnListenerRemoved(const EventListenerInfo& details) {
// Note that details.event_name is actually the sub_event_name!
ExtensionWebRequestEventRouter::EventListener::ID id(
details.browser_context, details.extension_id, details.event_name, 0, 0);
+
+ // This Unretained is safe because the ExtensionWebRequestEventRouter
+ // singleton is leaked.
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(
@@ -563,7 +566,8 @@ ExtensionWebRequestEventRouter::RequestFilter::~RequestFilter() {
// static
ExtensionWebRequestEventRouter* ExtensionWebRequestEventRouter::GetInstance() {
- return base::Singleton<ExtensionWebRequestEventRouter>::get();
+ CR_DEFINE_STATIC_LOCAL(ExtensionWebRequestEventRouter, instance, ());
Wez 2017/03/01 17:28:16 Will this have the correct behaviour with respect
karandeepb 2017/03/01 18:07:21 Yeah state will be carried over for unit tests run
Wez 2017/03/01 18:09:47 My recollection was that Singleton and LazyInstanc
karandeepb 2017/03/01 19:17:51 Yeah so there's the ShadowingAtExitManager which y
+ return &instance;
}
ExtensionWebRequestEventRouter::ExtensionWebRequestEventRouter()
@@ -571,9 +575,6 @@ ExtensionWebRequestEventRouter::ExtensionWebRequestEventRouter()
web_request_event_router_delegate_(
ExtensionsAPIClient::Get()->CreateWebRequestEventRouterDelegate()) {}
-ExtensionWebRequestEventRouter::~ExtensionWebRequestEventRouter() {
-}
-
void ExtensionWebRequestEventRouter::RegisterRulesRegistry(
void* browser_context,
int rules_registry_id,
@@ -1108,9 +1109,12 @@ bool ExtensionWebRequestEventRouter::DispatchEvent(
DispatchEventToListeners(browser_context, std::move(listeners_to_dispatch),
std::move(event_details));
} else {
- event_details.release()->DetermineFrameDataOnIO(base::Bind(
- &ExtensionWebRequestEventRouter::DispatchEventToListeners, AsWeakPtr(),
- browser_context, base::Passed(&listeners_to_dispatch)));
+ // This Unretained is safe because the ExtensionWebRequestEventRouter
+ // singleton is leaked.
+ event_details.release()->DetermineFrameDataOnIO(
+ base::Bind(&ExtensionWebRequestEventRouter::DispatchEventToListeners,
+ base::Unretained(this), browser_context,
+ base::Passed(&listeners_to_dispatch)));
}
if (num_handlers_blocking > 0) {
@@ -1940,10 +1944,12 @@ bool ExtensionWebRequestEventRouter::ProcessDeclarativeRules(
// The rules registry is still loading. Block this request until it
// finishes.
+ // This Unretained is safe because the ExtensionWebRequestEventRouter
+ // singleton is leaked.
rules_registry->ready().Post(
FROM_HERE,
base::Bind(&ExtensionWebRequestEventRouter::OnRulesRegistryReady,
- AsWeakPtr(), browser_context, event_name,
+ base::Unretained(this), browser_context, event_name,
request->identifier(), request_stage));
BlockedRequest& blocked_request = blocked_requests_[request->identifier()];
blocked_request.num_handlers_blocking++;
« no previous file with comments | « extensions/browser/api/web_request/web_request_api.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698