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 TabMoved(content::WebContents* contents, 44 int from_index, 45 int to_index) OVERRIDE; 46 virtual void TabChangedAt(content::WebContents* contents, 47 int index, 48 TabChangeType change_type) OVERRIDE; 49 virtual void TabReplacedAt(TabStripModel* tab_strip_model, 50 content::WebContents* old_contents, 51 content::WebContents* new_contents, 52 int index) OVERRIDE; 53 virtual void TabMiniStateChanged(content::WebContents* contents, 54 int index) OVERRIDE; 55 virtual void TabStripEmpty() OVERRIDE; 56 virtual void TabStripModelDeleted() OVERRIDE; 57 58 private: 59 id controller_; // weak, owns me 60 TabStripModel* model_; // weak, owned by Browser 61 }; 62 63 // A collection of methods which can be selectively implemented by any 64 // Cocoa object to receive updates about changes to a tab strip model. It is 65 // ok to not implement them, the calling code checks before calling. 66 @interface NSObject(TabStripModelBridge) 67 - (void)insertTabWithContents:(content::WebContents*)contents 68 atIndex:(NSInteger)index 69 inForeground:(bool)inForeground; 70 - (void)tabClosingWithContents:(content::WebContents*)contents 71 atIndex:(NSInteger)index; 72 - (void)tabDetachedWithContents:(content::WebContents*)contents 73 atIndex:(NSInteger)index; 74 - (void)tabDeactivatedWithContents:(content::WebContents*)contents; 75 - (void)activateTabWithContents:(content::WebContents*)newContents 76 previousContents:(content::WebContents*)oldContents 77 atIndex:(NSInteger)index 78 reason:(int)reason; 79 - (void)tabMovedWithContents:(content::WebContents*)contents 80 fromIndex:(NSInteger)from 81 toIndex:(NSInteger)to; 82 - (void)tabChangedWithContents:(content::WebContents*)contents 83 atIndex:(NSInteger)index 84 changeType:(TabStripModelObserver::TabChangeType)change; 85 - (void)tabReplacedWithContents:(content::WebContents*)newContents 86 previousContents:(content::WebContents*)oldContents 87 atIndex:(NSInteger)index; 88 - (void)tabMiniStateChangedWithContents:(content::WebContents*)contents 89 atIndex:(NSInteger)index; 90 - (void)tabStripEmpty; 91 - (void)tabStripModelDeleted; 92 @end 93 94 #endif // CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_ 95