// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_TABS_HOVER_TAB_SELECTOR_H_ #define CHROME_BROWSER_UI_TABS_HOVER_TAB_SELECTOR_H_ #include "base/memory/weak_ptr.h" class TabStripModel; // Helper class to perform "spring-loaded" tab transitions. Manages // the lifecycle of delayed tab transition tasks. class HoverTabSelector { public: explicit HoverTabSelector(TabStripModel* tab_strip_model); ~HoverTabSelector(); // Begin a delayed tab transition to the tab at |index|. Only starts // the transition if the specified tab is not active and there isn't // already a transition to it scheduled. Cancels the pending transition // to any other tab, if there is one. void StartTabTransition(int index); // Cancel a pending tab transition. No-op if there is no pending transition. void CancelTabTransition(); private: // Performs the tab transition. void PerformTabTransition(); // Model of the tab strip on which this class operates. TabStripModel* tab_strip_model_; // The model index of the tab to transition to. int tab_transition_tab_index_; // Factory for creating tab transition tasks. base::WeakPtrFactory<HoverTabSelector> weak_factory_; DISALLOW_COPY_AND_ASSIGN(HoverTabSelector); }; #endif // CHROME_BROWSER_UI_TABS_HOVER_TAB_SELECTOR_H_