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); |
} |