Index: chrome/browser/ui/panels/panel.cc |
diff --git a/chrome/browser/ui/panels/panel.cc b/chrome/browser/ui/panels/panel.cc |
index aa5f4dfe49daf8382345ab9c7219046538ffbbfa..70d9f4677bf3c549814ac7a50395ee0bee6c7d64 100644 |
--- a/chrome/browser/ui/panels/panel.cc |
+++ b/chrome/browser/ui/panels/panel.cc |
@@ -34,6 +34,7 @@ |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/user_metrics.h" |
#include "content/public/browser/web_contents.h" |
+#include "extensions/browser/extension_registry.h" |
#include "extensions/browser/extension_system.h" |
#include "extensions/browser/image_loader.h" |
#include "extensions/common/constants.h" |
@@ -439,11 +440,6 @@ void Panel::Observe(int type, |
case content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED: |
ConfigureAutoResize(content::Source<content::WebContents>(source).ptr()); |
break; |
- case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: |
- if (content::Details<extensions::UnloadedExtensionInfo>( |
- details)->extension->id() == extension_id()) |
- Close(); |
- break; |
case chrome::NOTIFICATION_APP_TERMINATING: |
Close(); |
break; |
@@ -452,6 +448,13 @@ void Panel::Observe(int type, |
} |
} |
+void Panel::OnExtensionUnloaded( |
+ content::BrowserContext* browser_context, |
+ const extensions::Extension* extension, |
+ extensions::UnloadedExtensionInfo::Reason reason) { |
+ if (extension->id() == extension_id()) |
+ Close(); |
+} |
void Panel::OnTitlebarClicked(panel::ClickModifier modifier) { |
if (collection_) |
collection_->OnPanelTitlebarClicked(this, modifier); |
@@ -491,6 +494,7 @@ void Panel::OnNativePanelClosed() { |
// Ensure previously enqueued OnImageLoaded callbacks are ignored. |
image_loader_ptr_factory_.InvalidateWeakPtrs(); |
registrar_.RemoveAll(); |
+ extension_registry_->RemoveObserver(this); |
manager()->OnPanelClosed(this); |
DCHECK(!collection_); |
} |
@@ -532,9 +536,7 @@ void Panel::Initialize(const GURL& url, |
native_panel_->AttachWebContents(web_contents); |
// Close when the extension is unloaded or the browser is exiting. |
- registrar_.Add(this, |
- extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
- content::Source<Profile>(profile_)); |
+ extension_registry_->AddObserver(this); |
registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, |
content::NotificationService::AllSources()); |
registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, |
@@ -801,8 +803,10 @@ void Panel::MinimizeBySystem() { |
native_panel_->MinimizePanelBySystem(); |
} |
-Panel::Panel(Profile* profile, const std::string& app_name, |
- const gfx::Size& min_size, const gfx::Size& max_size) |
+Panel::Panel(Profile* profile, |
+ const std::string& app_name, |
+ const gfx::Size& min_size, |
+ const gfx::Size& max_size) |
: app_name_(app_name), |
profile_(profile), |
collection_(NULL), |
@@ -816,6 +820,7 @@ Panel::Panel(Profile* profile, const std::string& app_name, |
attention_mode_(USE_PANEL_ATTENTION), |
expansion_state_(EXPANDED), |
command_updater_(this), |
+ extension_registry_(extensions::ExtensionRegistry::Get(profile_)), |
image_loader_ptr_factory_(this) { |
} |