Index: chrome/browser/views/frame/browser_view.cc |
diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc |
index c9a31553e73d4f4019c1695520d5308ab5c2a781..580ee771eea0ce2ea3e89b52f2f32e9b20a1bda2 100644 |
--- a/chrome/browser/views/frame/browser_view.cc |
+++ b/chrome/browser/views/frame/browser_view.cc |
@@ -599,9 +599,13 @@ void BrowserView::SetBounds(const gfx::Rect& bounds) { |
} |
void BrowserView::Close() { |
- BubbleSet::iterator bubble = browser_bubbles_.begin(); |
- for (; bubble != browser_bubbles_.end(); ++bubble) |
+ // BrowserWindowClosing will usually cause the bubble to remove itself from |
+ // the set, so we need to iterate in a way that's safe against deletion. |
+ for (BubbleSet::iterator i = browser_bubbles_.begin(); |
+ i != browser_bubbles_.end();) { |
+ BubbleSet::iterator bubble = i++; |
(*bubble)->BrowserWindowClosing(); |
+ } |
frame_->GetWindow()->Close(); |
} |
@@ -1490,10 +1494,12 @@ void BrowserView::Init() { |
status_bubble_.reset(new StatusBubbleViews(GetWidget())); |
- extension_shelf_ = new ExtensionShelf(browser_.get()); |
- extension_shelf_-> |
- SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_EXTENSIONS)); |
- AddChildView(extension_shelf_); |
+ if (browser_->SupportsWindowFeature(Browser::FEATURE_EXTENSIONSHELF)) { |
+ extension_shelf_ = new ExtensionShelf(browser_.get()); |
+ extension_shelf_-> |
+ SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_EXTENSIONS)); |
+ AddChildView(extension_shelf_); |
+ } |
#if defined(OS_WIN) |
InitSystemMenu(); |