| Index: chrome/browser/ui/gtk/location_bar_view_gtk.cc
|
| diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.cc b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
|
| index ec53c1eafd5cafcd3c3be41c68c13cbc5d894667..36727409d5c8fd35a09c4ff896922a843b9ac746 100644
|
| --- a/chrome/browser/ui/gtk/location_bar_view_gtk.cc
|
| +++ b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
|
| @@ -26,6 +26,7 @@
|
| #include "chrome/browser/defaults.h"
|
| #include "chrome/browser/extensions/api/commands/extension_command_service.h"
|
| #include "chrome/browser/extensions/api/commands/extension_command_service_factory.h"
|
| +#include "chrome/browser/extensions/action_box_controller.h"
|
| #include "chrome/browser/extensions/extension_browser_event_router.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/extensions/extension_tab_util.h"
|
| @@ -82,6 +83,7 @@
|
| using content::NavigationEntry;
|
| using content::OpenURLParams;
|
| using content::WebContents;
|
| +using extensions::ActionBoxController;
|
|
|
| namespace {
|
|
|
| @@ -683,16 +685,12 @@ void LocationBarViewGtk::UpdateContentSettingsIcons() {
|
| }
|
|
|
| void LocationBarViewGtk::UpdatePageActions() {
|
| - std::vector<ExtensionAction*> page_actions;
|
| - ExtensionService* service = browser_->profile()->GetExtensionService();
|
| - if (!service)
|
| - return;
|
| + ActionBoxController::DataList page_actions;
|
|
|
| - // Find all the page actions.
|
| - for (ExtensionSet::const_iterator it = service->extensions()->begin();
|
| - it != service->extensions()->end(); ++it) {
|
| - if ((*it)->page_action())
|
| - page_actions.push_back((*it)->page_action());
|
| + TabContentsWrapper* tab_contents = GetTabContentsWrapper();
|
| + if (tab_contents) {
|
| + page_actions.swap(
|
| + *tab_contents->extension_action_box_controller()->GetAllBadgeData());
|
| }
|
|
|
| // Initialize on the first call, or re-inialize if more extensions have been
|
| @@ -702,7 +700,7 @@ void LocationBarViewGtk::UpdatePageActions() {
|
|
|
| for (size_t i = 0; i < page_actions.size(); ++i) {
|
| page_action_views_.push_back(
|
| - new PageActionViewGtk(this, page_actions[i]));
|
| + new PageActionViewGtk(this, page_actions[i].action));
|
| gtk_box_pack_end(GTK_BOX(page_action_hbox_.get()),
|
| page_action_views_[i]->widget(), FALSE, FALSE, 0);
|
| }
|
| @@ -1681,17 +1679,6 @@ void LocationBarViewGtk::EnabledStateChangedForCommand(int id, bool enabled) {
|
| UpdateChromeToMobileIcon();
|
| }
|
|
|
| -bool LocationBarViewGtk::PageActionViewGtk::ShowPopup() {
|
| - if (!page_action_->HasPopup(current_tab_id_))
|
| - return false;
|
| -
|
| - ExtensionPopupGtk::Show(
|
| - page_action_->GetPopupUrl(current_tab_id_),
|
| - owner_->browser_,
|
| - event_box_.get());
|
| - return true;
|
| -}
|
| -
|
| void LocationBarViewGtk::PageActionViewGtk::ConnectPageActionAccelerator() {
|
| const ExtensionSet* extensions = owner_->browser()->profile()->
|
| GetExtensionService()->extensions();
|
| @@ -1746,25 +1733,41 @@ void LocationBarViewGtk::PageActionViewGtk::DisconnectPageActionAccelerator() {
|
| gboolean LocationBarViewGtk::PageActionViewGtk::OnButtonPressed(
|
| GtkWidget* sender,
|
| GdkEventButton* event) {
|
| - Profile* profile = owner_->browser()->profile();
|
| - if (event->button != 3) {
|
| - if (!ShowPopup()) {
|
| - ExtensionService* service = profile->GetExtensionService();
|
| - service->browser_event_router()->PageActionExecuted(profile,
|
| - page_action_->extension_id(), page_action_->id(), current_tab_id_,
|
| - current_url_.spec(), event->button);
|
| - }
|
| - } else {
|
| - const Extension* extension = profile->GetExtensionService()->
|
| - GetExtensionById(page_action()->extension_id(), false);
|
| + TabContentsWrapper* tab_contents = owner_->GetTabContentsWrapper();
|
| + if (!tab_contents)
|
| + return TRUE;
|
|
|
| - if (extension->ShowConfigureContextMenus()) {
|
| + ExtensionService* extension_service =
|
| + owner_->browser()->profile()->GetExtensionService();
|
| + if (!extension_service)
|
| + return TRUE;
|
| +
|
| + const Extension* extension =
|
| + extension_service->extensions()->GetByID(page_action()->extension_id());
|
| + if (!extension)
|
| + return TRUE;
|
| +
|
| + ActionBoxController* controller =
|
| + tab_contents->extension_action_box_controller();
|
| +
|
| + switch (controller->OnClicked(extension->id(), event->button)) {
|
| + case ActionBoxController::ACTION_NONE:
|
| + break;
|
| +
|
| + case ActionBoxController::ACTION_SHOW_POPUP:
|
| + ExtensionPopupGtk::Show(
|
| + page_action_->GetPopupUrl(current_tab_id_),
|
| + owner_->browser_,
|
| + event_box_.get());
|
| + break;
|
| +
|
| + case ActionBoxController::ACTION_SHOW_CONTEXT_MENU:
|
| context_menu_model_ =
|
| new ExtensionContextMenuModel(extension, owner_->browser_);
|
| context_menu_.reset(
|
| new MenuGtk(NULL, context_menu_model_.get()));
|
| context_menu_->PopupForWidget(sender, event->button, event->time);
|
| - }
|
| + break;
|
| }
|
|
|
| return TRUE;
|
|
|