diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-26 20:27:17 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-26 20:27:17 +0000 |
commit | d51eb48985356adc40a55d678b14f0c0a5870ffb (patch) | |
tree | e0152ac8fad198468719fc3921087421a4ffdee0 /chrome/browser/views/browser_actions_container.cc | |
parent | c6e72c6f1ba7ea524176074b758d1f91a05516a8 (diff) | |
download | chromium_src-d51eb48985356adc40a55d678b14f0c0a5870ffb.zip chromium_src-d51eb48985356adc40a55d678b14f0c0a5870ffb.tar.gz chromium_src-d51eb48985356adc40a55d678b14f0c0a5870ffb.tar.bz2 |
Re-apply r42703 which was reverted because of a conflict with another patch that was being reverted:
TBR=ananta
Views: fix a crash where in the browser actions container.
This crash didn't actually affect linux/views (for some reason the RunContextMenu() call seems to never return).
BUG=38964
TEST=crash an extension while the context menu for it is showing.
original review: http://codereview.chromium.org/1237004/show
Review URL: http://codereview.chromium.org/1449001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42813 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/browser_actions_container.cc')
-rw-r--r-- | chrome/browser/views/browser_actions_container.cc | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/chrome/browser/views/browser_actions_container.cc b/chrome/browser/views/browser_actions_container.cc index b23cb76..7ccaee8 100644 --- a/chrome/browser/views/browser_actions_container.cc +++ b/chrome/browser/views/browser_actions_container.cc @@ -125,7 +125,13 @@ BrowserActionButton::BrowserActionButton(Extension* extension, Extension::kBrowserActionIconMaxSize)); } -BrowserActionButton::~BrowserActionButton() { +void BrowserActionButton::Destroy() { + if (showing_context_menu_) { + context_menu_menu_->CancelMenu(); + MessageLoop::current()->DeleteSoon(FROM_HERE, this); + } else { + delete this; + } } gfx::Insets BrowserActionButton::GetInsets() const { @@ -235,6 +241,8 @@ bool BrowserActionButton::OnMousePressed(const views::MouseEvent& e) { context_menu_menu_->RunContextMenuAt(point); SetButtonNotPushed(); + showing_context_menu_ = false; + return false; } else if (IsPopup()) { return MenuButton::OnMousePressed(e); @@ -276,6 +284,9 @@ void BrowserActionButton::SetButtonNotPushed() { menu_visible_ = false; } +BrowserActionButton::~BrowserActionButton() { +} + //////////////////////////////////////////////////////////////////////////////// // BrowserActionView @@ -289,6 +300,11 @@ BrowserActionView::BrowserActionView(Extension* extension, button_->UpdateState(); } +BrowserActionView::~BrowserActionView() { + RemoveChildView(button_); + button_->Destroy(); +} + gfx::Canvas* BrowserActionView::GetIconWithBadge() { int tab_id = panel_->GetCurrentTabId(); |