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