Index: chrome/browser/ui/views/autofill/generated_credit_card_bubble_views.cc |
diff --git a/chrome/browser/ui/views/autofill/generated_credit_card_bubble_views.cc b/chrome/browser/ui/views/autofill/generated_credit_card_bubble_views.cc |
index 8bc4766d10e7df5582ce78225b47c15f22fd3f60..f4a9e8484f960b221eb2bde42492cc8fc157bf6d 100644 |
--- a/chrome/browser/ui/views/autofill/generated_credit_card_bubble_views.cc |
+++ b/chrome/browser/ui/views/autofill/generated_credit_card_bubble_views.cc |
@@ -34,9 +34,18 @@ views::View* GetAnchor( |
GeneratedCreditCardBubbleViews::~GeneratedCreditCardBubbleViews() {} |
void GeneratedCreditCardBubbleViews::Show() { |
- // TODO(dbeam): investigate why this steals focus from the web contents. |
views::BubbleDelegateView::CreateBubble(this)->Show(); |
+ // Grab mouse events for 3 seconds after showing. This prevents clicks outside |
+ // of the bubble from dismissing the bubble. After 3 seconds, it will revert |
+ // to normal close-on-deactivate behavior. |
+ GetWidget()->SetCapture(NULL); |
+ capture_timer_.Start( |
+ FROM_HERE, |
+ base::TimeDelta::FromSeconds(3), |
+ base::Bind(&GeneratedCreditCardBubbleViews::ReleaseCapture, |
+ base::Unretained(this))); |
+ |
// This bubble doesn't render correctly on Windows without calling |
// |SizeToContents()|. This must be called after showing the widget. |
SizeToContents(); |
@@ -100,9 +109,14 @@ GeneratedCreditCardBubbleViews::GeneratedCreditCardBubbleViews( |
const base::WeakPtr<GeneratedCreditCardBubbleController>& controller) |
: BubbleDelegateView(GetAnchor(controller), views::BubbleBorder::TOP_RIGHT), |
controller_(controller), |
+ capture_timer_(false, false), |
weak_ptr_factory_(this) { |
gfx::Insets insets = views::BubbleFrameView::GetTitleInsets(); |
set_margins(gfx::Insets(0, insets.left(), insets.top(), insets.left())); |
} |
+void GeneratedCreditCardBubbleViews::ReleaseCapture() { |
+ GetWidget()->ReleaseCapture(); |
+} |
+ |
} // namespace autofill |