Chromium Code Reviews| Index: chrome/browser/ui/views/toolbar/chevron_menu_button.cc |
| diff --git a/chrome/browser/ui/views/toolbar/chevron_menu_button.cc b/chrome/browser/ui/views/toolbar/chevron_menu_button.cc |
| index 207bcf6b7a24f9a70391bba6ee8d8203265e45de..5e7db13f264029b7bdeefcae814deb28e5cd7122 100644 |
| --- a/chrome/browser/ui/views/toolbar/chevron_menu_button.cc |
| +++ b/chrome/browser/ui/views/toolbar/chevron_menu_button.cc |
| @@ -8,11 +8,13 @@ |
| #include "base/message_loop/message_loop.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "chrome/browser/extensions/extension_action.h" |
| +#include "chrome/browser/extensions/extension_action_icon_factory.h" |
| #include "chrome/browser/extensions/extension_context_menu_model.h" |
| #include "chrome/browser/extensions/extension_toolbar_model.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/views/extensions/browser_action_drag_data.h" |
| +#include "chrome/browser/ui/views/extensions/extension_action_view_controller.h" |
| #include "chrome/browser/ui/views/toolbar/browser_action_view.h" |
| #include "chrome/browser/ui/views/toolbar/browser_actions_container.h" |
| #include "extensions/browser/extension_registry.h" |
| @@ -33,31 +35,32 @@ namespace { |
| // is read from file system in another thread. |
| // The IconUpdater will update the menu item view's icon when the browser |
| // action's icon has been updated. |
| -class IconUpdater : public BrowserActionView::IconObserver { |
| +class IconUpdater : public ExtensionActionIconFactory::Observer { |
| public: |
| - IconUpdater(views::MenuItemView* menu_item_view, BrowserActionView* view) |
| + IconUpdater(views::MenuItemView* menu_item_view, |
| + ExtensionActionViewController* view_controller) |
| : menu_item_view_(menu_item_view), |
| - view_(view) { |
| + view_controller_(view_controller) { |
| DCHECK(menu_item_view); |
| - DCHECK(view); |
| - view->set_icon_observer(this); |
| + DCHECK(view_controller); |
| + view_controller->set_icon_observer(this); |
| } |
| virtual ~IconUpdater() { |
| - view_->set_icon_observer(NULL); |
| + view_controller_->set_icon_observer(NULL); |
| } |
| // BrowserActionView::IconObserver: |
| - virtual void OnIconUpdated(const gfx::ImageSkia& icon) override { |
| - menu_item_view_->SetIcon(icon); |
| + virtual void OnIconUpdated() override { |
| + menu_item_view_->SetIcon(view_controller_->GetIconWithBadge()); |
| } |
| private: |
| // The menu item view whose icon might be updated. |
| views::MenuItemView* menu_item_view_; |
| - // The view to be observed. When its icon changes, update the corresponding |
| - // menu item view's icon. |
| - BrowserActionView* view_; |
| + // The view controller to be observed. When its icon changes, update the |
| + // corresponding menu item view's icon. |
| + ExtensionActionViewController* view_controller_; |
| DISALLOW_COPY_AND_ASSIGN(IconUpdater); |
| }; |
| @@ -159,18 +162,20 @@ ChevronMenuButton::MenuController::MenuController( |
| i < browser_actions_container_->num_browser_actions(); ++i) { |
| BrowserActionView* view = |
| browser_actions_container_->GetBrowserActionViewAt(i); |
| + ExtensionActionViewController* view_controller = |
| + view->GetExtensionActionViewController(); |
| views::MenuItemView* menu_item = menu_->AppendMenuItemWithIcon( |
| command_id, |
| - base::UTF8ToUTF16(view->extension()->name()), |
| - view->GetIconWithBadge()); |
| + base::UTF8ToUTF16(view_controller->extension()->name()), |
| + view_controller->GetIconWithBadge()); |
| // Set the tooltip for this item. |
| - base::string16 tooltip = base::UTF8ToUTF16( |
| - view->extension_action()->GetTitle( |
| - view->view_controller()->GetCurrentTabId())); |
| - menu_->SetTooltip(tooltip, command_id); |
| + menu_->SetTooltip( |
| + view_controller->GetTooltip(view->GetCurrentWebContents()), |
| + command_id); |
| - icon_updaters_.push_back(new IconUpdater(menu_item, view)); |
| + icon_updaters_.push_back( |
| + new IconUpdater(menu_item, view->GetExtensionActionViewController())); |
|
Finnur
2014/10/17 09:57:02
nit: s/view->GetExtensionActionViewController()/vi
Devlin
2014/10/17 16:33:33
Done.
|
| ++command_id; |
| } |
| @@ -211,7 +216,7 @@ void ChevronMenuButton::MenuController::CloseMenu() { |
| bool ChevronMenuButton::MenuController::IsCommandEnabled(int id) const { |
| BrowserActionView* view = |
| browser_actions_container_->GetBrowserActionViewAt(start_index_ + id - 1); |
| - return view->IsEnabled(view->view_controller()->GetCurrentTabId()); |
| + return view->view_controller()->IsEnabled(view->GetCurrentWebContents()); |
| } |
| void ChevronMenuButton::MenuController::ExecuteCommand(int id) { |
| @@ -226,13 +231,15 @@ bool ChevronMenuButton::MenuController::ShowContextMenu( |
| ui::MenuSourceType source_type) { |
| BrowserActionView* view = browser_actions_container_->GetBrowserActionViewAt( |
| start_index_ + id - 1); |
| - if (!view->extension()->ShowConfigureContextMenus()) |
| + ExtensionActionViewController* view_controller = |
| + view->GetExtensionActionViewController(); |
| + if (!view_controller->extension()->ShowConfigureContextMenus()) |
| return false; |
| scoped_refptr<ExtensionContextMenuModel> context_menu_contents = |
| - new ExtensionContextMenuModel(view->extension(), |
| - view->view_controller()->browser(), |
| - view->view_controller()); |
| + new ExtensionContextMenuModel(view_controller->extension(), |
| + view->browser(), |
| + view_controller); |
| views::MenuRunner context_menu_runner(context_menu_contents.get(), |
| views::MenuRunner::HAS_MNEMONICS | |
| views::MenuRunner::IS_NESTED | |
| @@ -341,8 +348,7 @@ void ChevronMenuButton::MenuController::WriteDragData( |
| views::MenuItemView* sender, OSExchangeData* data) { |
| size_t drag_index = IndexForId(sender->GetCommand()); |
| const extensions::Extension* extension = |
| - browser_actions_container_->GetBrowserActionViewAt(drag_index)-> |
| - extension(); |
| + browser_actions_container_->GetExtensionAt(drag_index); |
| BrowserActionDragData drag_data(extension->id(), drag_index); |
| drag_data.Write(browser_actions_container_->profile(), data); |
| } |