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

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

Issue 700453003: Revert of Make extensions that desire to act pop out if in overflow (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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/browser_actions_container.cc
diff --git a/chrome/browser/ui/views/toolbar/browser_actions_container.cc b/chrome/browser/ui/views/toolbar/browser_actions_container.cc
index 6c195235e537ff29181d48f033a353cdef178ae0..55aaca980cfee244c1d5c3c6981118d00d76f59f 100644
--- a/chrome/browser/ui/views/toolbar/browser_actions_container.cc
+++ b/chrome/browser/ui/views/toolbar/browser_actions_container.cc
@@ -60,8 +60,7 @@
// Extension actions come first.
extensions::ExtensionActionManager* action_manager =
extensions::ExtensionActionManager::Get(browser->profile());
- const extensions::ExtensionList& toolbar_items = model->GetItemOrderForTab(
- browser->tab_strip_model()->GetActiveWebContents());
+ const extensions::ExtensionList& toolbar_items = model->toolbar_items();
for (const scoped_refptr<const Extension>& extension : toolbar_items) {
actions.push_back(new ExtensionActionViewController(
extension.get(),
@@ -126,8 +125,6 @@
resize_area_(NULL),
chevron_(NULL),
suppress_chevron_(false),
- suppress_animation_(false),
- suppress_layout_(false),
resize_amount_(0),
animation_target_size_(0) {
set_id(VIEW_ID_BROWSER_ACTION_TOOLBAR);
@@ -197,22 +194,8 @@
}
void BrowserActionsContainer::RefreshToolbarActionViews() {
- if (toolbar_action_views_.empty())
- return; // Nothing to do.
-
- // When we do a bulk-refresh of views (such as when we switch tabs), we don't
- // animate the difference. We only animate when it's a change driven by the
- // action.
- base::AutoReset<bool> animation_resetter(&suppress_animation_, true);
-
- {
- // Don't layout until the end.
- base::AutoReset<bool> layout_resetter(&suppress_layout_, true);
- for (ToolbarActionView* view : toolbar_action_views_)
- view->UpdateState();
- }
-
- ReorderViews(); // Also triggers a layout.
+ for (ToolbarActionView* view : toolbar_action_views_)
+ view->UpdateState();
}
void BrowserActionsContainer::CreateToolbarActionViews() {
@@ -220,23 +203,15 @@
if (!model_)
return;
- {
- // We don't Layout while creating views. Instead, Layout() once at the end.
- base::AutoReset<bool> layout_resetter(&suppress_layout_, true);
-
- ScopedVector<ToolbarActionViewController> actions =
- GetToolbarActions(model_, browser_);
- for (ToolbarActionViewController* controller : actions) {
- ToolbarActionView* view =
- new ToolbarActionView(make_scoped_ptr(controller), browser_, this);
- toolbar_action_views_.push_back(view);
- AddChildView(view);
- }
- actions.weak_clear();
- }
-
- Layout();
- SchedulePaint();
+ ScopedVector<ToolbarActionViewController> actions =
+ GetToolbarActions(model_, browser_);
+ for (ToolbarActionViewController* controller : actions) {
+ ToolbarActionView* view =
+ new ToolbarActionView(make_scoped_ptr(controller), browser_, this);
+ toolbar_action_views_.push_back(view);
+ AddChildView(view);
+ }
+ actions.weak_clear();
}
void BrowserActionsContainer::DeleteToolbarActionViews() {
@@ -273,10 +248,12 @@
void BrowserActionsContainer::NotifyActionMovedToOverflow() {
// When an action is moved to overflow, we shrink the size of the container
// by 1.
- size_t icon_count = model_->visible_icon_count();
+ int icon_count = model_->GetVisibleIconCount();
// Since this happens when an icon moves from the main bar to overflow, we
// can't possibly have had no visible icons on the main bar.
- DCHECK_NE(0u, icon_count);
+ DCHECK_NE(0, icon_count);
+ if (icon_count == -1)
+ icon_count = toolbar_action_views_.size();
model_->SetVisibleIconCount(icon_count - 1);
}
@@ -380,9 +357,6 @@
}
void BrowserActionsContainer::Layout() {
- if (suppress_layout_)
- return;
-
if (toolbar_action_views_.empty()) {
SetVisible(false);
return;
@@ -576,7 +550,7 @@
if (in_overflow_mode())
main_container_->NotifyActionMovedToOverflow();
else // This is the main container.
- model_->SetVisibleIconCount(model_->visible_icon_count() + 1);
+ model_->SetVisibleIconCount(model_->GetVisibleIconCount() + 1);
}
OnDragExited(); // Perform clean up after dragging.
@@ -807,13 +781,14 @@
if (!extensions::ExtensionSystem::Get(profile_)->runtime_data()->
IsBeingUpgraded(extension)) {
// We need to resize if either:
- // - The container is set to display all icons, or
+ // - The container is set to display all icons (visible count = -1), or
// - The container will need to expand to include the chevron. This can
// happen when the container is set to display <n> icons, where <n> is
// the number of icons before the new icon. With the new icon, the chevron
// will need to be displayed.
- if (model_->all_icons_visible() ||
- (model_->visible_icon_count() < toolbar_action_views_.size() &&
+ int model_icon_count = model_->GetVisibleIconCount();
+ if (model_icon_count == -1 ||
+ (static_cast<size_t>(model_icon_count) < toolbar_action_views_.size() &&
(chevron_ && !chevron_->visible()))) {
suppress_chevron_ = true;
Animate(gfx::Tween::LINEAR, GetIconCount());
@@ -905,15 +880,8 @@
}
void BrowserActionsContainer::ToolbarVisibleCountChanged() {
- if (GetPreferredWidth() != container_width_) {
+ if (GetPreferredWidth() != container_width_)
Animate(gfx::Tween::EASE_OUT, GetIconCount());
- } else if (animation_target_size_ != 0) {
- // It's possible that we're right where we're supposed to be in terms of
- // icon count, but that we're also currently resizing. If this is the case,
- // end the current animation with the current width.
- animation_target_size_ = container_width_;
- resize_animation_->Reset();
- }
}
void BrowserActionsContainer::ToolbarHighlightModeChanged(
@@ -925,12 +893,6 @@
DeleteToolbarActionViews();
CreateToolbarActionViews();
Animate(gfx::Tween::LINEAR, GetIconCount());
-}
-
-void BrowserActionsContainer::OnToolbarReorderNecessary(
- content::WebContents* web_contents) {
- if (GetCurrentWebContents() == web_contents)
- ReorderViews();
}
Browser* BrowserActionsContainer::GetBrowser() {
@@ -1018,8 +980,7 @@
void BrowserActionsContainer::Animate(gfx::Tween::Type tween_type,
size_t num_visible_icons) {
int target_size = IconCountToWidth(num_visible_icons);
- if (resize_animation_ && !disable_animations_during_testing_ &&
- !suppress_animation_) {
+ if (resize_animation_ && !disable_animations_during_testing_) {
// Animate! We have to set the animation_target_size_ after calling Reset(),
// because that could end up calling AnimationEnded which clears the value.
resize_animation_->Reset();
@@ -1032,58 +993,20 @@
}
}
-void BrowserActionsContainer::ReorderViews() {
- extensions::ExtensionList new_order =
- model_->GetItemOrderForTab(GetCurrentWebContents());
- if (new_order.empty())
- return; // Nothing to do.
-
-#if DCHECK_IS_ON
- // Make sure the lists are in sync. There should be a view for each action in
- // the new order.
- // |toolbar_action_views_| may have more views than actions are present in
- // |new_order| if there are any component toolbar actions.
- // TODO(devlin): Change this to DCHECK_EQ when all toolbar actions are shown
- // in the model.
- DCHECK_LE(new_order.size(), toolbar_action_views_.size());
- for (const scoped_refptr<const Extension>& extension : new_order)
- DCHECK(GetViewForExtension(extension.get()));
-#endif
-
- // Run through the views and compare them to the desired order. If something
- // is out of place, find the correct spot for it.
- for (size_t i = 0; i < new_order.size() - 1; ++i) {
- if (new_order[i]->id() !=
- toolbar_action_views_[i]->view_controller()->GetId()) {
- // Find where the correct view is (it's guaranteed to be after our current
- // index, since everything up to this point is correct).
- size_t j = i + 1;
- while (new_order[i]->id() !=
- toolbar_action_views_[j]->view_controller()->GetId())
- ++j;
- std::swap(toolbar_action_views_[i], toolbar_action_views_[j]);
- }
- }
-
- // Our visible browser actions may have changed - re-Layout() and check the
- // size.
- ToolbarVisibleCountChanged();
- OnBrowserActionVisibilityChanged();
-}
-
size_t BrowserActionsContainer::GetIconCount() const {
if (!model_)
return 0u;
// Find the absolute value for the model's visible count.
- size_t model_visible_size = model_->GetVisibleIconCountForTab(
- browser_->tab_strip_model()->GetActiveWebContents());
-
-#if DCHECK_IS_ON
+ int model_visible_size = model_->GetVisibleIconCount();
+ size_t absolute_model_visible_size = model_visible_size == -1 ?
+ model_->toolbar_items().size() : model_visible_size;
+
+#if !defined(NDEBUG)
// Good time for some sanity checks: We should never try to display more
// icons than we have, and we should always have a view per item in the model.
// (The only exception is if this is in initialization.)
- if (initialized_ && !suppress_layout_) {
+ if (initialized_) {
size_t num_extension_actions = 0u;
for (ToolbarActionView* view : toolbar_action_views_) {
// No component action should ever have a valid extension id, so we can
@@ -1093,12 +1016,13 @@
if (crx_file::id_util::IdIsValid(view->view_controller()->GetId()))
++num_extension_actions;
}
- DCHECK_LE(model_visible_size, num_extension_actions);
+ DCHECK_LE(absolute_model_visible_size, num_extension_actions);
DCHECK_EQ(model_->toolbar_items().size(), num_extension_actions);
}
#endif
// The overflow displays any icons not shown by the main bar.
return in_overflow_mode() ?
- model_->toolbar_items().size() - model_visible_size : model_visible_size;
-}
+ model_->toolbar_items().size() - absolute_model_visible_size :
+ absolute_model_visible_size;
+}

Powered by Google App Engine
This is Rietveld 408576698