1// Copyright (c) 2011 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_TABS_DEFAULT_TAB_HANDLER_H_
6#define CHROME_BROWSER_TABS_DEFAULT_TAB_HANDLER_H_
7#pragma once
8
9#include "base/memory/scoped_ptr.h"
10#include "chrome/browser/tabs/tab_handler.h"
11#include "chrome/browser/tabs/tab_strip_model_delegate.h"
12#include "chrome/browser/tabs/tab_strip_model_observer.h"
13
14// A TabHandler implementation that interacts with the default TabStripModel.
15// The intent is that the TabStripModel API is contained at this level, and
16// never propagates beyond to the Browser.
17class DefaultTabHandler : public TabHandler,
18                          public TabStripModelDelegate,
19                          public TabStripModelObserver {
20 public:
21  explicit DefaultTabHandler(TabHandlerDelegate* delegate);
22  virtual ~DefaultTabHandler();
23
24  // Overridden from TabHandler:
25  virtual TabStripModel* GetTabStripModel() const;
26
27  // Overridden from TabStripModelDelegate:
28  virtual TabContentsWrapper* AddBlankTab(bool foreground);
29  virtual TabContentsWrapper* AddBlankTabAt(int index, bool foreground);
30  virtual Browser* CreateNewStripWithContents(
31      TabContentsWrapper* detached_contents,
32      const gfx::Rect& window_bounds,
33      const DockInfo& dock_info,
34      bool maximize);
35  virtual int GetDragActions() const;
36  virtual TabContentsWrapper* CreateTabContentsForURL(
37      const GURL& url,
38      const GURL& referrer,
39      Profile* profile,
40      PageTransition::Type transition,
41      bool defer_load,
42      SiteInstance* instance) const;
43  virtual bool CanDuplicateContentsAt(int index);
44  virtual void DuplicateContentsAt(int index);
45  virtual void CloseFrameAfterDragSession();
46  virtual void CreateHistoricalTab(TabContentsWrapper* contents);
47  virtual bool RunUnloadListenerBeforeClosing(TabContentsWrapper* contents);
48  virtual bool CanCloseContentsAt(int index);
49  virtual bool CanBookmarkAllTabs() const;
50  virtual void BookmarkAllTabs();
51  virtual bool CanCloseTab() const;
52  virtual void ToggleUseVerticalTabs();
53  virtual bool CanRestoreTab();
54  virtual void RestoreTab();
55  virtual bool LargeIconsPermitted() const;
56  virtual bool UseVerticalTabs() const;
57
58  // Overridden from TabStripModelObserver:
59  virtual void TabInsertedAt(TabContentsWrapper* contents,
60                             int index,
61                             bool foreground);
62  virtual void TabClosingAt(TabStripModel* tab_strip_model,
63                            TabContentsWrapper* contents,
64                            int index);
65  virtual void TabDetachedAt(TabContentsWrapper* contents, int index);
66  virtual void TabDeselected(TabContentsWrapper* contents);
67  virtual void TabSelectedAt(TabContentsWrapper* old_contents,
68                             TabContentsWrapper* new_contents,
69                             int index,
70                             bool user_gesture);
71  virtual void TabMoved(TabContentsWrapper* contents,
72                        int from_index,
73                        int to_index);
74  virtual void TabReplacedAt(TabStripModel* tab_strip_model,
75                             TabContentsWrapper* old_contents,
76                             TabContentsWrapper* new_contents,
77                             int index);
78  virtual void TabPinnedStateChanged(TabContentsWrapper* contents, int index);
79  virtual void TabStripEmpty();
80
81 private:
82  TabHandlerDelegate* delegate_;
83
84  scoped_ptr<TabStripModel> model_;
85
86  DISALLOW_COPY_AND_ASSIGN(DefaultTabHandler);
87};
88
89#endif  // CHROME_BROWSER_TABS_DEFAULT_TAB_HANDLER_H_
90
91