| 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_actions_container.h" | 5 #include "chrome/browser/ui/views/toolbar/browser_actions_container.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "chrome/browser/extensions/extension_util.h" | 10 #include "chrome/browser/extensions/extension_util.h" |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 model_->SetVisibleIconCount(WidthToIconCount(predefined_width)); | 206 model_->SetVisibleIconCount(WidthToIconCount(predefined_width)); |
| 207 } | 207 } |
| 208 if (model_ && model_->extensions_initialized()) | 208 if (model_ && model_->extensions_initialized()) |
| 209 SetContainerWidth(); | 209 SetContainerWidth(); |
| 210 } | 210 } |
| 211 | 211 |
| 212 BrowserActionView* BrowserActionsContainer::GetBrowserActionView( | 212 BrowserActionView* BrowserActionsContainer::GetBrowserActionView( |
| 213 ExtensionAction* action) { | 213 ExtensionAction* action) { |
| 214 for (BrowserActionViews::iterator i(browser_action_views_.begin()); | 214 for (BrowserActionViews::iterator i(browser_action_views_.begin()); |
| 215 i != browser_action_views_.end(); ++i) { | 215 i != browser_action_views_.end(); ++i) { |
| 216 if ((*i)->button()->extension_action() == action) | 216 if ((*i)->extension_action() == action) |
| 217 return *i; | 217 return *i; |
| 218 } | 218 } |
| 219 return NULL; | 219 return NULL; |
| 220 } | 220 } |
| 221 | 221 |
| 222 void BrowserActionsContainer::RefreshBrowserActionViews() { | 222 void BrowserActionsContainer::RefreshBrowserActionViews() { |
| 223 for (size_t i = 0; i < browser_action_views_.size(); ++i) | 223 for (size_t i = 0; i < browser_action_views_.size(); ++i) |
| 224 browser_action_views_[i]->button()->UpdateState(); | 224 browser_action_views_[i]->UpdateState(); |
| 225 } | 225 } |
| 226 | 226 |
| 227 void BrowserActionsContainer::CreateBrowserActionViews() { | 227 void BrowserActionsContainer::CreateBrowserActionViews() { |
| 228 DCHECK(browser_action_views_.empty()); | 228 DCHECK(browser_action_views_.empty()); |
| 229 if (!model_) | 229 if (!model_) |
| 230 return; | 230 return; |
| 231 | 231 |
| 232 const extensions::ExtensionList& toolbar_items = model_->toolbar_items(); | 232 const extensions::ExtensionList& toolbar_items = model_->toolbar_items(); |
| 233 for (extensions::ExtensionList::const_iterator i(toolbar_items.begin()); | 233 for (extensions::ExtensionList::const_iterator i(toolbar_items.begin()); |
| 234 i != toolbar_items.end(); ++i) { | 234 i != toolbar_items.end(); ++i) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 OnBrowserActionDragDone()); | 287 OnBrowserActionDragDone()); |
| 288 } | 288 } |
| 289 | 289 |
| 290 views::View* BrowserActionsContainer::GetOverflowReferenceView() { | 290 views::View* BrowserActionsContainer::GetOverflowReferenceView() { |
| 291 // We should only need an overflow reference when using the traditional | 291 // We should only need an overflow reference when using the traditional |
| 292 // chevron overflow. | 292 // chevron overflow. |
| 293 DCHECK(chevron_); | 293 DCHECK(chevron_); |
| 294 return chevron_; | 294 return chevron_; |
| 295 } | 295 } |
| 296 | 296 |
| 297 void BrowserActionsContainer::SetPopupOwner(BrowserActionButton* popup_owner) { | 297 void BrowserActionsContainer::SetPopupOwner(BrowserActionView* popup_owner) { |
| 298 // We should never be setting a popup owner when one already exists. | 298 // We should never be setting a popup owner when one already exists. |
| 299 DCHECK(!popup_owner_ || !popup_owner); | 299 DCHECK(!popup_owner_ || !popup_owner); |
| 300 popup_owner_ = popup_owner; | 300 popup_owner_ = popup_owner; |
| 301 } | 301 } |
| 302 | 302 |
| 303 void BrowserActionsContainer::HideActivePopup() { | 303 void BrowserActionsContainer::HideActivePopup() { |
| 304 if (popup_owner_) | 304 if (popup_owner_) |
| 305 popup_owner_->view_controller()->HidePopup(); | 305 popup_owner_->view_controller()->HidePopup(); |
| 306 } | 306 } |
| 307 | 307 |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 SchedulePaint(); | 518 SchedulePaint(); |
| 519 } | 519 } |
| 520 | 520 |
| 521 int BrowserActionsContainer::OnPerformDrop( | 521 int BrowserActionsContainer::OnPerformDrop( |
| 522 const ui::DropTargetEvent& event) { | 522 const ui::DropTargetEvent& event) { |
| 523 BrowserActionDragData data; | 523 BrowserActionDragData data; |
| 524 if (!data.Read(event.data())) | 524 if (!data.Read(event.data())) |
| 525 return ui::DragDropTypes::DRAG_NONE; | 525 return ui::DragDropTypes::DRAG_NONE; |
| 526 | 526 |
| 527 // Make sure we have the same view as we started with. | 527 // Make sure we have the same view as we started with. |
| 528 DCHECK_EQ(browser_action_views_[data.index()]->button()->extension()->id(), | 528 DCHECK_EQ(browser_action_views_[data.index()]->extension()->id(), |
| 529 data.id()); | 529 data.id()); |
| 530 DCHECK(model_); | 530 DCHECK(model_); |
| 531 | 531 |
| 532 size_t i = | 532 size_t i = |
| 533 drop_position_->row * kIconsPerMenuRow + drop_position_->icon_in_row; | 533 drop_position_->row * kIconsPerMenuRow + drop_position_->icon_in_row; |
| 534 if (in_overflow_mode()) | 534 if (in_overflow_mode()) |
| 535 i += GetFirstVisibleIconIndex(); | 535 i += GetFirstVisibleIconIndex(); |
| 536 // |i| now points to the item to the right of the drop indicator*, which is | 536 // |i| now points to the item to the right of the drop indicator*, which is |
| 537 // correct when dragging an icon to the left. When dragging to the right, | 537 // correct when dragging an icon to the left. When dragging to the right, |
| 538 // however, we want the icon being dragged to get the index of the item to | 538 // however, we want the icon being dragged to get the index of the item to |
| 539 // the left of the drop indicator, so we subtract one. | 539 // the left of the drop indicator, so we subtract one. |
| 540 // * Well, it can also point to the end, but not when dragging to the left. :) | 540 // * Well, it can also point to the end, but not when dragging to the left. :) |
| 541 if (i > data.index()) | 541 if (i > data.index()) |
| 542 --i; | 542 --i; |
| 543 | 543 |
| 544 if (profile_->IsOffTheRecord()) | 544 if (profile_->IsOffTheRecord()) |
| 545 i = model_->IncognitoIndexToOriginal(i); | 545 i = model_->IncognitoIndexToOriginal(i); |
| 546 | 546 |
| 547 model_->MoveBrowserAction( | 547 model_->MoveBrowserAction( |
| 548 browser_action_views_[data.index()]->button()->extension(), i); | 548 browser_action_views_[data.index()]->extension(), i); |
| 549 | 549 |
| 550 OnDragExited(); // Perform clean up after dragging. | 550 OnDragExited(); // Perform clean up after dragging. |
| 551 FOR_EACH_OBSERVER(BrowserActionsContainerObserver, | 551 FOR_EACH_OBSERVER(BrowserActionsContainerObserver, |
| 552 observers_, | 552 observers_, |
| 553 OnBrowserActionDragDone()); | 553 OnBrowserActionDragDone()); |
| 554 return ui::DragDropTypes::DRAG_MOVE; | 554 return ui::DragDropTypes::DRAG_MOVE; |
| 555 } | 555 } |
| 556 | 556 |
| 557 void BrowserActionsContainer::GetAccessibleState( | 557 void BrowserActionsContainer::GetAccessibleState( |
| 558 ui::AXViewState* state) { | 558 ui::AXViewState* state) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 574 overflow_menu_->RunMenu(GetWidget()); | 574 overflow_menu_->RunMenu(GetWidget()); |
| 575 } | 575 } |
| 576 } | 576 } |
| 577 | 577 |
| 578 void BrowserActionsContainer::WriteDragDataForView(View* sender, | 578 void BrowserActionsContainer::WriteDragDataForView(View* sender, |
| 579 const gfx::Point& press_pt, | 579 const gfx::Point& press_pt, |
| 580 OSExchangeData* data) { | 580 OSExchangeData* data) { |
| 581 DCHECK(data); | 581 DCHECK(data); |
| 582 | 582 |
| 583 for (size_t i = 0; i < browser_action_views_.size(); ++i) { | 583 for (size_t i = 0; i < browser_action_views_.size(); ++i) { |
| 584 BrowserActionButton* button = browser_action_views_[i]->button(); | 584 BrowserActionView* view = browser_action_views_[i]; |
| 585 if (button == sender) { | 585 if (view == sender) { |
| 586 // Set the dragging image for the icon. | 586 // Set the dragging image for the icon. |
| 587 gfx::ImageSkia badge(browser_action_views_[i]->GetIconWithBadge()); | 587 gfx::ImageSkia badge(view->GetIconWithBadge()); |
| 588 drag_utils::SetDragImageOnDataObject(badge, | 588 drag_utils::SetDragImageOnDataObject(badge, |
| 589 press_pt.OffsetFromOrigin(), | 589 press_pt.OffsetFromOrigin(), |
| 590 data); | 590 data); |
| 591 | 591 |
| 592 // Fill in the remaining info. | 592 // Fill in the remaining info. |
| 593 BrowserActionDragData drag_data( | 593 BrowserActionDragData drag_data(view->extension()->id(), i); |
| 594 browser_action_views_[i]->button()->extension()->id(), i); | |
| 595 drag_data.Write(profile_, data); | 594 drag_data.Write(profile_, data); |
| 596 break; | 595 break; |
| 597 } | 596 } |
| 598 } | 597 } |
| 599 } | 598 } |
| 600 | 599 |
| 601 int BrowserActionsContainer::GetDragOperationsForView(View* sender, | 600 int BrowserActionsContainer::GetDragOperationsForView(View* sender, |
| 602 const gfx::Point& p) { | 601 const gfx::Point& p) { |
| 603 return ui::DragDropTypes::DRAG_MOVE; | 602 return ui::DragDropTypes::DRAG_MOVE; |
| 604 } | 603 } |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 786 icon_height = ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 785 icon_height = ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| 787 IDR_BROWSER_ACTION)->height(); | 786 IDR_BROWSER_ACTION)->height(); |
| 788 } | 787 } |
| 789 return icon_height; | 788 return icon_height; |
| 790 } | 789 } |
| 791 | 790 |
| 792 void BrowserActionsContainer::BrowserActionAdded(const Extension* extension, | 791 void BrowserActionsContainer::BrowserActionAdded(const Extension* extension, |
| 793 int index) { | 792 int index) { |
| 794 #if defined(DEBUG) | 793 #if defined(DEBUG) |
| 795 for (size_t i = 0; i < browser_action_views_.size(); ++i) { | 794 for (size_t i = 0; i < browser_action_views_.size(); ++i) { |
| 796 DCHECK(browser_action_views_[i]->button()->extension() != extension) << | 795 DCHECK(browser_action_views_[i]->extension() != extension) << |
| 797 "Asked to add a browser action view for an extension that already " | 796 "Asked to add a browser action view for an extension that already " |
| 798 "exists."; | 797 "exists."; |
| 799 } | 798 } |
| 800 #endif | 799 #endif |
| 801 CloseOverflowMenu(); | 800 CloseOverflowMenu(); |
| 802 | 801 |
| 803 if (!ShouldDisplayBrowserAction(extension)) | 802 if (!ShouldDisplayBrowserAction(extension)) |
| 804 return; | 803 return; |
| 805 | 804 |
| 806 size_t visible_actions = VisibleBrowserActionsAfterAnimation(); | 805 size_t visible_actions = VisibleBrowserActionsAfterAnimation(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 828 OnBrowserActionVisibilityChanged(); | 827 OnBrowserActionVisibilityChanged(); |
| 829 } | 828 } |
| 830 } | 829 } |
| 831 | 830 |
| 832 void BrowserActionsContainer::BrowserActionRemoved(const Extension* extension) { | 831 void BrowserActionsContainer::BrowserActionRemoved(const Extension* extension) { |
| 833 CloseOverflowMenu(); | 832 CloseOverflowMenu(); |
| 834 | 833 |
| 835 size_t visible_actions = VisibleBrowserActionsAfterAnimation(); | 834 size_t visible_actions = VisibleBrowserActionsAfterAnimation(); |
| 836 for (BrowserActionViews::iterator i(browser_action_views_.begin()); | 835 for (BrowserActionViews::iterator i(browser_action_views_.begin()); |
| 837 i != browser_action_views_.end(); ++i) { | 836 i != browser_action_views_.end(); ++i) { |
| 838 if ((*i)->button()->extension() == extension) { | 837 if ((*i)->extension() == extension) { |
| 839 delete *i; | 838 delete *i; |
| 840 browser_action_views_.erase(i); | 839 browser_action_views_.erase(i); |
| 841 | 840 |
| 842 // If the extension is being upgraded we don't want the bar to shrink | 841 // If the extension is being upgraded we don't want the bar to shrink |
| 843 // because the icon is just going to get re-added to the same location. | 842 // because the icon is just going to get re-added to the same location. |
| 844 if (extensions::ExtensionSystem::Get(profile_)->runtime_data()-> | 843 if (extensions::ExtensionSystem::Get(profile_)->runtime_data()-> |
| 845 IsBeingUpgraded(extension)) | 844 IsBeingUpgraded(extension)) |
| 846 return; | 845 return; |
| 847 | 846 |
| 848 if (browser_action_views_.size() > visible_actions) { | 847 if (browser_action_views_.size() > visible_actions) { |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1038 // fixed. | 1037 // fixed. |
| 1039 if (!can_override && | 1038 if (!can_override && |
| 1040 (popup_owner_ || | 1039 (popup_owner_ || |
| 1041 !browser_->window()->IsActive() || | 1040 !browser_->window()->IsActive() || |
| 1042 !browser_->window()->IsToolbarVisible())) { | 1041 !browser_->window()->IsToolbarVisible())) { |
| 1043 return false; | 1042 return false; |
| 1044 } | 1043 } |
| 1045 | 1044 |
| 1046 for (BrowserActionViews::iterator iter = browser_action_views_.begin(); | 1045 for (BrowserActionViews::iterator iter = browser_action_views_.begin(); |
| 1047 iter != browser_action_views_.end(); ++iter) { | 1046 iter != browser_action_views_.end(); ++iter) { |
| 1048 BrowserActionButton* button = (*iter)->button(); | 1047 BrowserActionView* view = (*iter); |
| 1049 if (button->extension() == extension) | 1048 if (view->extension() == extension) |
| 1050 return button->view_controller()->ExecuteAction( | 1049 return view->view_controller()->ExecuteAction( |
| 1051 ExtensionPopup::SHOW, grant_tab_permissions); | 1050 ExtensionPopup::SHOW, grant_tab_permissions); |
| 1052 } | 1051 } |
| 1053 return false; | 1052 return false; |
| 1054 } | 1053 } |
| OLD | NEW |