| Index: ash/system/tray/tray_bubble_wrapper.cc
|
| diff --git a/ash/system/tray/tray_bubble_wrapper.cc b/ash/system/tray/tray_bubble_wrapper.cc
|
| index 75651c256a5f888107293a3d62c97b78bd306901..70980ea7c2e7d5e976aad9739dd7e05b1bd1b0af 100644
|
| --- a/ash/system/tray/tray_bubble_wrapper.cc
|
| +++ b/ash/system/tray/tray_bubble_wrapper.cc
|
| @@ -7,6 +7,9 @@
|
| #include "ash/system/tray/tray_background_view.h"
|
| #include "ash/system/tray/tray_event_filter.h"
|
| #include "ash/wm/window_properties.h"
|
| +#include "base/bind.h"
|
| +#include "base/message_loop.h"
|
| +#include "base/time.h"
|
| #include "ui/views/bubble/tray_bubble_view.h"
|
| #include "ui/views/widget/widget.h"
|
|
|
| @@ -17,6 +20,7 @@ TrayBubbleWrapper::TrayBubbleWrapper(TrayBackgroundView* tray,
|
| views::TrayBubbleView* bubble_view)
|
| : tray_(tray),
|
| bubble_view_(bubble_view) {
|
| + DCHECK(tray_);
|
| bubble_widget_ = views::BubbleDelegateView::CreateBubble(bubble_view_);
|
| bubble_widget_->AddObserver(this);
|
| bubble_widget_->GetNativeView()->
|
| @@ -40,7 +44,17 @@ TrayBubbleWrapper::~TrayBubbleWrapper() {
|
| void TrayBubbleWrapper::OnWidgetDestroying(views::Widget* widget) {
|
| CHECK_EQ(bubble_widget_, widget);
|
| bubble_widget_ = NULL;
|
| - tray_->HideBubbleWithView(bubble_view_); // May destroy |bubble_view_|
|
| +
|
| + // Do not call HideBubbleWithView directly but post the task to ensure that
|
| + // HideBubbleWithView is called after the click event on the tray button is
|
| + // handled. See crbug.com/177075 and crbug.com/169940
|
| + MessageLoopForUI::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&TrayBubbleWrapper::HideBubbleWithView, AsWeakPtr()));
|
| +}
|
| +
|
| +void TrayBubbleWrapper::HideBubbleWithView() {
|
| + tray_->HideBubbleWithView(bubble_view_);
|
| }
|
|
|
| } // namespace internal
|
|
|