Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8256)

Unified Diff: chrome/browser/ui/views/toolbar/chevron_menu_button.cc

Issue 661493004: Add infrastructure for Chrome Actions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698