Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / extensions / extension_action_view_controller.cc
index 791e5fe..e17e5ce 100644 (file)
@@ -6,18 +6,15 @@
 
 #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"
@@ -48,10 +45,10 @@ ExtensionActionViewController::ExtensionActionViewController(
       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() {
@@ -71,36 +68,13 @@ void ExtensionActionViewController::ExecuteActionByUser() {
 
 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;
 }
 
@@ -115,7 +89,7 @@ gfx::Image ExtensionActionViewController::GetIcon(int tab_id) {
 
 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() {
@@ -226,8 +200,6 @@ void ExtensionActionViewController::DoShowContextMenu(
   // 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));
@@ -247,7 +219,7 @@ void ExtensionActionViewController::DoShowContextMenu(
 
   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) {
@@ -256,7 +228,6 @@ void ExtensionActionViewController::DoShowContextMenu(
 
   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()) {
@@ -267,7 +238,9 @@ void ExtensionActionViewController::DoShowContextMenu(
 }
 
 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;
@@ -292,6 +265,8 @@ bool ExtensionActionViewController::ShowPopupWithUrl(
                popup_url, browser_, reference_view, arrow, show_action);
   popup_->GetWidget()->AddObserver(this);
 
+  delegate_->OnPopupShown(grant_tab_permissions);
+
   return true;
 }