// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/metrics/nacl_histogram.h"
#include "chrome/browser/tabs/default_tab_handler.h"
#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/browser/ui/browser.h"
////////////////////////////////////////////////////////////////////////////////
// DefaultTabHandler, public:
DefaultTabHandler::DefaultTabHandler(TabHandlerDelegate* delegate)
: delegate_(delegate),
ALLOW_THIS_IN_INITIALIZER_LIST(
model_(new TabStripModel(this, delegate->GetProfile()))) {
UmaNaclHistogramEnumeration(FIRST_TAB_NACL_BASELINE);
model_->AddObserver(this);
}
DefaultTabHandler::~DefaultTabHandler() {
// The tab strip should not have any tabs at this point.
DCHECK(model_->empty());
model_->RemoveObserver(this);
}
////////////////////////////////////////////////////////////////////////////////
// DefaultTabHandler, TabHandler implementation:
TabStripModel* DefaultTabHandler::GetTabStripModel() const {
return model_.get();
}
////////////////////////////////////////////////////////////////////////////////
// DefaultTabHandler, TabStripModelDelegate implementation:
TabContentsWrapper* DefaultTabHandler::AddBlankTab(bool foreground) {
UmaNaclHistogramEnumeration(NEW_TAB_NACL_BASELINE);
return delegate_->AsBrowser()->AddBlankTab(foreground);
}
TabContentsWrapper* DefaultTabHandler::AddBlankTabAt(int index,
bool foreground) {
return delegate_->AsBrowser()->AddBlankTabAt(index, foreground);
}
Browser* DefaultTabHandler::CreateNewStripWithContents(
TabContentsWrapper* detached_contents,
const gfx::Rect& window_bounds,
const DockInfo& dock_info,
bool maximize) {
return delegate_->AsBrowser()->CreateNewStripWithContents(detached_contents,
window_bounds,
dock_info,
maximize);
}
int DefaultTabHandler::GetDragActions() const {
return delegate_->AsBrowser()->GetDragActions();
}
TabContentsWrapper* DefaultTabHandler::CreateTabContentsForURL(
const GURL& url,
const GURL& referrer,
Profile* profile,
PageTransition::Type transition,
bool defer_load,
SiteInstance* instance) const {
return delegate_->AsBrowser()->CreateTabContentsForURL(url,
referrer,
profile,
transition,
defer_load,
instance);
}
bool DefaultTabHandler::CanDuplicateContentsAt(int index) {
return delegate_->AsBrowser()->CanDuplicateContentsAt(index);
}
void DefaultTabHandler::DuplicateContentsAt(int index) {
delegate_->AsBrowser()->DuplicateContentsAt(index);
}
void DefaultTabHandler::CloseFrameAfterDragSession() {
delegate_->AsBrowser()->CloseFrameAfterDragSession();
}
void DefaultTabHandler::CreateHistoricalTab(TabContentsWrapper* contents) {
delegate_->AsBrowser()->CreateHistoricalTab(contents);
}
bool DefaultTabHandler::RunUnloadListenerBeforeClosing(
TabContentsWrapper* contents) {
return delegate_->AsBrowser()->RunUnloadListenerBeforeClosing(contents);
}
bool DefaultTabHandler::CanCloseContentsAt(int index) {
return delegate_->AsBrowser()->CanCloseContentsAt(index);
}
bool DefaultTabHandler::CanBookmarkAllTabs() const {
return delegate_->AsBrowser()->CanBookmarkAllTabs();
}
void DefaultTabHandler::BookmarkAllTabs() {
delegate_->AsBrowser()->BookmarkAllTabs();
}
bool DefaultTabHandler::CanCloseTab() const {
return delegate_->AsBrowser()->CanCloseTab();
}
void DefaultTabHandler::ToggleUseVerticalTabs() {
delegate_->AsBrowser()->ToggleUseVerticalTabs();
}
bool DefaultTabHandler::CanRestoreTab() {
return delegate_->AsBrowser()->CanRestoreTab();
}
void DefaultTabHandler::RestoreTab() {
delegate_->AsBrowser()->RestoreTab();
}
bool DefaultTabHandler::LargeIconsPermitted() const {
return delegate_->AsBrowser()->LargeIconsPermitted();
}
bool DefaultTabHandler::UseVerticalTabs() const {
return delegate_->AsBrowser()->UseVerticalTabs();
}
////////////////////////////////////////////////////////////////////////////////
// DefaultTabHandler, TabStripModelObserver implementation:
void DefaultTabHandler::TabInsertedAt(TabContentsWrapper* contents,
int index,
bool foreground) {
delegate_->AsBrowser()->TabInsertedAt(contents, index, foreground);
}
void DefaultTabHandler::TabClosingAt(TabStripModel* tab_strip_model,
TabContentsWrapper* contents,
int index) {
delegate_->AsBrowser()->TabClosingAt(tab_strip_model, contents, index);
}
void DefaultTabHandler::TabDetachedAt(TabContentsWrapper* contents, int index) {
delegate_->AsBrowser()->TabDetachedAt(contents, index);
}
void DefaultTabHandler::TabDeselected(TabContentsWrapper* contents) {
delegate_->AsBrowser()->TabDeselected(contents);
}
void DefaultTabHandler::TabSelectedAt(TabContentsWrapper* old_contents,
TabContentsWrapper* new_contents,
int index,
bool user_gesture) {
delegate_->AsBrowser()->TabSelectedAt(old_contents,
new_contents,
index,
user_gesture);
}
void DefaultTabHandler::TabMoved(TabContentsWrapper* contents,
int from_index,
int to_index) {
delegate_->AsBrowser()->TabMoved(contents, from_index, to_index);
}
void DefaultTabHandler::TabReplacedAt(TabStripModel* tab_strip_model,
TabContentsWrapper* old_contents,
TabContentsWrapper* new_contents,
int index) {
delegate_->AsBrowser()->TabReplacedAt(tab_strip_model, old_contents,
new_contents, index);
}
void DefaultTabHandler::TabPinnedStateChanged(TabContentsWrapper* contents,
int index) {
delegate_->AsBrowser()->TabPinnedStateChanged(contents, index);
}
void DefaultTabHandler::TabStripEmpty() {
delegate_->AsBrowser()->TabStripEmpty();
}
////////////////////////////////////////////////////////////////////////////////
// TabHandler, public:
// static
TabHandler* TabHandler::CreateTabHandler(TabHandlerDelegate* delegate) {
return new DefaultTabHandler(delegate);
}