1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_TABS_DEFAULT_TAB_HANDLER_H_
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_TABS_DEFAULT_TAB_HANDLER_H_
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/tabs/tab_handler.h"
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/tabs/tab_strip_model_delegate.h"
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/tabs/tab_strip_model_observer.h"
13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// A TabHandler implementation that interacts with the default TabStripModel.
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// The intent is that the TabStripModel API is contained at this level, and
16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// never propagates beyond to the Browser.
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass DefaultTabHandler : public TabHandler,
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                          public TabStripModelDelegate,
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                          public TabStripModelObserver {
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit DefaultTabHandler(TabHandlerDelegate* delegate);
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~DefaultTabHandler();
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Overridden from TabHandler:
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual TabStripModel* GetTabStripModel() const;
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Overridden from TabStripModelDelegate:
28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual TabContentsWrapper* AddBlankTab(bool foreground);
29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual TabContentsWrapper* AddBlankTabAt(int index, bool foreground);
30201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual Browser* CreateNewStripWithContents(
31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      TabContentsWrapper* detached_contents,
32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      const gfx::Rect& window_bounds,
33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      const DockInfo& dock_info,
34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      bool maximize);
35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual int GetDragActions() const;
36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual TabContentsWrapper* CreateTabContentsForURL(
37201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      const GURL& url,
38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      const GURL& referrer,
39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      Profile* profile,
40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      PageTransition::Type transition,
41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      bool defer_load,
42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      SiteInstance* instance) const;
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual bool CanDuplicateContentsAt(int index);
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void DuplicateContentsAt(int index);
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void CloseFrameAfterDragSession();
46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void CreateHistoricalTab(TabContentsWrapper* contents);
47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual bool RunUnloadListenerBeforeClosing(TabContentsWrapper* contents);
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual bool CanCloseContentsAt(int index);
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual bool CanBookmarkAllTabs() const;
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void BookmarkAllTabs();
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual bool CanCloseTab() const;
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void ToggleUseVerticalTabs();
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual bool CanRestoreTab();
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void RestoreTab();
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual bool LargeIconsPermitted() const;
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual bool UseVerticalTabs() const;
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Overridden from TabStripModelObserver:
59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabInsertedAt(TabContentsWrapper* contents,
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             int index,
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             bool foreground);
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void TabClosingAt(TabStripModel* tab_strip_model,
63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                            TabContentsWrapper* contents,
64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                            int index);
65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabDetachedAt(TabContentsWrapper* contents, int index);
66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void TabDeselected(TabContentsWrapper* contents);
67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabSelectedAt(TabContentsWrapper* old_contents,
68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                             TabContentsWrapper* new_contents,
69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             int index,
70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             bool user_gesture);
71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabMoved(TabContentsWrapper* contents,
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                        int from_index,
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                        int to_index);
7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void TabReplacedAt(TabStripModel* tab_strip_model,
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                             TabContentsWrapper* old_contents,
76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                             TabContentsWrapper* new_contents,
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             int index);
78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabPinnedStateChanged(TabContentsWrapper* contents, int index);
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void TabStripEmpty();
80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TabHandlerDelegate* delegate_;
83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<TabStripModel> model_;
85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(DefaultTabHandler);
87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif  // CHROME_BROWSER_TABS_DEFAULT_TAB_HANDLER_H_
90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
91