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