summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui
diff options
context:
space:
mode:
authorkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-24 01:48:48 +0000
committerkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-24 01:48:48 +0000
commit78ce30267a216a687f063f4413fbf4364d139c56 (patch)
tree632d30e1e3d1035cc3eb1637f75a4a34c830ea72 /chrome/browser/ui
parent135bacd7a10e2644e2686fe384b58320208b631d (diff)
downloadchromium_src-78ce30267a216a687f063f4413fbf4364d139c56.zip
chromium_src-78ce30267a216a687f063f4413fbf4364d139c56.tar.gz
chromium_src-78ce30267a216a687f063f4413fbf4364d139c56.tar.bz2
Make extension commands grant the activeTab permission.
BUG=138203 TEST=Install an extension with commands and the activeTab permission. Activating commands should grant it. See chrome/test/data/extensions/api_test/keybinding/... for examples. Review URL: https://chromiumcodereview.appspot.com/10880064 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158224 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui')
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.h12
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.mm12
-rw-r--r--chrome/browser/ui/cocoa/browser_window_controller.mm3
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h3
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.mm10
-rw-r--r--chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm8
-rw-r--r--chrome/browser/ui/extensions/shell_window.cc7
-rw-r--r--chrome/browser/ui/extensions/shell_window.h8
-rw-r--r--chrome/browser/ui/gtk/browser_window_gtk.cc20
-rw-r--r--chrome/browser/ui/gtk/browser_window_gtk.h18
-rw-r--r--chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.cc12
-rw-r--r--chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.h3
-rw-r--r--chrome/browser/ui/gtk/extensions/shell_window_gtk.cc8
-rw-r--r--chrome/browser/ui/views/browser_actions_container.cc21
-rw-r--r--chrome/browser/ui/views/browser_actions_container.h20
-rw-r--r--chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc11
-rw-r--r--chrome/browser/ui/views/extensions/extension_keybinding_registry_views.h3
-rw-r--r--chrome/browser/ui/views/extensions/shell_window_views.cc3
18 files changed, 131 insertions, 51 deletions
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.h b/chrome/browser/ui/cocoa/browser_window_cocoa.h
index 8e76798..39a40ed 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.h
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.h
@@ -9,6 +9,7 @@
#include "base/memory/weak_ptr.h"
#include "chrome/browser/api/prefs/pref_change_registrar.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/extensions/extension_keybinding_registry.h"
#include "chrome/browser/ui/browser_window.h"
#include "content/public/browser/notification_registrar.h"
#include "ui/base/ui_base_types.h"
@@ -21,6 +22,7 @@ class Browser;
@class NSWindow;
namespace extensions {
+class ActiveTabPermissionGranter;
class Extension;
}
@@ -28,8 +30,10 @@ class Extension;
// the Cocoa NSWindow. Cross-platform code will interact with this object when
// it needs to manipulate the window.
-class BrowserWindowCocoa : public BrowserWindow,
- public content::NotificationObserver {
+class BrowserWindowCocoa :
+ public BrowserWindow,
+ public content::NotificationObserver,
+ public extensions::ExtensionKeybindingRegistry::Delegate {
public:
BrowserWindowCocoa(Browser* browser,
BrowserWindowController* controller);
@@ -150,6 +154,10 @@ class BrowserWindowCocoa : public BrowserWindow,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // Overridden from ExtensionKeybindingRegistry::Delegate:
+ virtual extensions::ActiveTabPermissionGranter*
+ GetActiveTabPermissionGranter() OVERRIDE;
+
// Adds the given FindBar cocoa controller to this browser window.
void AddFindBar(FindBarCocoaController* find_bar_cocoa_controller);
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.mm b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
index 6032b4f..3ef5806 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
@@ -13,6 +13,7 @@
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/bookmarks/bookmark_utils.h"
#include "chrome/browser/download/download_shelf.h"
+#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
@@ -619,6 +620,17 @@ void BrowserWindowCocoa::Observe(int type,
}
}
+extensions::ActiveTabPermissionGranter*
+ BrowserWindowCocoa::GetActiveTabPermissionGranter() {
+ TabContents* tab_contents =
+ browser_->tab_strip_model()->GetActiveTabContents();
+ if (!tab_contents)
+ return NULL;
+ extensions::TabHelper* tab_helper =
+ extensions::TabHelper::FromWebContents(tab_contents->web_contents());
+ return tab_helper ? tab_helper->active_tab_permission_granter() : NULL;
+}
+
void BrowserWindowCocoa::DestroyBrowser() {
[controller_ destroyBrowser];
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm
index 6234c61..be724fd 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
@@ -417,7 +417,8 @@ enum {
extension_keybinding_registry_.reset(
new ExtensionKeybindingRegistryCocoa(browser_->profile(),
[self window],
- extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS));
+ extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS,
+ windowShim_.get()));
// We are done initializing now.
initializing_ = NO;
diff --git a/chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h b/chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h
index d87b559e..41f98df 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h
+++ b/chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h
@@ -35,7 +35,8 @@ class ExtensionKeybindingRegistryCocoa
public:
ExtensionKeybindingRegistryCocoa(Profile* profile,
gfx::NativeWindow window,
- ExtensionFilter extension_filter);
+ ExtensionFilter extension_filter,
+ Delegate* delegate);
virtual ~ExtensionKeybindingRegistryCocoa();
static void set_shortcut_handling_suspended(bool suspended) {
diff --git a/chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.mm b/chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.mm
index b696421..ed1cbdd 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.mm
@@ -6,7 +6,6 @@
#include "chrome/browser/extensions/api/commands/command_service.h"
#include "chrome/browser/extensions/api/commands/command_service_factory.h"
-#include "chrome/browser/extensions/browser_event_router.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/extension.h"
@@ -28,8 +27,9 @@ bool ExtensionKeybindingRegistryCocoa::shortcut_handling_suspended_ = false;
ExtensionKeybindingRegistryCocoa::ExtensionKeybindingRegistryCocoa(
Profile* profile,
gfx::NativeWindow window,
- ExtensionFilter extension_filter)
- : ExtensionKeybindingRegistry(profile, extension_filter),
+ ExtensionFilter extension_filter,
+ Delegate* delegate)
+ : ExtensionKeybindingRegistry(profile, extension_filter, delegate),
profile_(profile),
window_(window) {
Init();
@@ -62,9 +62,7 @@ bool ExtensionKeybindingRegistryCocoa::ProcessKeyEvent(
} else {
// Not handled by using notifications. Route it through the Browser Event
// Router.
- ExtensionService* service = profile_->GetExtensionService();
- service->browser_event_router()->CommandExecuted(
- profile_, extension_id, command_name);
+ CommandExecuted(extension_id, command_name);
return true;
}
diff --git a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm
index a518063..c0e9ea1 100644
--- a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm
@@ -224,9 +224,11 @@ ShellWindowCocoa::ShellWindowCocoa(ShellWindow* shell_window,
[[window_controller_ window] setDelegate:window_controller_];
[window_controller_ setShellWindow:this];
- extension_keybinding_registry_.reset(
- new ExtensionKeybindingRegistryCocoa(shell_window_->profile(), window,
- extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY));
+ extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryCocoa(
+ shell_window_->profile(),
+ window,
+ extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY,
+ shell_window));
}
void ShellWindowCocoa::InstallView() {
diff --git a/chrome/browser/ui/extensions/shell_window.cc b/chrome/browser/ui/extensions/shell_window.cc
index 5ba6c0a..f355209 100644
--- a/chrome/browser/ui/extensions/shell_window.cc
+++ b/chrome/browser/ui/extensions/shell_window.cc
@@ -9,6 +9,7 @@
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/shell_window_geometry_cache.h"
#include "chrome/browser/extensions/shell_window_registry.h"
+#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/file_select_helper.h"
#include "chrome/browser/infobars/infobar_tab_helper.h"
#include "chrome/browser/intents/web_intents_util.h"
@@ -430,6 +431,12 @@ ShellWindow::GetExtensionWindowController() const {
return NULL;
}
+extensions::ActiveTabPermissionGranter*
+ ShellWindow::GetActiveTabPermissionGranter() {
+ // Shell windows don't support the activeTab permission.
+ return NULL;
+}
+
void ShellWindow::OnRequest(const ExtensionHostMsg_Request_Params& params) {
extension_function_dispatcher_.Dispatch(params,
web_contents_->GetRenderViewHost());
diff --git a/chrome/browser/ui/extensions/shell_window.h b/chrome/browser/ui/extensions/shell_window.h
index 921cf63..d02b136 100644
--- a/chrome/browser/ui/extensions/shell_window.h
+++ b/chrome/browser/ui/extensions/shell_window.h
@@ -7,6 +7,7 @@
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/extensions/extension_function_dispatcher.h"
+#include "chrome/browser/extensions/extension_keybinding_registry.h"
#include "chrome/browser/extensions/image_loading_tracker.h"
#include "chrome/browser/sessions/session_id.h"
#include "chrome/browser/ui/base_window.h"
@@ -41,7 +42,8 @@ class ShellWindow : public content::NotificationObserver,
public content::WebContentsDelegate,
public content::WebContentsObserver,
public ExtensionFunctionDispatcher::Delegate,
- public ImageLoadingTracker::Observer {
+ public ImageLoadingTracker::Observer,
+ public extensions::ExtensionKeybindingRegistry::Delegate {
public:
struct CreateParams {
enum Frame {
@@ -173,6 +175,10 @@ class ShellWindow : public content::NotificationObserver,
const std::string& extension_id,
int index) OVERRIDE;
+ // extensions::ExtensionKeybindingRegistry::Delegate implementation.
+ virtual extensions::ActiveTabPermissionGranter*
+ GetActiveTabPermissionGranter() OVERRIDE;
+
Profile* profile_; // weak pointer - owned by ProfileManager.
// weak pointer - owned by ExtensionService.
const extensions::Extension* extension_;
diff --git a/chrome/browser/ui/gtk/browser_window_gtk.cc b/chrome/browser/ui/gtk/browser_window_gtk.cc
index 73ba57a..caef012 100644
--- a/chrome/browser/ui/gtk/browser_window_gtk.cc
+++ b/chrome/browser/ui/gtk/browser_window_gtk.cc
@@ -29,6 +29,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/download_item_model.h"
+#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/browser/profiles/profile.h"
@@ -1309,6 +1310,15 @@ bool BrowserWindowGtk::DrawInfoBarArrows(int* x) const {
return true;
}
+extensions::ActiveTabPermissionGranter*
+ BrowserWindowGtk::GetActiveTabPermissionGranter() {
+ TabContents* tab = GetDisplayedTab();
+ if (!tab)
+ return NULL;
+ return extensions::TabHelper::FromWebContents(tab->web_contents())->
+ active_tab_permission_granter();
+}
+
void BrowserWindowGtk::MaybeShowBookmarkBar(bool animate) {
TRACE_EVENT0("ui::gtk", "BrowserWindowGtk::MaybeShowBookmarkBar");
if (!IsBookmarkBarSupported())
@@ -1532,7 +1542,7 @@ gboolean BrowserWindowGtk::OnMainWindowDeleteEvent(GtkWidget* widget,
void BrowserWindowGtk::OnMainWindowDestroy(GtkWidget* widget) {
// Make sure we destroy this object while the main window is still valid.
- extension_keybinding_registry_.reset(NULL);
+ extension_keybinding_registry_.reset();
// BUG 8712. When we gtk_widget_destroy() in Close(), this will emit the
// signal right away, and we will be here (while Close() is still in the
@@ -1825,9 +1835,11 @@ void BrowserWindowGtk::InitWidgets() {
UpdateCustomFrame();
// Add the keybinding registry, now that the window has been realized.
- extension_keybinding_registry_.reset(
- new ExtensionKeybindingRegistryGtk(browser_->profile(), window_,
- extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS));
+ extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryGtk(
+ browser_->profile(),
+ window_,
+ extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS,
+ this));
// We have to call this after the first window is created, but after that only
// when the theme changes. This sets the icon that will be used for windows
diff --git a/chrome/browser/ui/gtk/browser_window_gtk.h b/chrome/browser/ui/gtk/browser_window_gtk.h
index f92b17b..b7918fe 100644
--- a/chrome/browser/ui/gtk/browser_window_gtk.h
+++ b/chrome/browser/ui/gtk/browser_window_gtk.h
@@ -15,6 +15,7 @@
#include "base/timer.h"
#include "build/build_config.h"
#include "chrome/browser/api/prefs/pref_member.h"
+#include "chrome/browser/extensions/extension_keybinding_registry.h"
#include "chrome/browser/infobars/infobar_container.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
@@ -45,6 +46,7 @@ class PasswordGenerator;
}
namespace extensions {
+class ActiveTabPermissionGranter;
class Extension;
}
@@ -52,11 +54,13 @@ class Extension;
// Cross-platform code will interact with this object when
// it needs to manipulate the window.
-class BrowserWindowGtk : public BrowserWindow,
- public content::NotificationObserver,
- public TabStripModelObserver,
- public ui::ActiveWindowWatcherXObserver,
- public InfoBarContainer::Delegate {
+class BrowserWindowGtk
+ : public BrowserWindow,
+ public content::NotificationObserver,
+ public TabStripModelObserver,
+ public ui::ActiveWindowWatcherXObserver,
+ public InfoBarContainer::Delegate,
+ public extensions::ExtensionKeybindingRegistry::Delegate {
public:
explicit BrowserWindowGtk(Browser* browser);
virtual ~BrowserWindowGtk();
@@ -193,6 +197,10 @@ class BrowserWindowGtk : public BrowserWindow,
virtual void InfoBarContainerStateChanged(bool is_animating) OVERRIDE;
virtual bool DrawInfoBarArrows(int* x) const OVERRIDE;
+ // Overridden from ExtensionKeybindingRegistry::Delegate:
+ virtual extensions::ActiveTabPermissionGranter*
+ GetActiveTabPermissionGranter() OVERRIDE;
+
// Accessor for the tab strip.
TabStripGtk* tabstrip() const { return tabstrip_.get(); }
diff --git a/chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.cc b/chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.cc
index 1364830..126b647 100644
--- a/chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.cc
+++ b/chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.cc
@@ -6,7 +6,6 @@
#include "chrome/browser/extensions/api/commands/command_service.h"
#include "chrome/browser/extensions/api/commands/command_service_factory.h"
-#include "chrome/browser/extensions/browser_event_router.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/extension.h"
@@ -23,8 +22,9 @@ bool ExtensionKeybindingRegistryGtk::shortcut_handling_suspended_ = false;
ExtensionKeybindingRegistryGtk::ExtensionKeybindingRegistryGtk(
Profile* profile,
gfx::NativeWindow window,
- ExtensionFilter extension_filter)
- : ExtensionKeybindingRegistry(profile, extension_filter),
+ ExtensionFilter extension_filter,
+ Delegate* delegate)
+ : ExtensionKeybindingRegistry(profile, extension_filter, delegate),
profile_(profile),
window_(window),
accel_group_(NULL) {
@@ -170,16 +170,12 @@ gboolean ExtensionKeybindingRegistryGtk::OnGtkAccelerator(
GdkModifierType modifier) {
ui::AcceleratorGtk accelerator(keyval, modifier);
- ExtensionService* service = profile_->GetExtensionService();
-
EventTargets::iterator it = event_targets_.find(accelerator);
if (it == event_targets_.end()) {
NOTREACHED(); // Shouldn't get this event for something not registered.
return FALSE;
}
- service->browser_event_router()->CommandExecuted(
- profile_, it->second.first, it->second.second);
-
+ CommandExecuted(it->second.first, it->second.second);
return TRUE;
}
diff --git a/chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.h b/chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.h
index d130f6a..9df7f48 100644
--- a/chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.h
+++ b/chrome/browser/ui/gtk/extensions/extension_keybinding_registry_gtk.h
@@ -37,7 +37,8 @@ class ExtensionKeybindingRegistryGtk
public:
ExtensionKeybindingRegistryGtk(Profile* profile,
gfx::NativeWindow window,
- ExtensionFilter extension_filter);
+ ExtensionFilter extension_filter,
+ Delegate* delegate);
virtual ~ExtensionKeybindingRegistryGtk();
static void set_shortcut_handling_suspended(bool suspended) {
diff --git a/chrome/browser/ui/gtk/extensions/shell_window_gtk.cc b/chrome/browser/ui/gtk/extensions/shell_window_gtk.cc
index 6a11933..b518675 100644
--- a/chrome/browser/ui/gtk/extensions/shell_window_gtk.cc
+++ b/chrome/browser/ui/gtk/extensions/shell_window_gtk.cc
@@ -114,9 +114,11 @@ ShellWindowGtk::ShellWindowGtk(ShellWindow* shell_window,
}
// Add the keybinding registry.
- extension_keybinding_registry_.reset(
- new ExtensionKeybindingRegistryGtk(shell_window_->profile(), window_,
- extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY));
+ extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryGtk(
+ shell_window_->profile(),
+ window_,
+ extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY,
+ shell_window_));
ui::ActiveWindowWatcherX::AddObserver(this);
}
diff --git a/chrome/browser/ui/views/browser_actions_container.cc b/chrome/browser/ui/views/browser_actions_container.cc
index 70d6737e..9bbf14f 100644
--- a/chrome/browser/ui/views/browser_actions_container.cc
+++ b/chrome/browser/ui/views/browser_actions_container.cc
@@ -4,8 +4,10 @@
#include "chrome/browser/ui/views/browser_actions_container.h"
+#include "base/compiler_specific.h"
#include "base/stl_util.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/session_tab_helper.h"
@@ -15,6 +17,7 @@
#include "chrome/browser/ui/view_ids.h"
#include "chrome/browser/ui/views/browser_action_view.h"
#include "chrome/browser/ui/views/extensions/browser_action_drag_data.h"
+#include "chrome/browser/ui/views/extensions/extension_keybinding_registry_views.h"
#include "chrome/browser/ui/views/extensions/extension_popup.h"
#include "chrome/browser/ui/views/toolbar_view.h"
#include "chrome/common/pref_names.h"
@@ -68,9 +71,6 @@ BrowserActionsContainer::BrowserActionsContainer(Browser* browser,
container_width_(0),
chevron_(NULL),
overflow_menu_(NULL),
- extension_keybinding_registry_(browser->profile(),
- owner_view->GetFocusManager(),
- extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS),
suppress_chevron_(false),
resize_amount_(0),
animation_target_size_(0),
@@ -84,6 +84,12 @@ BrowserActionsContainer::BrowserActionsContainer(Browser* browser,
model_->AddObserver(this);
}
+ extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryViews(
+ browser->profile(),
+ owner_view->GetFocusManager(),
+ extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS,
+ this)),
+
resize_animation_.reset(new ui::SlideAnimation(this));
resize_area_ = new views::ResizeArea(this);
AddChildView(resize_area_);
@@ -484,6 +490,15 @@ gfx::Point BrowserActionsContainer::GetViewContentOffset() const {
return gfx::Point(0, ToolbarView::kVertSpacing);
}
+extensions::ActiveTabPermissionGranter*
+ BrowserActionsContainer::GetActiveTabPermissionGranter() {
+ content::WebContents* web_contents = chrome::GetActiveWebContents(browser_);
+ if (!web_contents)
+ return NULL;
+ return extensions::TabHelper::FromWebContents(web_contents)->
+ active_tab_permission_granter();
+}
+
void BrowserActionsContainer::MoveBrowserAction(const std::string& extension_id,
size_t new_index) {
ExtensionService* service = profile_->GetExtensionService();
diff --git a/chrome/browser/ui/views/browser_actions_container.h b/chrome/browser/ui/views/browser_actions_container.h
index 676a509..c6c4b80 100644
--- a/chrome/browser/ui/views/browser_actions_container.h
+++ b/chrome/browser/ui/views/browser_actions_container.h
@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_UI_VIEWS_BROWSER_ACTIONS_CONTAINER_H_
#define CHROME_BROWSER_UI_VIEWS_BROWSER_ACTIONS_CONTAINER_H_
+#include "chrome/browser/extensions/extension_keybinding_registry.h"
#include "chrome/browser/extensions/extension_toolbar_model.h"
#include "chrome/browser/ui/views/browser_action_view.h"
#include "chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.h"
@@ -21,6 +22,12 @@
#include "ui/views/widget/widget_observer.h"
class BrowserActionButton;
+class ExtensionKeybindingRegistryViews;
+class ExtensionPopup;
+
+namespace extensions {
+class ActiveTabPermissionGranter;
+}
namespace ui {
class SlideAnimation;
@@ -110,7 +117,8 @@ class BrowserActionsContainer
public ExtensionToolbarModel::Observer,
public BrowserActionOverflowMenuController::Observer,
public views::WidgetObserver,
- public BrowserActionView::Delegate {
+ public BrowserActionView::Delegate,
+ public extensions::ExtensionKeybindingRegistry::Delegate {
public:
BrowserActionsContainer(Browser* browser, views::View* owner_view);
virtual ~BrowserActionsContainer();
@@ -198,6 +206,10 @@ class BrowserActionsContainer
virtual void OnBrowserActionVisibilityChanged() OVERRIDE;
virtual gfx::Point GetViewContentOffset() const OVERRIDE;
+ // Overridden from extension::ExtensionKeybindingRegistry::Delegate:
+ virtual extensions::ActiveTabPermissionGranter*
+ GetActiveTabPermissionGranter() OVERRIDE;
+
// Moves a browser action with |id| to |new_index|.
void MoveBrowserAction(const std::string& extension_id, size_t new_index);
@@ -337,9 +349,6 @@ class BrowserActionsContainer
// own lifetime so that it can stay alive during drag and drop operations.
BrowserActionOverflowMenuController* overflow_menu_;
- // The class that registers for keyboard shortcuts for extension commands.
- ExtensionKeybindingRegistryViews extension_keybinding_registry_;
-
// The animation that happens when the container snaps to place.
scoped_ptr<ui::SlideAnimation> resize_animation_;
@@ -358,6 +367,9 @@ class BrowserActionsContainer
// The x position for where to draw the drop indicator. -1 if no indicator.
int drop_indicator_position_;
+ // The class that registers for keyboard shortcuts for extension commands.
+ scoped_ptr<ExtensionKeybindingRegistryViews> extension_keybinding_registry_;
+
base::WeakPtrFactory<BrowserActionsContainer> task_factory_;
// Handles delayed showing of the overflow menu when hovering.
diff --git a/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc b/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc
index f72c0e9..a163cc3 100644
--- a/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc
+++ b/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc
@@ -6,7 +6,6 @@
#include "chrome/browser/extensions/api/commands/command_service.h"
#include "chrome/browser/extensions/api/commands/command_service_factory.h"
-#include "chrome/browser/extensions/browser_event_router.h"
#include "chrome/browser/extensions/extension_keybinding_registry.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -22,8 +21,9 @@ void extensions::ExtensionKeybindingRegistry::SetShortcutHandlingSuspended(
ExtensionKeybindingRegistryViews::ExtensionKeybindingRegistryViews(
Profile* profile,
views::FocusManager* focus_manager,
- ExtensionFilter extension_filter)
- : ExtensionKeybindingRegistry(profile, extension_filter),
+ ExtensionFilter extension_filter,
+ Delegate* delegate)
+ : ExtensionKeybindingRegistry(profile, extension_filter, delegate),
profile_(profile),
focus_manager_(focus_manager) {
Init();
@@ -87,16 +87,13 @@ void ExtensionKeybindingRegistryViews::RemoveExtensionKeybinding(
bool ExtensionKeybindingRegistryViews::AcceleratorPressed(
const ui::Accelerator& accelerator) {
- ExtensionService* service = profile_->GetExtensionService();
-
EventTargets::iterator it = event_targets_.find(accelerator);
if (it == event_targets_.end()) {
NOTREACHED(); // Shouldn't get this event for something not registered.
return false;
}
- service->browser_event_router()->CommandExecuted(
- profile_, it->second.first, it->second.second);
+ CommandExecuted(it->second.first, it->second.second);
return true;
}
diff --git a/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.h b/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.h
index 9a2f48a..3615a61 100644
--- a/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.h
+++ b/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.h
@@ -34,7 +34,8 @@ class ExtensionKeybindingRegistryViews
public:
ExtensionKeybindingRegistryViews(Profile* profile,
views::FocusManager* focus_manager,
- ExtensionFilter extension_filter);
+ ExtensionFilter extension_filter,
+ Delegate* delegate);
virtual ~ExtensionKeybindingRegistryViews();
// Overridden from ui::AcceleratorTarget.
diff --git a/chrome/browser/ui/views/extensions/shell_window_views.cc b/chrome/browser/ui/views/extensions/shell_window_views.cc
index 63c30a5..84e855c 100644
--- a/chrome/browser/ui/views/extensions/shell_window_views.cc
+++ b/chrome/browser/ui/views/extensions/shell_window_views.cc
@@ -345,7 +345,8 @@ ShellWindowViews::ShellWindowViews(ShellWindow* shell_window,
extension_keybinding_registry_.reset(
new ExtensionKeybindingRegistryViews(shell_window_->profile(),
window_->GetFocusManager(),
- extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY));
+ extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY,
+ shell_window_));
OnViewWasResized();