Home | History | Annotate | Download | only in tabs
      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