Index: chrome/browser/ui/browser.cc |
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc |
index bbebf24e6ea6474003b907a08f962a0699bfb246..da68913b06795b9f691ccd3b2b1f36417f321713 100644 |
--- a/chrome/browser/ui/browser.cc |
+++ b/chrome/browser/ui/browser.cc |
@@ -4272,8 +4272,14 @@ void Browser::Observe(int type, |
TabStripModel* model = tab_handler_->GetTabStripModel(); |
for (int i = model->count() - 1; i >= 0; --i) { |
TabContents* tc = model->GetTabContentsAt(i)->tab_contents(); |
- if (tc->GetURL().SchemeIs(chrome::kExtensionScheme) && |
- tc->GetURL().host() == extension->id()) { |
+ bool close_tab_contents = |
+ tc->GetURL().SchemeIs(chrome::kExtensionScheme) && |
+ tc->GetURL().host() == extension->id(); |
+ // We want to close all panels originated by the unloaded extension. |
+ close_tab_contents = close_tab_contents || (type_ == TYPE_PANEL && |
+ (web_app::GetExtensionIdFromApplicationName(app_name_) == |
+ extension->id())); |
+ if (close_tab_contents) { |
CloseTabContents(tc); |
} |
} |