• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_TABS_TAB_STRIP_MODEL_OBSERVER_H_
6 #define CHROME_BROWSER_TABS_TAB_STRIP_MODEL_OBSERVER_H_
7 #pragma once
8 
9 class TabContentsWrapper;
10 class TabStripModel;
11 
12 ////////////////////////////////////////////////////////////////////////////////
13 //
14 // TabStripModelObserver
15 //
16 //  Objects implement this interface when they wish to be notified of changes
17 //  to the TabStripModel.
18 //
19 //  Two major implementers are the TabStrip, which uses notifications sent
20 //  via this interface to update the presentation of the strip, and the Browser
21 //  object, which updates bookkeeping and shows/hides individual TabContentses.
22 //
23 //  Register your TabStripModelObserver with the TabStripModel using its
24 //  Add/RemoveObserver methods.
25 //
26 ////////////////////////////////////////////////////////////////////////////////
27 class TabStripModelObserver {
28  public:
29   // Enumeration of the possible values supplied to TabChangedAt.
30   enum TabChangeType {
31     // Only the loading state changed.
32     LOADING_ONLY,
33 
34     // Only the title changed and page isn't loading.
35     TITLE_NOT_LOADING,
36 
37     // Change not characterized by LOADING_ONLY or TITLE_NOT_LOADING.
38     ALL
39   };
40 
41   // A new TabContents was inserted into the TabStripModel at the specified
42   // index. |foreground| is whether or not it was opened in the foreground
43   // (selected).
44   virtual void TabInsertedAt(TabContentsWrapper* contents,
45                              int index,
46                              bool foreground);
47 
48   // The specified TabContents at |index| is being closed (and eventually
49   // destroyed). |tab_strip_model| is the TabStripModel the tab was part of.
50   virtual void TabClosingAt(TabStripModel* tab_strip_model,
51                             TabContentsWrapper* contents,
52                             int index);
53 
54   // The specified TabContents at |index| is being detached, perhaps to be
55   // inserted in another TabStripModel. The implementer should take whatever
56   // action is necessary to deal with the TabContents no longer being present.
57   virtual void TabDetachedAt(TabContentsWrapper* contents, int index);
58 
59   // The selected TabContents is about to change from |old_contents|.
60   // This gives observers a chance to prepare for an impending switch before it
61   // happens.
62   virtual void TabDeselected(TabContentsWrapper* contents);
63 
64   // Sent when the selection changes. The previously selected tab is identified
65   // by |old_contents| and the newly selected tab by |new_contents|. |index| is
66   // the index of |new_contents|. When using multiple selection this may be sent
67   // even when the active tab has not changed. For example, if the selection is
68   // extended this method is invoked to inform observers the selection has
69   // changed, but |old_contents| and |new_contents| are the same.  If you only
70   // care about when the active tab changes, check for when |old_contents|
71   // differs from |new_contents|. |user_gesture| specifies whether or not this
72   // was done by a user input event (e.g. clicking on a tab, keystroke) or as a
73   // side-effect of some other function.
74   //
75   // TODO(sky): consider not overloading this. Instead rename this to
76   // TabActivatedAt (or something) and have TabSelectionChanged as well.
77   // TabSelectedAt. This requires renaming everyone to use new terms instead of
78   // selection.
79   virtual void TabSelectedAt(TabContentsWrapper* old_contents,
80                              TabContentsWrapper* new_contents,
81                              int index,
82                              bool user_gesture);
83 
84   // The specified TabContents at |from_index| was moved to |to_index|.
85   virtual void TabMoved(TabContentsWrapper* contents,
86                         int from_index,
87                         int to_index);
88 
89   // The specified TabContents at |index| changed in some way. |contents| may
90   // be an entirely different object and the old value is no longer available
91   // by the time this message is delivered.
92   //
93   // See TabChangeType for a description of |change_type|.
94   virtual void TabChangedAt(TabContentsWrapper* contents,
95                             int index,
96                             TabChangeType change_type);
97 
98   // The tab contents was replaced at the specified index. This is invoked when
99   // instant is enabled and the user navigates by way of instant.
100   virtual void TabReplacedAt(TabStripModel* tab_strip_model,
101                              TabContentsWrapper* old_contents,
102                              TabContentsWrapper* new_contents,
103                              int index);
104 
105   // Invoked when the pinned state of a tab changes. See note in
106   // TabMiniStateChanged as to how this relates to TabMiniStateChanged.
107   virtual void TabPinnedStateChanged(TabContentsWrapper* contents, int index);
108 
109   // Invoked if the mini state of a tab changes.
110   // NOTE: this is sent when the pinned state of a non-app tab changes and is
111   // sent in addition to TabPinnedStateChanged. UI code typically need not care
112   // about TabPinnedStateChanged, but instead this.
113   virtual void TabMiniStateChanged(TabContentsWrapper* contents, int index);
114 
115   // Invoked when the blocked state of a tab changes.
116   // NOTE: This is invoked when a tab becomes blocked/unblocked by a tab modal
117   // window.
118   virtual void TabBlockedStateChanged(TabContentsWrapper* contents, int index);
119 
120   // The TabStripModel now no longer has any tabs. The implementer may
121   // use this as a trigger to try and close the window containing the
122   // TabStripModel, for example...
123   virtual void TabStripEmpty();
124 
125   // Sent when the tabstrip model is about to be deleted and any reference held
126   // must be dropped.
127   virtual void TabStripModelDeleted();
128 
129  protected:
~TabStripModelObserver()130   virtual ~TabStripModelObserver() {}
131 };
132 
133 #endif  // CHROME_BROWSER_TABS_TAB_STRIP_MODEL_OBSERVER_H_
134