#include "base/strings/sys_string_conversions.h"
#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_tab_util.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/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#import "chrome/browser/ui/cocoa/extensions/extension_action_context_menu_controller.h"
#include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h"
#import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
#include "chrome/browser/ui/webui/extensions/extension_info_ui.h"
-#include "content/public/browser/notification_service.h"
+#include "components/sessions/session_id.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_source.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/common/manifest_handlers/icons_handler.h"
using content::WebContents;
using extensions::Extension;
-using extensions::LocationBarController;
namespace {
// Either notify listeners or show a popup depending on the Page
// Action.
bool PageActionDecoration::OnMousePressed(NSRect frame, NSPoint location) {
- return ActivatePageAction(frame);
+ ActivatePageAction(frame, true);
+ // We don't want other code to try and handle this click. Returning true
+ // prevents this by indicating that we handled it.
+ return true;
}
-void PageActionDecoration::ActivatePageAction() {
- ActivatePageAction(owner_->GetPageActionFrame(page_action_));
+bool PageActionDecoration::ActivatePageAction(bool grant_active_tab) {
+ return ActivatePageAction(
+ owner_->GetPageActionFrame(page_action_), grant_active_tab);
}
-bool PageActionDecoration::ActivatePageAction(NSRect frame) {
+bool PageActionDecoration::ActivatePageAction(
+ NSRect frame, bool grant_active_tab) {
WebContents* web_contents = owner_->GetWebContents();
- if (!web_contents) {
- // We don't want other code to try and handle this click. Returning true
- // prevents this by indicating that we handled it.
- return true;
- }
+ if (!web_contents)
+ return false;
- LocationBarController* controller =
- extensions::TabHelper::FromWebContents(web_contents)->
- location_bar_controller();
-
- switch (controller->OnClicked(page_action_)) {
+ switch (extensions::ExtensionActionAPI::Get(browser_->profile())->
+ ExecuteExtensionAction(
+ GetExtension(), browser_, grant_active_tab)) {
case ExtensionAction::ACTION_NONE:
break;
}
}
- if (IsVisible() != visible) {
+ if (IsVisible() != visible)
SetVisible(visible);
- content::NotificationService::current()->Notify(
- extensions::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED,
- content::Source<ExtensionAction>(page_action_),
- content::Details<WebContents>(contents));
- }
}
void PageActionDecoration::SetToolTip(NSString* tooltip) {
}
NSMenu* PageActionDecoration::GetMenu() {
- const Extension* extension = extensions::ExtensionRegistry::Get(
- browser_->profile())->enabled_extensions().GetByID(
- page_action_->extension_id());
- DCHECK(extension);
+ const Extension* extension = GetExtension();
if (!extension->ShowConfigureContextMenus())
return nil;
devMode:NO];
}
+const Extension* PageActionDecoration::GetExtension() {
+ const Extension* extension = extensions::ExtensionRegistry::Get(
+ browser_->profile())->enabled_extensions().GetByID(
+ page_action_->extension_id());
+ DCHECK(extension);
+ return extension;
+}
+
void PageActionDecoration::Observe(
int type,
const content::NotificationSource& source,
if (extension_id != page_action_->extension_id())
break;
if (IsVisible())
- ActivatePageAction();
+ ActivatePageAction(true);
break;
}