diff options
-rw-r--r-- | chrome/browser/extensions/user_script_listener.cc | 6 | ||||
-rw-r--r-- | chrome/browser/extensions/user_script_listener.h | 4 | ||||
-rw-r--r-- | chrome/browser/renderer_host/resource_dispatcher_host.cc | 2 |
3 files changed, 12 insertions, 0 deletions
diff --git a/chrome/browser/extensions/user_script_listener.cc b/chrome/browser/extensions/user_script_listener.cc index aec615c..aba4a6b 100644 --- a/chrome/browser/extensions/user_script_listener.cc +++ b/chrome/browser/extensions/user_script_listener.cc @@ -16,6 +16,7 @@ UserScriptListener::UserScriptListener(ResourceQueue* resource_queue) : resource_queue_(resource_queue), user_scripts_ready_(false) { + DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); DCHECK(resource_queue_); registrar_.Add(this, NotificationType::EXTENSION_LOADED, @@ -26,6 +27,11 @@ UserScriptListener::UserScriptListener(ResourceQueue* resource_queue) NotificationService::AllSources()); } +void UserScriptListener::ShutdownMainThread() { + DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); + registrar_.RemoveAll(); +} + bool UserScriptListener::ShouldDelayRequest( URLRequest* request, const ResourceDispatcherHostRequestInfo& request_info, diff --git a/chrome/browser/extensions/user_script_listener.h b/chrome/browser/extensions/user_script_listener.h index f24bd05..f10240b 100644 --- a/chrome/browser/extensions/user_script_listener.h +++ b/chrome/browser/extensions/user_script_listener.h @@ -30,6 +30,10 @@ class UserScriptListener public: explicit UserScriptListener(ResourceQueue* resource_queue); + // Call this to do necessary cleanup on the main thread before the object + // is deleted. + void ShutdownMainThread(); + // ResourceQueueDelegate: virtual bool ShouldDelayRequest( URLRequest* request, diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.cc b/chrome/browser/renderer_host/resource_dispatcher_host.cc index 8837247..4c3c8b2 100644 --- a/chrome/browser/renderer_host/resource_dispatcher_host.cc +++ b/chrome/browser/renderer_host/resource_dispatcher_host.cc @@ -194,6 +194,8 @@ ResourceDispatcherHost::~ResourceDispatcherHost() { AsyncResourceHandler::GlobalCleanup(); STLDeleteValues(&pending_requests_); + user_script_listener_->ShutdownMainThread(); + // Clear blocked requests if any left. // Note that we have to do this in 2 passes as we cannot call // CancelBlockedRequestsForRoute while iterating over |