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 13 class TabStripModel; 14 15 namespace content { 16 class 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. 24 class 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