| 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_service.h" | 10 #include "chrome/browser/extensions/extension_service.h" |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 HidePopup(); | 177 HidePopup(); |
| 178 STLDeleteElements(&browser_action_views_); | 178 STLDeleteElements(&browser_action_views_); |
| 179 } | 179 } |
| 180 | 180 |
| 181 size_t BrowserActionsContainer::VisibleBrowserActions() const { | 181 size_t BrowserActionsContainer::VisibleBrowserActions() const { |
| 182 size_t visible_actions = 0; | 182 size_t visible_actions = 0; |
| 183 for (size_t i = 0; i < browser_action_views_.size(); ++i) { | 183 for (size_t i = 0; i < browser_action_views_.size(); ++i) { |
| 184 if (browser_action_views_[i]->visible()) | 184 if (browser_action_views_[i]->visible()) |
| 185 ++visible_actions; | 185 ++visible_actions; |
| 186 } | 186 } |
| 187 VLOG(4) << "BAC::VisibleBrowserActions() returns " << visible_actions |
| 188 << " with size=" << browser_action_views_.size(); |
| 187 return visible_actions; | 189 return visible_actions; |
| 188 } | 190 } |
| 189 | 191 |
| 190 void BrowserActionsContainer::ExecuteExtensionCommand( | 192 void BrowserActionsContainer::ExecuteExtensionCommand( |
| 191 const extensions::Extension* extension, | 193 const extensions::Extension* extension, |
| 192 const extensions::Command& command) { | 194 const extensions::Command& command) { |
| 193 // Global commands are handled by the ExtensionCommandsGlobalRegistry | 195 // Global commands are handled by the ExtensionCommandsGlobalRegistry |
| 194 // instance. | 196 // instance. |
| 195 DCHECK(!command.global()); | 197 DCHECK(!command.global()); |
| 196 extension_keybinding_registry_->ExecuteCommand(extension->id(), | 198 extension_keybinding_registry_->ExecuteCommand(extension->id(), |
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 int index) { | 667 int index) { |
| 666 #if defined(DEBUG) | 668 #if defined(DEBUG) |
| 667 for (size_t i = 0; i < browser_action_views_.size(); ++i) { | 669 for (size_t i = 0; i < browser_action_views_.size(); ++i) { |
| 668 DCHECK(browser_action_views_[i]->button()->extension() != extension) << | 670 DCHECK(browser_action_views_[i]->button()->extension() != extension) << |
| 669 "Asked to add a browser action view for an extension that already " | 671 "Asked to add a browser action view for an extension that already " |
| 670 "exists."; | 672 "exists."; |
| 671 } | 673 } |
| 672 #endif | 674 #endif |
| 673 CloseOverflowMenu(); | 675 CloseOverflowMenu(); |
| 674 | 676 |
| 675 if (!ShouldDisplayBrowserAction(extension)) | 677 if (!ShouldDisplayBrowserAction(extension)) { |
| 678 VLOG(4) << "Should not display: " << extension->name().c_str(); |
| 676 return; | 679 return; |
| 680 } |
| 677 | 681 |
| 678 size_t visible_actions = VisibleBrowserActions(); | 682 size_t visible_actions = VisibleBrowserActions(); |
| 683 VLOG(4) << "Got back " << visible_actions << " visible."; |
| 679 | 684 |
| 680 // Add the new browser action to the vector and the view hierarchy. | 685 // Add the new browser action to the vector and the view hierarchy. |
| 681 if (profile_->IsOffTheRecord()) | 686 if (profile_->IsOffTheRecord()) |
| 682 index = model_->OriginalIndexToIncognito(index); | 687 index = model_->OriginalIndexToIncognito(index); |
| 683 BrowserActionView* view = new BrowserActionView(extension, browser_, this); | 688 BrowserActionView* view = new BrowserActionView(extension, browser_, this); |
| 684 browser_action_views_.insert(browser_action_views_.begin() + index, view); | 689 browser_action_views_.insert(browser_action_views_.begin() + index, view); |
| 685 AddChildViewAt(view, index); | 690 AddChildViewAt(view, index); |
| 686 | 691 |
| 687 // If we are still initializing the container, don't bother animating. | 692 // If we are still initializing the container, don't bother animating. |
| 688 if (!model_->extensions_initialized()) | 693 if (!model_->extensions_initialized()) { |
| 694 VLOG(4) << "Still initializing"; |
| 689 return; | 695 return; |
| 696 } |
| 690 | 697 |
| 691 // Enlarge the container if it was already at maximum size and we're not in | 698 // Enlarge the container if it was already at maximum size and we're not in |
| 692 // the middle of upgrading. | 699 // the middle of upgrading. |
| 693 if ((model_->GetVisibleIconCount() < 0) && | 700 if ((model_->GetVisibleIconCount() < 0) && |
| 694 !extensions::ExtensionSystem::Get(profile_)->runtime_data()-> | 701 !extensions::ExtensionSystem::Get(profile_)->runtime_data()-> |
| 695 IsBeingUpgraded(extension)) { | 702 IsBeingUpgraded(extension)) { |
| 703 VLOG(4) << "At max, Save and animate"; |
| 696 suppress_chevron_ = true; | 704 suppress_chevron_ = true; |
| 697 SaveDesiredSizeAndAnimate(gfx::Tween::LINEAR, visible_actions + 1); | 705 SaveDesiredSizeAndAnimate(gfx::Tween::LINEAR, visible_actions + 1); |
| 698 } else { | 706 } else { |
| 707 VLOG(4) << "Not at max"; |
| 699 // Just redraw the (possibly modified) visible icon set. | 708 // Just redraw the (possibly modified) visible icon set. |
| 700 OnBrowserActionVisibilityChanged(); | 709 OnBrowserActionVisibilityChanged(); |
| 701 } | 710 } |
| 702 } | 711 } |
| 703 | 712 |
| 704 void BrowserActionsContainer::BrowserActionRemoved(const Extension* extension) { | 713 void BrowserActionsContainer::BrowserActionRemoved(const Extension* extension) { |
| 705 CloseOverflowMenu(); | 714 CloseOverflowMenu(); |
| 706 | 715 |
| 707 if (popup_ && popup_->host()->extension() == extension) | 716 if (popup_ && popup_->host()->extension() == extension) |
| 708 HidePopup(); | 717 HidePopup(); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 864 | 873 |
| 865 void BrowserActionsContainer::SaveDesiredSizeAndAnimate( | 874 void BrowserActionsContainer::SaveDesiredSizeAndAnimate( |
| 866 gfx::Tween::Type tween_type, | 875 gfx::Tween::Type tween_type, |
| 867 size_t num_visible_icons) { | 876 size_t num_visible_icons) { |
| 868 // Save off the desired number of visible icons. We do this now instead of at | 877 // Save off the desired number of visible icons. We do this now instead of at |
| 869 // the end of the animation so that even if the browser is shut down while | 878 // the end of the animation so that even if the browser is shut down while |
| 870 // animating, the right value will be restored on next run. | 879 // animating, the right value will be restored on next run. |
| 871 // NOTE: Don't save the icon count in incognito because there may be fewer | 880 // NOTE: Don't save the icon count in incognito because there may be fewer |
| 872 // icons in that mode. The result is that the container in a normal window is | 881 // icons in that mode. The result is that the container in a normal window is |
| 873 // always at least as wide as in an incognito window. | 882 // always at least as wide as in an incognito window. |
| 874 if (!profile_->IsOffTheRecord()) | 883 if (!profile_->IsOffTheRecord()) { |
| 875 model_->SetVisibleIconCount(num_visible_icons); | 884 model_->SetVisibleIconCount(num_visible_icons); |
| 876 | 885 VLOG(4) << "Setting visible count: " << num_visible_icons; |
| 886 } else { |
| 887 VLOG(4) << "|Skipping| setting visible count: " << num_visible_icons; |
| 888 } |
| 877 int target_size = IconCountToWidth(num_visible_icons, | 889 int target_size = IconCountToWidth(num_visible_icons, |
| 878 num_visible_icons < browser_action_views_.size()); | 890 num_visible_icons < browser_action_views_.size()); |
| 879 if (!disable_animations_during_testing_) { | 891 if (!disable_animations_during_testing_) { |
| 880 // Animate! We have to set the animation_target_size_ after calling Reset(), | 892 // Animate! We have to set the animation_target_size_ after calling Reset(), |
| 881 // because that could end up calling AnimationEnded which clears the value. | 893 // because that could end up calling AnimationEnded which clears the value. |
| 882 resize_animation_->Reset(); | 894 resize_animation_->Reset(); |
| 883 resize_animation_->SetTweenType(tween_type); | 895 resize_animation_->SetTweenType(tween_type); |
| 884 animation_target_size_ = target_size; | 896 animation_target_size_ = target_size; |
| 885 resize_animation_->Show(); | 897 resize_animation_->Show(); |
| 886 } else { | 898 } else { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 926 views::BubbleBorder::TOP_RIGHT, | 938 views::BubbleBorder::TOP_RIGHT, |
| 927 show_action); | 939 show_action); |
| 928 popup_->GetWidget()->AddObserver(this); | 940 popup_->GetWidget()->AddObserver(this); |
| 929 popup_button_ = button; | 941 popup_button_ = button; |
| 930 | 942 |
| 931 // Only set button as pushed if it was triggered by a user click. | 943 // Only set button as pushed if it was triggered by a user click. |
| 932 if (should_grant) | 944 if (should_grant) |
| 933 popup_button_->SetButtonPushed(); | 945 popup_button_->SetButtonPushed(); |
| 934 return true; | 946 return true; |
| 935 } | 947 } |
| OLD | NEW |