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
134
135
136
137
138
139
140
141
|
// 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;
class TabStripSelectionModel;
////////////////////////////////////////////////////////////////////////////////
//
// 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 active TabContents is about to change from |old_contents|.
// This gives observers a chance to prepare for an impending switch before it
// happens.
virtual void TabDeactivated(TabContentsWrapper* contents);
// Sent when the active tab changes. The previously active tab is identified
// by |old_contents| and the newly active tab by |new_contents|. |index| is
// the index of |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.
// Note: It is possible for the selection to change while the active tab
// remains unchanged. For example, control-click may not change the active tab
// but does change the selection. In this case |ActiveTabChanged| is not sent.
// If you care about any changes to the selection, override
// TabSelectionChanged.
virtual void ActiveTabChanged(TabContentsWrapper* old_contents,
TabContentsWrapper* new_contents,
int index,
bool user_gesture);
// Sent when the selection changes in |tab_strip_model|. More precisely when
// selected tabs, anchor tab or active tab change. |old_model| is a snapshot
// of the selection model before the change. See also ActiveTabChanged for
// details.
virtual void TabSelectionChanged(TabStripModel* tab_strip_model,
const TabStripSelectionModel& old_model);
// 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 or when
// prerendering swaps in a prerendered TabContents.
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();
// Invoked when an active/selected tab at |index| is selected again (ie - the
// active/foreground tab is clicked).
virtual void ActiveTabClicked(int index);
protected:
virtual ~TabStripModelObserver() {}
};
#endif // CHROME_BROWSER_TABS_TAB_STRIP_MODEL_OBSERVER_H_
|