| 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..66d000fa5f72bb69a12e34e32e918dd0f553666d 100644
|
| --- a/chrome/browser/ui/views/toolbar/chevron_menu_button.cc
|
| +++ b/chrome/browser/ui/views/toolbar/chevron_menu_button.cc
|
| @@ -8,16 +8,16 @@
|
| #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"
|
| #include "extensions/common/extension.h"
|
| -#include "extensions/common/extension_set.h"
|
| #include "ui/views/border.h"
|
| #include "ui/views/controls/button/label_button_border.h"
|
| #include "ui/views/controls/menu/menu_delegate.h"
|
| @@ -33,31 +33,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 +160,19 @@ ChevronMenuButton::MenuController::MenuController(
|
| i < browser_actions_container_->num_browser_actions(); ++i) {
|
| BrowserActionView* view =
|
| browser_actions_container_->GetBrowserActionViewAt(i);
|
| + ExtensionActionViewController* view_controller =
|
| + static_cast<ExtensionActionViewController*>(view->view_controller());
|
| 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_controller));
|
|
|
| ++command_id;
|
| }
|
| @@ -211,12 +213,12 @@ 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) {
|
| browser_actions_container_->GetBrowserActionViewAt(start_index_ + id - 1)->
|
| - view_controller()->ExecuteActionByUser();
|
| + view_controller()->ExecuteAction(true);
|
| }
|
|
|
| bool ChevronMenuButton::MenuController::ShowContextMenu(
|
| @@ -226,13 +228,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 =
|
| + static_cast<ExtensionActionViewController*>(view->view_controller());
|
| + 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 |
|
| @@ -316,12 +320,9 @@ int ChevronMenuButton::MenuController::OnPerformDrop(
|
|
|
| Profile* profile = browser_actions_container_->profile();
|
| // Move the extension in the model.
|
| - const extensions::Extension* extension =
|
| - extensions::ExtensionRegistry::Get(profile)->
|
| - enabled_extensions().GetByID(drop_data.id());
|
| extensions::ExtensionToolbarModel* toolbar_model =
|
| extensions::ExtensionToolbarModel::Get(profile);
|
| - toolbar_model->MoveExtensionIcon(extension, drop_index);
|
| + toolbar_model->MoveExtensionIcon(drop_data.id(), drop_index);
|
|
|
| // If the extension was moved to the overflow menu from the main bar, notify
|
| // the owner.
|
| @@ -340,10 +341,8 @@ bool ChevronMenuButton::MenuController::CanDrag(views::MenuItemView* menu) {
|
| 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();
|
| - BrowserActionDragData drag_data(extension->id(), drag_index);
|
| + BrowserActionDragData drag_data(
|
| + browser_actions_container_->GetIdAt(drag_index), drag_index);
|
| drag_data.Write(browser_actions_container_->profile(), data);
|
| }
|
|
|
|
|