diff options
Diffstat (limited to 'chrome/browser/net')
-rw-r--r-- | chrome/browser/net/chrome_url_request_context.cc | 18 | ||||
-rw-r--r-- | chrome/browser/net/chrome_url_request_context.h | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc index 3ea9cc1..ae75216 100644 --- a/chrome/browser/net/chrome_url_request_context.cc +++ b/chrome/browser/net/chrome_url_request_context.cc @@ -312,6 +312,9 @@ ChromeURLRequestContext::ChromeURLRequestContext(Profile* profile) NotificationService::current()->AddObserver( this, NotificationType::EXTENSIONS_LOADED, NotificationService::AllSources()); + NotificationService::current()->AddObserver( + this, NotificationType::EXTENSION_UNLOADED, + NotificationService::AllSources()); } // NotificationObserver implementation. @@ -349,6 +352,11 @@ void ChromeURLRequestContext::Observe(NotificationType type, g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(this, &ChromeURLRequestContext::OnNewExtensions, new_paths)); + } else if (NotificationType::EXTENSION_UNLOADED == type) { + Extension* extension = Details<Extension>(details).ptr(); + g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, + NewRunnableMethod(this, &ChromeURLRequestContext::OnUnloadedExtension, + extension->id())); } else { NOTREACHED(); } @@ -363,6 +371,9 @@ void ChromeURLRequestContext::CleanupOnUIThread() { NotificationService::current()->RemoveObserver( this, NotificationType::EXTENSIONS_LOADED, NotificationService::AllSources()); + NotificationService::current()->RemoveObserver( + this, NotificationType::EXTENSION_UNLOADED, + NotificationService::AllSources()); } FilePath ChromeURLRequestContext::GetPathForExtension(const std::string& id) { @@ -399,6 +410,13 @@ void ChromeURLRequestContext::OnNewExtensions(ExtensionPaths* new_paths) { delete new_paths; } +void ChromeURLRequestContext::OnUnloadedExtension( + const std::string& extension_id) { + ExtensionPaths::iterator iter = extension_paths_.find(extension_id); + DCHECK(iter != extension_paths_.end()); + extension_paths_.erase(iter); +} + ChromeURLRequestContext::~ChromeURLRequestContext() { DCHECK(NULL == prefs_); diff --git a/chrome/browser/net/chrome_url_request_context.h b/chrome/browser/net/chrome_url_request_context.h index 55af609..d5024c1 100644 --- a/chrome/browser/net/chrome_url_request_context.h +++ b/chrome/browser/net/chrome_url_request_context.h @@ -94,6 +94,9 @@ class ChromeURLRequestContext : public URLRequestContext, // Callback for when new extensions are loaded. void OnNewExtensions(ExtensionPaths* new_paths); + // Callback for when an extension is unloaded. + void OnUnloadedExtension(const std::string& id); + // Destructor. virtual ~ChromeURLRequestContext(); |