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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
// Copyright (c) 2012 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_TAB_STRIP_MODEL_OBSERVER_H_
#define CHROME_BROWSER_UI_TABS_TAB_STRIP_MODEL_OBSERVER_H_
class TabStripModel;
namespace content {
class WebContents;
}
namespace ui {
class ListSelectionModel;
}
////////////////////////////////////////////////////////////////////////////////
//
// 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 WebContentses.
//
// 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
};
enum ChangeReason {
// Used to indicate that none of the reasons below are responsible for the
// active tab change.
CHANGE_REASON_NONE = 0,
// The active tab changed because the tab's web contents was replaced.
CHANGE_REASON_REPLACED = 1 << 0,
// The active tab changed due to a user input event.
CHANGE_REASON_USER_GESTURE = 1 << 1,
};
// A new WebContents was inserted into the TabStripModel at the
// specified index. |foreground| is whether or not it was opened in the
// foreground (selected).
virtual void TabInsertedAt(content::WebContents* contents,
int index,
bool foreground);
// The specified WebContents at |index| is being closed (and eventually
// destroyed). |tab_strip_model| is the TabStripModel that contained the tab.
virtual void TabClosingAt(TabStripModel* tab_strip_model,
content::WebContents* contents,
int index);
// The specified WebContents at |index| is being detached, perhaps to
// be inserted in another TabStripModel. The implementer should take whatever
// action is necessary to deal with the WebContents no longer being
// present.
virtual void TabDetachedAt(content::WebContents* contents, int index);
// The active WebContents is about to change from |old_contents|.
// This gives observers a chance to prepare for an impending switch before it
// happens.
virtual void TabDeactivated(content::WebContents* 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|. If |reason| has CHANGE_REASON_REPLACED set
// then the web contents was replaced (see TabChangedAt). If |reason| has
// CHANGE_REASON_USER_GESTURE set then the web contents was changed due to a
// user input event (e.g. clicking on a tab, keystroke).
// 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.
// Note: |old_contents| will be NULL if there was no contents previously
// active.
virtual void ActiveTabChanged(content::WebContents* old_contents,
content::WebContents* new_contents,
int index,
int reason);
// 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 ui::ListSelectionModel& old_model);
// The specified WebContents at |from_index| was moved to |to_index|.
virtual void TabMoved(content::WebContents* contents,
int from_index,
int to_index);
// The specified WebContents 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(content::WebContents* contents,
int index,
TabChangeType change_type);
// The WebContents 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 WebContents.
virtual void TabReplacedAt(TabStripModel* tab_strip_model,
content::WebContents* old_contents,
content::WebContents* 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(content::WebContents* 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(content::WebContents* 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(content::WebContents* 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 any time an attempt is made to close all the tabs. This is not
// necessarily the result of CloseAllTabs(). For example, if the user closes
// the last tab WillCloseAllTabs() is sent. If the close does not succeed
// during the current event (say unload handlers block it) then
// CloseAllTabsCanceled() is sent. Also note that if the last tab is detached
// (DetachWebContentsAt()) then this is not sent.
virtual void WillCloseAllTabs();
virtual void CloseAllTabsCanceled();
// 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_UI_TABS_TAB_STRIP_MODEL_OBSERVER_H_
|