summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/extensions/user_script_listener.cc6
-rw-r--r--chrome/browser/extensions/user_script_listener.h4
-rw-r--r--chrome/browser/renderer_host/resource_dispatcher_host.cc2
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