| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/views/toolbar/browser_action_view.h" | 5 #include "chrome/browser/ui/views/toolbar/browser_action_view.h" |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/chrome_notification_types.h" | 8 #include "chrome/browser/chrome_notification_types.h" |
| 9 #include "chrome/browser/extensions/api/commands/command_service.h" | 9 #include "chrome/browser/extensions/api/commands/command_service.h" |
| 10 #include "chrome/browser/extensions/dev_mode_bubble_controller.h" | 10 #include "chrome/browser/extensions/dev_mode_bubble_controller.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 button_->set_owned_by_client(); | 56 button_->set_owned_by_client(); |
| 57 AddChildView(button_); | 57 AddChildView(button_); |
| 58 button_->UpdateState(); | 58 button_->UpdateState(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 BrowserActionView::~BrowserActionView() { | 61 BrowserActionView::~BrowserActionView() { |
| 62 button_->Destroy(); | 62 button_->Destroy(); |
| 63 } | 63 } |
| 64 | 64 |
| 65 gfx::ImageSkia BrowserActionView::GetIconWithBadge() { | 65 gfx::ImageSkia BrowserActionView::GetIconWithBadge() { |
| 66 int tab_id = delegate_->GetCurrentTabId(); | 66 return button_->GetIconWithBadge(); |
| 67 | |
| 68 const ExtensionAction* action = | |
| 69 extensions::ExtensionActionManager::Get(browser_->profile())-> | |
| 70 GetBrowserAction(*button_->extension()); | |
| 71 gfx::Size spacing(0, ToolbarView::kVertSpacing); | |
| 72 gfx::ImageSkia icon = *button_->icon_factory().GetIcon(tab_id).ToImageSkia(); | |
| 73 if (!button_->IsEnabled(tab_id)) | |
| 74 icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25); | |
| 75 return action->GetIconWithBadge(icon, tab_id, spacing); | |
| 76 } | 67 } |
| 77 | 68 |
| 78 void BrowserActionView::Layout() { | 69 void BrowserActionView::Layout() { |
| 79 // We can't rely on button_->GetPreferredSize() here because that's not set | 70 // We can't rely on button_->GetPreferredSize() here because that's not set |
| 80 // correctly until the first call to | 71 // correctly until the first call to |
| 81 // BrowserActionsContainer::RefreshBrowserActionViews(), whereas this can be | 72 // BrowserActionsContainer::RefreshBrowserActionViews(), whereas this can be |
| 82 // called before that when the initial bounds are set (and then not after, | 73 // called before that when the initial bounds are set (and then not after, |
| 83 // since the bounds don't change). So instead of setting the height from the | 74 // since the bounds don't change). So instead of setting the height from the |
| 84 // button's preferred size, we use IconHeight(), since that's how big the | 75 // button's preferred size, we use IconHeight(), since that's how big the |
| 85 // button should be regardless of what it's displaying. | 76 // button should be regardless of what it's displaying. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 115 BrowserActionView::Delegate* delegate) | 106 BrowserActionView::Delegate* delegate) |
| 116 : MenuButton(this, base::string16(), NULL, false), | 107 : MenuButton(this, base::string16(), NULL, false), |
| 117 browser_(browser), | 108 browser_(browser), |
| 118 browser_action_( | 109 browser_action_( |
| 119 extensions::ExtensionActionManager::Get(browser->profile())-> | 110 extensions::ExtensionActionManager::Get(browser->profile())-> |
| 120 GetBrowserAction(*extension)), | 111 GetBrowserAction(*extension)), |
| 121 extension_(extension), | 112 extension_(extension), |
| 122 icon_factory_(browser->profile(), extension, browser_action_, this), | 113 icon_factory_(browser->profile(), extension, browser_action_, this), |
| 123 delegate_(delegate), | 114 delegate_(delegate), |
| 124 context_menu_(NULL), | 115 context_menu_(NULL), |
| 125 called_registered_extension_command_(false) { | 116 called_registered_extension_command_(false), |
| 117 icon_observer_(NULL) { |
| 126 SetBorder(views::Border::NullBorder()); | 118 SetBorder(views::Border::NullBorder()); |
| 127 set_alignment(TextButton::ALIGN_CENTER); | 119 set_alignment(TextButton::ALIGN_CENTER); |
| 128 set_context_menu_controller(this); | 120 set_context_menu_controller(this); |
| 129 | 121 |
| 130 // No UpdateState() here because View hierarchy not setup yet. Our parent | 122 // No UpdateState() here because View hierarchy not setup yet. Our parent |
| 131 // should call UpdateState() after creation. | 123 // should call UpdateState() after creation. |
| 132 | 124 |
| 133 content::NotificationSource notification_source = | 125 content::NotificationSource notification_source = |
| 134 content::Source<Profile>(browser_->profile()->GetOriginalProfile()); | 126 content::Source<Profile>(browser_->profile()->GetOriginalProfile()); |
| 135 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED, | 127 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED, |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 UpdateState(); | 296 UpdateState(); |
| 305 break; | 297 break; |
| 306 default: | 298 default: |
| 307 NOTREACHED(); | 299 NOTREACHED(); |
| 308 break; | 300 break; |
| 309 } | 301 } |
| 310 } | 302 } |
| 311 | 303 |
| 312 void BrowserActionButton::OnIconUpdated() { | 304 void BrowserActionButton::OnIconUpdated() { |
| 313 UpdateState(); | 305 UpdateState(); |
| 306 if (icon_observer_) |
| 307 icon_observer_->OnIconUpdated(GetIconWithBadge()); |
| 314 } | 308 } |
| 315 | 309 |
| 316 bool BrowserActionButton::Activate() { | 310 bool BrowserActionButton::Activate() { |
| 317 if (!IsPopup()) | 311 if (!IsPopup()) |
| 318 return true; | 312 return true; |
| 319 | 313 |
| 320 delegate_->OnBrowserActionExecuted(this); | 314 delegate_->OnBrowserActionExecuted(this); |
| 321 | 315 |
| 322 // TODO(erikkay): Run a nested modal loop while the mouse is down to | 316 // TODO(erikkay): Run a nested modal loop while the mouse is down to |
| 323 // enable menu-like drag-select behavior. | 317 // enable menu-like drag-select behavior. |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 | 380 |
| 387 void BrowserActionButton::SetButtonNotPushed() { | 381 void BrowserActionButton::SetButtonNotPushed() { |
| 388 SetState(views::CustomButton::STATE_NORMAL); | 382 SetState(views::CustomButton::STATE_NORMAL); |
| 389 menu_visible_ = false; | 383 menu_visible_ = false; |
| 390 } | 384 } |
| 391 | 385 |
| 392 bool BrowserActionButton::IsEnabled(int tab_id) const { | 386 bool BrowserActionButton::IsEnabled(int tab_id) const { |
| 393 return browser_action_->GetIsVisible(tab_id); | 387 return browser_action_->GetIsVisible(tab_id); |
| 394 } | 388 } |
| 395 | 389 |
| 390 gfx::ImageSkia BrowserActionButton::GetIconWithBadge() { |
| 391 int tab_id = delegate_->GetCurrentTabId(); |
| 392 gfx::Size spacing(0, ToolbarView::kVertSpacing); |
| 393 gfx::ImageSkia icon = *icon_factory_.GetIcon(tab_id).ToImageSkia(); |
| 394 if (!IsEnabled(tab_id)) |
| 395 icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25); |
| 396 return browser_action_->GetIconWithBadge(icon, tab_id, spacing); |
| 397 } |
| 398 |
| 396 gfx::ImageSkia BrowserActionButton::GetIconForTest() { | 399 gfx::ImageSkia BrowserActionButton::GetIconForTest() { |
| 397 return icon(); | 400 return icon(); |
| 398 } | 401 } |
| 399 | 402 |
| 400 BrowserActionButton::~BrowserActionButton() { | 403 BrowserActionButton::~BrowserActionButton() { |
| 401 } | 404 } |
| 402 | 405 |
| 403 void BrowserActionButton::MaybeRegisterExtensionCommand() { | 406 void BrowserActionButton::MaybeRegisterExtensionCommand() { |
| 404 extensions::CommandService* command_service = | 407 extensions::CommandService* command_service = |
| 405 extensions::CommandService::Get(browser_->profile()); | 408 extensions::CommandService::Get(browser_->profile()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 426 extensions::Command browser_action_command; | 429 extensions::Command browser_action_command; |
| 427 if (!only_if_active || !command_service->GetBrowserActionCommand( | 430 if (!only_if_active || !command_service->GetBrowserActionCommand( |
| 428 extension_->id(), | 431 extension_->id(), |
| 429 extensions::CommandService::ACTIVE_ONLY, | 432 extensions::CommandService::ACTIVE_ONLY, |
| 430 &browser_action_command, | 433 &browser_action_command, |
| 431 NULL)) { | 434 NULL)) { |
| 432 GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this); | 435 GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this); |
| 433 keybinding_.reset(NULL); | 436 keybinding_.reset(NULL); |
| 434 } | 437 } |
| 435 } | 438 } |
| OLD | NEW |