Index: chrome/browser/views/extensions/extension_popup.h |
diff --git a/chrome/browser/views/extensions/extension_popup.h b/chrome/browser/views/extensions/extension_popup.h |
index 6969fc2d38c64f5c994fdb658a0ee526f66b0906..f44ace3253ef55bad9fa0dc9dd6c39497fd70008 100644 |
--- a/chrome/browser/views/extensions/extension_popup.h |
+++ b/chrome/browser/views/extensions/extension_popup.h |
@@ -23,9 +23,20 @@ class Widget; |
} |
class ExtensionPopup : public BrowserBubble, |
+ public BrowserBubble::Delegate, |
public NotificationObserver, |
- public ExtensionView::Container { |
+ public ExtensionView::Container, |
+ public base::RefCounted<ExtensionPopup> { |
public: |
+ // Observer to ExtensionPopup events. |
+ class Observer { |
+ public: |
+ // Called when the ExtensionPopup has closed. Note that it |
+ // is ref-counted, and thus will be released shortly after |
+ // making this delegate call. |
+ virtual void ExtensionPopupClosed(ExtensionPopup* popup) {} |
+ }; |
+ |
enum PopupChrome { |
BUBBLE_CHROME, |
RECTANGLE_CHROME |
@@ -47,6 +58,8 @@ class ExtensionPopup : public BrowserBubble, |
// If |arrow_location| is BOTTOM_*, then the popup 'pops up', otherwise |
// the popup 'drops down'. |
// Pass |activate_on_show| as true to activate the popup window. |
+ // Pass |inspect_with_devtools| as true to pin the popup open and show the |
+ // devtools window for it. |
// The |chrome| argument controls the chrome that surrounds the pop-up. |
// Passing BUBBLE_CHROME will give the pop-up a bubble-like appearance, |
// including the arrow mentioned above. Passing RECTANGLE_CHROME will give |
@@ -62,7 +75,20 @@ class ExtensionPopup : public BrowserBubble, |
const gfx::Rect& relative_to, |
BubbleBorder::ArrowLocation arrow_location, |
bool activate_on_show, |
- PopupChrome chrome); |
+ bool inspect_with_devtools, |
+ PopupChrome chrome, |
+ Observer* observer); |
+ |
+ // Closes the ExtensionPopup (this will cause the delegate |
+ // ExtensionPopupClosed to fire. |
+ void Close(); |
+ |
+ // Some clients wish to do their own custom focus change management. If this |
+ // is set to false, then the ExtensionPopup will not do anything in response |
+ // to the BubbleLostFocus() calls it gets from the BrowserBubble. |
+ void set_close_on_lost_focus(bool close_on_lost_focus) { |
+ close_on_lost_focus_ = close_on_lost_focus; |
+ } |
ExtensionHost* host() const { return extension_host_.get(); } |
@@ -71,6 +97,13 @@ class ExtensionPopup : public BrowserBubble, |
virtual void Show(bool activate); |
virtual void ResizeToView(); |
+ // BrowserBubble::Delegate methods. |
+ virtual void BubbleBrowserWindowMoved(BrowserBubble* bubble); |
+ virtual void BubbleBrowserWindowClosing(BrowserBubble* bubble); |
+ virtual void BubbleGotFocus(BrowserBubble* bubble); |
+ virtual void BubbleLostFocus(BrowserBubble* bubble, |
+ bool lost_focus_to_child); |
+ |
// NotificationObserver overrides. |
virtual void Observe(NotificationType type, |
const NotificationSource& source, |
@@ -93,7 +126,9 @@ class ExtensionPopup : public BrowserBubble, |
const gfx::Rect& relative_to, |
BubbleBorder::ArrowLocation arrow_location, |
bool activate_on_show, |
- PopupChrome chrome); |
+ bool inspect_with_devtools, |
+ PopupChrome chrome, |
+ Observer* observer); |
// Gives the desired bounds (in screen coordinates) given the rect to point |
// to and the size of the contained contents. Includes all of the |
@@ -110,6 +145,16 @@ class ExtensionPopup : public BrowserBubble, |
// Flag used to indicate if the pop-up should be activated upon first display. |
bool activate_on_show_; |
+ // Flag used to indicate if the pop-up should open a devtools window once |
+ // it is shown inspecting it. |
+ bool inspect_with_devtools_; |
+ |
+ // If false, ignore BrowserBubble::Delegate::BubbleLostFocus() calls. |
+ bool close_on_lost_focus_; |
+ |
+ // Whether the ExtensionPopup is current going about closing itself. |
+ bool closing_; |
+ |
NotificationRegistrar registrar_; |
// A separate widget and associated pieces to draw a border behind the |
@@ -123,6 +168,9 @@ class ExtensionPopup : public BrowserBubble, |
// The type of chrome associated with the popup window. |
PopupChrome popup_chrome_; |
+ // The observer of this popup. |
+ Observer* observer_; |
+ |
// A cached copy of the arrow-position for the bubble chrome. |
// If a black-border was requested, we still need this value to determine |
// the position of the pop-up in relation to |relative_to_|. |