1// Copyright (c) 2012 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_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_ 6#define CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_ 7 8#import <Foundation/Foundation.h> 9 10#include "base/compiler_specific.h" 11#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" 12 13class TabStripModel; 14 15namespace content { 16class WebContents; 17} 18 19// A C++ bridge class to handle receiving notifications from the C++ tab strip 20// model. When the caller allocates a bridge, it automatically registers for 21// notifications from |model| and passes messages to |controller| via the 22// informal protocol below. The owner of this object is responsible for deleting 23// it (and thus unhooking notifications) before |controller| is destroyed. 24class TabStripModelObserverBridge : public TabStripModelObserver { 25 public: 26 TabStripModelObserverBridge(TabStripModel* model, id controller); 27 virtual ~TabStripModelObserverBridge(); 28 29 // Overridden from TabStripModelObserver 30 virtual void TabInsertedAt(content::WebContents* contents, 31 int index, 32 bool foreground) OVERRIDE; 33 virtual void TabClosingAt(TabStripModel* tab_strip_model, 34 content::WebContents* contents, 35 int index) OVERRIDE; 36 virtual void TabDetachedAt(content::WebContents* contents, 37 int index) OVERRIDE; 38 virtual void TabDeactivated(content::WebContents* contents) OVERRIDE; 39 virtual void ActiveTabChanged(content::WebContents* old_contents, 40 content::WebContents* new_contents, 41 int index, 42 int reason) OVERRIDE; 43 virtual void TabSelectionChanged( 44 TabStripModel* tab_strip_model, 45 const ui::ListSelectionModel& old_model) OVERRIDE; 46 virtual void TabMoved(content::WebContents* contents, 47 int from_index, 48 int to_index) OVERRIDE; 49 virtual void TabChangedAt(content::WebContents* contents, 50 int index, 51 TabChangeType change_type) OVERRIDE; 52 virtual void TabReplacedAt(TabStripModel* tab_strip_model, 53 content::WebContents* old_contents, 54 content::WebContents* new_contents, 55 int index) OVERRIDE; 56 virtual void TabMiniStateChanged(content::WebContents* contents, 57 int index) OVERRIDE; 58 virtual void TabStripEmpty() OVERRIDE; 59 virtual void TabStripModelDeleted() OVERRIDE; 60 61 private: 62 id controller_; // weak, owns me 63 TabStripModel* model_; // weak, owned by Browser 64}; 65 66// A collection of methods which can be selectively implemented by any 67// Cocoa object to receive updates about changes to a tab strip model. It is 68// ok to not implement them, the calling code checks before calling. 69@interface NSObject(TabStripModelBridge) 70- (void)insertTabWithContents:(content::WebContents*)contents 71 atIndex:(NSInteger)index 72 inForeground:(bool)inForeground; 73- (void)tabClosingWithContents:(content::WebContents*)contents 74 atIndex:(NSInteger)index; 75- (void)tabDetachedWithContents:(content::WebContents*)contents 76 atIndex:(NSInteger)index; 77- (void)tabDeactivatedWithContents:(content::WebContents*)contents; 78- (void)activateTabWithContents:(content::WebContents*)newContents 79 previousContents:(content::WebContents*)oldContents 80 atIndex:(NSInteger)index 81 reason:(int)reason; 82- (void)tabMovedWithContents:(content::WebContents*)contents 83 fromIndex:(NSInteger)from 84 toIndex:(NSInteger)to; 85- (void)tabChangedWithContents:(content::WebContents*)contents 86 atIndex:(NSInteger)index 87 changeType:(TabStripModelObserver::TabChangeType)change; 88- (void)tabReplacedWithContents:(content::WebContents*)newContents 89 previousContents:(content::WebContents*)oldContents 90 atIndex:(NSInteger)index; 91- (void)tabMiniStateChangedWithContents:(content::WebContents*)contents 92 atIndex:(NSInteger)index; 93- (void)tabStripEmpty; 94- (void)tabStripModelDeleted; 95- (void)tabSelectionChanged; 96@end 97 98#endif // CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_ 99