Index: chrome/browser/views/location_bar_view.cc |
diff --git a/chrome/browser/views/location_bar_view.cc b/chrome/browser/views/location_bar_view.cc |
index 37c1759d0838036e607ae79bc649a24715c8e24b..98823bcd9ae70572a6aca1baf8cea15974e55833 100644 |
--- a/chrome/browser/views/location_bar_view.cc |
+++ b/chrome/browser/views/location_bar_view.cc |
@@ -1427,8 +1427,7 @@ LocationBarView::PageActionImageView::PageActionImageView( |
tracker_(NULL), |
current_tab_id_(-1), |
preview_enabled_(false), |
- popup_(NULL), |
- ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { |
+ popup_(NULL) { |
Extension* extension = profile->GetExtensionsService()->GetExtensionById( |
page_action->extension_id(), false); |
DCHECK(extension); |
@@ -1447,9 +1446,6 @@ LocationBarView::PageActionImageView::PageActionImageView( |
gfx::Size(Extension::kPageActionIconMaxSize, |
Extension::kPageActionIconMaxSize)); |
} |
- |
- registrar_.Add(this, NotificationType::EXTENSION_HOST_VIEW_SHOULD_CLOSE, |
- Source<Profile>(profile_)); |
} |
LocationBarView::PageActionImageView::~PageActionImageView() { |
@@ -1460,7 +1456,8 @@ LocationBarView::PageActionImageView::~PageActionImageView() { |
HidePopup(); |
} |
-void LocationBarView::PageActionImageView::ExecuteAction(int button) { |
+void LocationBarView::PageActionImageView::ExecuteAction(int button, |
+ bool inspect_with_devtools) { |
if (current_tab_id_ < 0) { |
NOTREACHED() << "No current tab."; |
return; |
@@ -1500,8 +1497,9 @@ void LocationBarView::PageActionImageView::ExecuteAction(int button) { |
rect, |
BubbleBorder::TOP_RIGHT, |
true, // Activate the popup window. |
- ExtensionPopup::BUBBLE_CHROME); |
- popup_->set_delegate(this); |
+ inspect_with_devtools, |
+ ExtensionPopup::BUBBLE_CHROME, |
+ this); // ExtensionPopup::Observer |
} else { |
ExtensionBrowserEventRouter::GetInstance()->PageActionExecuted( |
profile_, page_action_->extension_id(), page_action_->id(), |
@@ -1547,11 +1545,15 @@ void LocationBarView::PageActionImageView::OnMouseReleased( |
if (!context_menu_.get()) |
context_menu_.reset(new ExtensionActionContextMenu()); |
- context_menu_->Run(extension, point); |
+ context_menu_->Run(extension, |
+ extension->page_action(), |
+ this, // ExtensionActionContextMenuModel::Delegate |
+ profile_->GetPrefs(), |
+ point); |
return; |
} |
- ExecuteAction(button); |
+ ExecuteAction(button, false); // inspect_with_devtools |
} |
void LocationBarView::PageActionImageView::ShowInfoBubble() { |
@@ -1629,56 +1631,22 @@ void LocationBarView::PageActionImageView::UpdateVisibility( |
SetVisible(visible); |
} |
-void LocationBarView::PageActionImageView::BubbleBrowserWindowClosing( |
- BrowserBubble* bubble) { |
- HidePopup(); |
-} |
- |
-void LocationBarView::PageActionImageView::BubbleLostFocus( |
- BrowserBubble* bubble, bool lost_focus_to_child) { |
- // Don't close when we are losing focus to a child window, this is the case |
- // for select popups and alert for example. |
- if (!popup_ || lost_focus_to_child) |
- return; |
- |
- MessageLoop::current()->PostTask(FROM_HERE, |
- method_factory_.NewRunnableMethod( |
- &LocationBarView::PageActionImageView::HidePopup)); |
+void LocationBarView::PageActionImageView::ShowPopupForDevToolsWindow( |
+ Extension* extension, ExtensionAction* extension_action) { |
+ ExecuteAction(1, // left-click |
+ true); // inspect_with_devtools |
} |
-void LocationBarView::PageActionImageView::HidePopup() { |
- if (!popup_) |
- return; |
- |
- // This sometimes gets called via a timer (See BubbleLostFocus), so clear |
- // the method factory. in case one is pending. |
- method_factory_.RevokeAll(); |
- |
- // Save the popup in a local since destroying it calls BubbleLostFocus, |
- // which will try to call HidePopup() again. |
- ExtensionPopup* closing_popup = popup_; |
+void LocationBarView::PageActionImageView::ExtensionPopupClosed( |
+ ExtensionPopup* popup) { |
+ DCHECK_EQ(popup_, popup); |
+ // ExtensionPopup is ref-counted, so we don't need to delete it. |
popup_ = NULL; |
- |
- closing_popup->DetachFromBrowser(); |
- delete closing_popup; |
} |
-void LocationBarView::PageActionImageView::Observe( |
- NotificationType type, |
- const NotificationSource& source, |
- const NotificationDetails& details) { |
- switch (type.value) { |
- case NotificationType::EXTENSION_HOST_VIEW_SHOULD_CLOSE: |
- // If we aren't the host of the popup, then disregard the notification. |
- if (!popup_ || Details<ExtensionHost>(popup_->host()) != details) |
- return; |
- |
- HidePopup(); |
- break; |
- default: |
- NOTREACHED() << "Unexpected notification"; |
- break; |
- } |
+void LocationBarView::PageActionImageView::HidePopup() { |
+ if (popup_) |
+ popup_->Close(); |
} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -1767,7 +1735,8 @@ void LocationBarView::TestPageActionPressed(size_t index) { |
if (page_action_views_[i]->IsVisible()) { |
if (current == index) { |
const int kLeftMouseButton = 1; |
- page_action_views_[i]->image_view()->ExecuteAction(kLeftMouseButton); |
+ page_action_views_[i]->image_view()->ExecuteAction(kLeftMouseButton, |
+ false); // inspect_with_devtools |
return; |
} |
++current; |