| // 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_ |