1// Copyright (c) 2010 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 "base/metrics/nacl_histogram.h" 6#include "chrome/browser/tabs/default_tab_handler.h" 7#include "chrome/browser/tabs/tab_strip_model.h" 8#include "chrome/browser/ui/browser.h" 9 10//////////////////////////////////////////////////////////////////////////////// 11// DefaultTabHandler, public: 12 13DefaultTabHandler::DefaultTabHandler(TabHandlerDelegate* delegate) 14 : delegate_(delegate), 15 ALLOW_THIS_IN_INITIALIZER_LIST( 16 model_(new TabStripModel(this, delegate->GetProfile()))) { 17 UmaNaclHistogramEnumeration(FIRST_TAB_NACL_BASELINE); 18 model_->AddObserver(this); 19} 20 21DefaultTabHandler::~DefaultTabHandler() { 22 // The tab strip should not have any tabs at this point. 23 DCHECK(model_->empty()); 24 model_->RemoveObserver(this); 25} 26 27//////////////////////////////////////////////////////////////////////////////// 28// DefaultTabHandler, TabHandler implementation: 29 30TabStripModel* DefaultTabHandler::GetTabStripModel() const { 31 return model_.get(); 32} 33 34//////////////////////////////////////////////////////////////////////////////// 35// DefaultTabHandler, TabStripModelDelegate implementation: 36 37TabContentsWrapper* DefaultTabHandler::AddBlankTab(bool foreground) { 38 UmaNaclHistogramEnumeration(NEW_TAB_NACL_BASELINE); 39 return delegate_->AsBrowser()->AddBlankTab(foreground); 40} 41 42TabContentsWrapper* DefaultTabHandler::AddBlankTabAt(int index, 43 bool foreground) { 44 return delegate_->AsBrowser()->AddBlankTabAt(index, foreground); 45} 46 47Browser* DefaultTabHandler::CreateNewStripWithContents( 48 TabContentsWrapper* detached_contents, 49 const gfx::Rect& window_bounds, 50 const DockInfo& dock_info, 51 bool maximize) { 52 return delegate_->AsBrowser()->CreateNewStripWithContents(detached_contents, 53 window_bounds, 54 dock_info, 55 maximize); 56} 57 58int DefaultTabHandler::GetDragActions() const { 59 return delegate_->AsBrowser()->GetDragActions(); 60} 61 62TabContentsWrapper* DefaultTabHandler::CreateTabContentsForURL( 63 const GURL& url, 64 const GURL& referrer, 65 Profile* profile, 66 PageTransition::Type transition, 67 bool defer_load, 68 SiteInstance* instance) const { 69 return delegate_->AsBrowser()->CreateTabContentsForURL(url, 70 referrer, 71 profile, 72 transition, 73 defer_load, 74 instance); 75} 76 77bool DefaultTabHandler::CanDuplicateContentsAt(int index) { 78 return delegate_->AsBrowser()->CanDuplicateContentsAt(index); 79} 80 81void DefaultTabHandler::DuplicateContentsAt(int index) { 82 delegate_->AsBrowser()->DuplicateContentsAt(index); 83} 84 85void DefaultTabHandler::CloseFrameAfterDragSession() { 86 delegate_->AsBrowser()->CloseFrameAfterDragSession(); 87} 88 89void DefaultTabHandler::CreateHistoricalTab(TabContentsWrapper* contents) { 90 delegate_->AsBrowser()->CreateHistoricalTab(contents); 91} 92 93bool DefaultTabHandler::RunUnloadListenerBeforeClosing( 94 TabContentsWrapper* contents) { 95 return delegate_->AsBrowser()->RunUnloadListenerBeforeClosing(contents); 96} 97 98bool DefaultTabHandler::CanCloseContentsAt(int index) { 99 return delegate_->AsBrowser()->CanCloseContentsAt(index); 100} 101 102bool DefaultTabHandler::CanBookmarkAllTabs() const { 103 return delegate_->AsBrowser()->CanBookmarkAllTabs(); 104} 105 106void DefaultTabHandler::BookmarkAllTabs() { 107 delegate_->AsBrowser()->BookmarkAllTabs(); 108} 109 110bool DefaultTabHandler::CanCloseTab() const { 111 return delegate_->AsBrowser()->CanCloseTab(); 112} 113 114void DefaultTabHandler::ToggleUseVerticalTabs() { 115 delegate_->AsBrowser()->ToggleUseVerticalTabs(); 116} 117 118bool DefaultTabHandler::CanRestoreTab() { 119 return delegate_->AsBrowser()->CanRestoreTab(); 120} 121 122void DefaultTabHandler::RestoreTab() { 123 delegate_->AsBrowser()->RestoreTab(); 124} 125 126bool DefaultTabHandler::LargeIconsPermitted() const { 127 return delegate_->AsBrowser()->LargeIconsPermitted(); 128} 129 130bool DefaultTabHandler::UseVerticalTabs() const { 131 return delegate_->AsBrowser()->UseVerticalTabs(); 132} 133 134//////////////////////////////////////////////////////////////////////////////// 135// DefaultTabHandler, TabStripModelObserver implementation: 136 137void DefaultTabHandler::TabInsertedAt(TabContentsWrapper* contents, 138 int index, 139 bool foreground) { 140 delegate_->AsBrowser()->TabInsertedAt(contents, index, foreground); 141} 142 143void DefaultTabHandler::TabClosingAt(TabStripModel* tab_strip_model, 144 TabContentsWrapper* contents, 145 int index) { 146 delegate_->AsBrowser()->TabClosingAt(tab_strip_model, contents, index); 147} 148 149void DefaultTabHandler::TabDetachedAt(TabContentsWrapper* contents, int index) { 150 delegate_->AsBrowser()->TabDetachedAt(contents, index); 151} 152 153void DefaultTabHandler::TabDeselected(TabContentsWrapper* contents) { 154 delegate_->AsBrowser()->TabDeselected(contents); 155} 156 157void DefaultTabHandler::TabSelectedAt(TabContentsWrapper* old_contents, 158 TabContentsWrapper* new_contents, 159 int index, 160 bool user_gesture) { 161 delegate_->AsBrowser()->TabSelectedAt(old_contents, 162 new_contents, 163 index, 164 user_gesture); 165} 166 167void DefaultTabHandler::TabMoved(TabContentsWrapper* contents, 168 int from_index, 169 int to_index) { 170 delegate_->AsBrowser()->TabMoved(contents, from_index, to_index); 171} 172 173void DefaultTabHandler::TabReplacedAt(TabStripModel* tab_strip_model, 174 TabContentsWrapper* old_contents, 175 TabContentsWrapper* new_contents, 176 int index) { 177 delegate_->AsBrowser()->TabReplacedAt(tab_strip_model, old_contents, 178 new_contents, index); 179} 180 181void DefaultTabHandler::TabPinnedStateChanged(TabContentsWrapper* contents, 182 int index) { 183 delegate_->AsBrowser()->TabPinnedStateChanged(contents, index); 184} 185 186void DefaultTabHandler::TabStripEmpty() { 187 delegate_->AsBrowser()->TabStripEmpty(); 188} 189 190//////////////////////////////////////////////////////////////////////////////// 191// TabHandler, public: 192 193// static 194TabHandler* TabHandler::CreateTabHandler(TabHandlerDelegate* delegate) { 195 return new DefaultTabHandler(delegate); 196} 197 198