1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_MESSAGE_BUBBLE_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_MESSAGE_BUBBLE_VIEW_H_
8 #include "chrome/browser/extensions/extension_message_bubble.h"
9 #include "chrome/browser/extensions/extension_message_bubble_controller.h"
10 #include "ui/views/bubble/bubble_delegate.h"
11 #include "ui/views/controls/button/button.h"
12 #include "ui/views/controls/link_listener.h"
24 namespace extensions
{
26 // This is a class that implements the UI for the bubble showing which
27 // extensions look suspicious and have therefore been automatically disabled.
28 class ExtensionMessageBubbleView
: public ExtensionMessageBubble
,
29 public views::BubbleDelegateView
,
30 public views::ButtonListener
,
31 public views::LinkListener
{
33 // Show the Disabled Extension bubble, if needed.
34 static void MaybeShow(
35 Browser
* browser
, ToolbarView
* toolbar_view
, views::View
* anchor_view
);
37 // ExtensionMessageBubble methods.
38 virtual void OnActionButtonClicked(const base::Closure
& callback
) OVERRIDE
;
39 virtual void OnDismissButtonClicked(const base::Closure
& callback
) OVERRIDE
;
40 virtual void OnLinkClicked(const base::Closure
& callback
) OVERRIDE
;
41 virtual void Show() OVERRIDE
;
43 // WidgetObserver methods.
44 virtual void OnWidgetDestroying(views::Widget
* widget
) OVERRIDE
;
47 ExtensionMessageBubbleView(
48 views::View
* anchor_view
,
49 scoped_ptr
<ExtensionMessageBubbleController
> controller
);
50 virtual ~ExtensionMessageBubbleView();
52 // Shows the bubble and updates the counter for how often it has been shown.
55 // views::BubbleDelegateView overrides:
56 virtual void Init() OVERRIDE
;
58 // views::ButtonListener implementation.
59 virtual void ButtonPressed(views::Button
* sender
,
60 const ui::Event
& event
) OVERRIDE
;
62 // views::LinkListener implementation.
63 virtual void LinkClicked(views::Link
* source
, int event_flags
) OVERRIDE
;
65 // views::View implementation.
66 virtual void GetAccessibleState(ui::AccessibleViewState
* state
) OVERRIDE
;
67 virtual void ViewHierarchyChanged(
68 const ViewHierarchyChangedDetails
& details
) OVERRIDE
;
70 base::WeakPtrFactory
<ExtensionMessageBubbleView
> weak_factory_
;
72 // The controller for this bubble.
73 scoped_ptr
<ExtensionMessageBubbleController
> controller_
;
75 // The headline, labels and buttons on the bubble.
76 views::Label
* headline_
;
77 views::Link
* learn_more_
;
78 views::LabelButton
* action_button_
;
79 views::LabelButton
* dismiss_button_
;
81 // All actions (link, button, esc) close the bubble, but we need to
82 // make sure we don't send dismiss if the link was clicked.
86 // Callbacks into the controller.
87 base::Closure action_callback_
;
88 base::Closure dismiss_callback_
;
89 base::Closure link_callback_
;
91 DISALLOW_COPY_AND_ASSIGN(ExtensionMessageBubbleView
);
94 } // namespace extensions
96 #endif // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_MESSAGE_BUBBLE_VIEW_H_