diff options
author | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-24 01:48:48 +0000 |
---|---|---|
committer | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-24 01:48:48 +0000 |
commit | 78ce30267a216a687f063f4413fbf4364d139c56 (patch) | |
tree | 632d30e1e3d1035cc3eb1637f75a4a34c830ea72 /chrome/browser/ui | |
parent | 135bacd7a10e2644e2686fe384b58320208b631d (diff) | |
download | chromium_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')
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(); |