Home | History | Annotate | Download | only in tabs
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_TABS_TAB_STRIP_MODEL_ORDER_CONTROLLER_H_
      6 #define CHROME_BROWSER_UI_TABS_TAB_STRIP_MODEL_ORDER_CONTROLLER_H_
      7 
      8 #include "chrome/browser/ui/tabs/tab_strip_model.h"
      9 #include "ui/base/page_transition_types.h"
     10 
     11 ///////////////////////////////////////////////////////////////////////////////
     12 // TabStripModelOrderController
     13 //
     14 //  An object that allows different types of ordering and reselection to be
     15 //  heuristics plugged into a TabStripModel.
     16 //
     17 class TabStripModelOrderController : public TabStripModelObserver {
     18  public:
     19   explicit TabStripModelOrderController(TabStripModel* tabstrip);
     20   virtual ~TabStripModelOrderController();
     21 
     22   // Determine where to place a newly opened tab by using the supplied
     23   // transition and foreground flag to figure out how it was opened.
     24   int DetermineInsertionIndex(ui::PageTransition transition,
     25                               bool foreground);
     26 
     27   // Determine where to shift selection after a tab is closed.
     28   int DetermineNewSelectedIndex(int removed_index) const;
     29 
     30   // Overridden from TabStripModelObserver:
     31   virtual void ActiveTabChanged(content::WebContents* old_contents,
     32                                 content::WebContents* new_contents,
     33                                 int index,
     34                                 int reason) OVERRIDE;
     35 
     36  private:
     37   // Returns a valid index to be selected after the tab at |removing_index| is
     38   // closed. If |index| is after |removing_index|, |index| is adjusted to
     39   // reflect the fact that |removing_index| is going away.
     40   int GetValidIndex(int index, int removing_index) const;
     41 
     42   TabStripModel* tabstrip_;
     43 
     44   DISALLOW_COPY_AND_ASSIGN(TabStripModelOrderController);
     45 };
     46 
     47 #endif  // CHROME_BROWSER_UI_TABS_TAB_STRIP_MODEL_ORDER_CONTROLLER_H_
     48