Index: chrome/browser/usb/usb_service.cc |
diff --git a/chrome/browser/usb/usb_service.cc b/chrome/browser/usb/usb_service.cc |
index 0d575fbf3733dc644d12713f69b6645c6b24034a..b44c1fa0136871e2492564da77d2312348ee8b4f 100644 |
--- a/chrome/browser/usb/usb_service.cc |
+++ b/chrome/browser/usb/usb_service.cc |
@@ -38,8 +38,12 @@ namespace { |
class ExitObserver : public content::NotificationObserver { |
public: |
explicit ExitObserver(UsbService* service) : service_(service) { |
- registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, |
- content::NotificationService::AllSources()); |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&content::NotificationRegistrar::Add, |
+ base::Unretained(®istrar_), this, |
+ chrome::NOTIFICATION_APP_TERMINATING, |
+ content::NotificationService::AllSources())); |
} |
private: |
@@ -48,8 +52,8 @@ class ExitObserver : public content::NotificationObserver { |
const content::NotificationSource& source, |
const content::NotificationDetails& details) OVERRIDE { |
if (type == chrome::NOTIFICATION_APP_TERMINATING) { |
- registrar_.RemoveAll(); |
BrowserThread::DeleteSoon(BrowserThread::FILE, FROM_HERE, service_); |
+ delete this; |
} |
} |
UsbService* service_; |
@@ -64,6 +68,8 @@ UsbService::UsbService() |
: context_(new UsbContext()), |
next_unique_id_(0) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
+ // Will be deleted upon NOTIFICATION_APP_TERMINATING. |
+ new ExitObserver(this); |
} |
UsbService::~UsbService() { |