tab_strip_model_observer_bridge.mm revision 5821806d5e7f356e8fa4b058a389a808ea183019
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#include "chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h" 6 7#include "chrome/browser/ui/tabs/tab_strip_model.h" 8#include "chrome/browser/ui/tab_contents/tab_contents.h" 9 10using content::WebContents; 11 12namespace { 13 14// TODO(avi): Remove when TabStripModelObserver sends WebContents. 15content::WebContents* WebContentsOf(TabContents* tab_contents) { 16 return tab_contents ? tab_contents->web_contents() : NULL; 17} 18 19} // namespace 20 21TabStripModelObserverBridge::TabStripModelObserverBridge(TabStripModel* model, 22 id controller) 23 : controller_(controller), model_(model) { 24 DCHECK(model && controller); 25 // Register to be a listener on the model so we can get updates and tell 26 // |controller_| about them in the future. 27 model_->AddObserver(this); 28} 29 30TabStripModelObserverBridge::~TabStripModelObserverBridge() { 31 // Remove ourselves from receiving notifications. 32 model_->RemoveObserver(this); 33} 34 35void TabStripModelObserverBridge::TabInsertedAt(WebContents* contents, 36 int index, 37 bool foreground) { 38 if ([controller_ respondsToSelector: 39 @selector(insertTabWithContents:atIndex:inForeground:)]) { 40 [controller_ insertTabWithContents:contents 41 atIndex:index 42 inForeground:foreground]; 43 } 44} 45 46void TabStripModelObserverBridge::TabClosingAt(TabStripModel* tab_strip_model, 47 WebContents* contents, 48 int index) { 49 if ([controller_ respondsToSelector: 50 @selector(tabClosingWithContents:atIndex:)]) { 51 [controller_ tabClosingWithContents:contents atIndex:index]; 52 } 53} 54 55void TabStripModelObserverBridge::TabDetachedAt(WebContents* contents, 56 int index) { 57 if ([controller_ respondsToSelector: 58 @selector(tabDetachedWithContents:atIndex:)]) { 59 [controller_ tabDetachedWithContents:contents atIndex:index]; 60 } 61} 62 63void TabStripModelObserverBridge::ActiveTabChanged( 64 TabContents* old_contents, 65 TabContents* new_contents, 66 int index, 67 bool user_gesture) { 68 if ([controller_ respondsToSelector: 69 @selector(activateTabWithContents:previousContents:atIndex: 70 userGesture:)]) { 71 [controller_ activateTabWithContents:WebContentsOf(new_contents) 72 previousContents:WebContentsOf(old_contents) 73 atIndex:index 74 userGesture:user_gesture]; 75 } 76} 77 78void TabStripModelObserverBridge::TabMoved(TabContents* contents, 79 int from_index, 80 int to_index) { 81 if ([controller_ respondsToSelector: 82 @selector(tabMovedWithContents:fromIndex:toIndex:)]) { 83 [controller_ tabMovedWithContents:WebContentsOf(contents) 84 fromIndex:from_index 85 toIndex:to_index]; 86 } 87} 88 89void TabStripModelObserverBridge::TabChangedAt(TabContents* contents, 90 int index, 91 TabChangeType change_type) { 92 if ([controller_ respondsToSelector: 93 @selector(tabChangedWithContents:atIndex:changeType:)]) { 94 [controller_ tabChangedWithContents:WebContentsOf(contents) 95 atIndex:index 96 changeType:change_type]; 97 } 98} 99 100void TabStripModelObserverBridge::TabReplacedAt( 101 TabStripModel* tab_strip_model, 102 TabContents* old_contents, 103 TabContents* new_contents, 104 int index) { 105 if ([controller_ respondsToSelector: 106 @selector(tabReplacedWithContents:previousContents:atIndex:)]) { 107 [controller_ tabReplacedWithContents:WebContentsOf(new_contents) 108 previousContents:WebContentsOf(old_contents) 109 atIndex:index]; 110 } else { 111 TabChangedAt(new_contents, index, ALL); 112 } 113} 114 115void TabStripModelObserverBridge::TabMiniStateChanged( 116 WebContents* contents, 117 int index) { 118 if ([controller_ respondsToSelector: 119 @selector(tabMiniStateChangedWithContents:atIndex:)]) { 120 [controller_ tabMiniStateChangedWithContents:contents 121 atIndex:index]; 122 } 123} 124 125void TabStripModelObserverBridge::TabStripEmpty() { 126 if ([controller_ respondsToSelector:@selector(tabStripEmpty)]) 127 [controller_ tabStripEmpty]; 128} 129 130void TabStripModelObserverBridge::TabStripModelDeleted() { 131 if ([controller_ respondsToSelector:@selector(tabStripModelDeleted)]) 132 [controller_ tabStripModelDeleted]; 133} 134