#include "base/logging.h"
#include "chrome/browser/extensions/api/commands/command_service.h"
+#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/extension_action.h"
-#include "chrome/browser/extensions/extension_toolbar_model.h"
-#include "chrome/browser/extensions/location_bar_controller.h"
-#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sessions/session_id.h"
+#include "chrome/browser/sessions/session_tab_helper.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/extensions/accelerator_priority.h"
#include "chrome/browser/ui/views/extensions/extension_action_view_delegate.h"
#include "chrome/common/extensions/api/extension_action/action_info.h"
#include "extensions/common/extension.h"
-#include "extensions/common/manifest_constants.h"
#include "ui/views/controls/menu/menu_controller.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/view.h"
icon_factory_(browser->profile(), extension, extension_action, this),
popup_(NULL),
weak_factory_(this) {
+ DCHECK(extension_action);
DCHECK(extension_action->action_type() == ActionInfo::TYPE_PAGE ||
extension_action->action_type() == ActionInfo::TYPE_BROWSER);
DCHECK(extension);
-
}
ExtensionActionViewController::~ExtensionActionViewController() {
bool ExtensionActionViewController::ExecuteAction(
ExtensionPopup::ShowAction show_action, bool grant_tab_permissions) {
- GURL popup_url;
- bool show_popup = false;
- if (extension_action_->action_type() == ActionInfo::TYPE_BROWSER) {
- extensions::ExtensionToolbarModel* toolbar_model =
- extensions::ExtensionToolbarModel::Get(browser_->profile());
- show_popup = toolbar_model->ExecuteBrowserAction(
- extension_, browser_, &popup_url, grant_tab_permissions) ==
- ExtensionAction::ACTION_SHOW_POPUP;
- } else { // PageAction
- content::WebContents* web_contents = delegate_->GetCurrentWebContents();
- if (!web_contents)
- return false;
- extensions::LocationBarController* controller =
- extensions::TabHelper::FromWebContents(web_contents)->
- location_bar_controller();
- switch (controller->OnClicked(extension_action_)) {
- case ExtensionAction::ACTION_NONE:
- break;
- case ExtensionAction::ACTION_SHOW_POPUP:
- popup_url = extension_action_->GetPopupUrl(GetCurrentTabId());
- show_popup = true;
- break;
- }
- }
-
- if (show_popup && ShowPopupWithUrl(show_action, popup_url)) {
- delegate_->OnPopupShown(grant_tab_permissions);
- return true;
+ if (extensions::ExtensionActionAPI::Get(browser_->profile())->
+ ExecuteExtensionAction(extension_, browser_, grant_tab_permissions) ==
+ ExtensionAction::ACTION_SHOW_POPUP) {
+ GURL popup_url = extension_action_->GetPopupUrl(GetCurrentTabId());
+ return delegate_->GetPreferredPopupViewController()->ShowPopupWithUrl(
+ show_action, popup_url, grant_tab_permissions);
}
-
return false;
}
int ExtensionActionViewController::GetCurrentTabId() const {
content::WebContents* web_contents = delegate_->GetCurrentWebContents();
- return web_contents ? SessionID::IdForTab(web_contents) : -1;
+ return web_contents ? SessionTabHelper::IdForTab(web_contents) : -1;
}
void ExtensionActionViewController::RegisterCommand() {
// We shouldn't have both a popup and a context menu showing.
delegate_->HideActivePopup();
- delegate_->OnWillShowContextMenus();
-
// Reconstructs the menu every time because the menu's contents are dynamic.
scoped_refptr<ExtensionContextMenuModel> context_menu_model(
new ExtensionContextMenuModel(extension_, browser_, this));
if (menu_runner_->RunMenuAt(
parent,
- NULL,
+ delegate_->GetContextMenuButton(),
gfx::Rect(screen_loc, delegate_->GetAsView()->size()),
views::MENU_ANCHOR_TOPLEFT,
source_type) == views::MenuRunner::MENU_DELETED) {
context_menu_owner = NULL;
menu_runner_.reset();
- delegate_->OnContextMenuDone();
// If another extension action wants to show its context menu, allow it to.
if (!followup_context_menu_task_.is_null()) {
}
bool ExtensionActionViewController::ShowPopupWithUrl(
- ExtensionPopup::ShowAction show_action, const GURL& popup_url) {
+ ExtensionPopup::ShowAction show_action,
+ const GURL& popup_url,
+ bool grant_tab_permissions) {
// If we're already showing the popup for this browser action, just hide it
// and return.
bool already_showing = popup_ != NULL;
popup_url, browser_, reference_view, arrow, show_action);
popup_->GetWidget()->AddObserver(this);
+ delegate_->OnPopupShown(grant_tab_permissions);
+
return true;
}