1bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Copyright (c) 2010 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_TAB_STRIP_MODEL_DELEGATE_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_TABS_TAB_STRIP_MODEL_DELEGATE_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/page_transition_types.h" 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Browser; 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass DockInfo; 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass GURL; 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Profile; 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SiteInstance; 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TabContents; 17201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass TabContentsWrapper; 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace gfx { 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Rect; 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/////////////////////////////////////////////////////////////////////////////// 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// TabStripModelDelegate 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// A delegate interface that the TabStripModel uses to perform work that it 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// can't do itself, such as obtain a container HWND for creating new 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// TabContents, creating new TabStripModels for detached tabs, etc. 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// This interface is typically implemented by the controller that instantiates 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// the TabStripModel (in our case the Browser object). 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/////////////////////////////////////////////////////////////////////////////// 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TabStripModelDelegate { 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen enum { 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TAB_MOVE_ACTION = 1, 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TAB_TEAROFF_ACTION = 2 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Adds what the delegate considers to be a blank tab to the model. 42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual TabContentsWrapper* AddBlankTab(bool foreground) = 0; 43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual TabContentsWrapper* AddBlankTabAt(int index, bool foreground) = 0; 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Asks for a new TabStripModel to be created and the given tab contents to 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // be added to it. Its size and position are reflected in |window_bounds|. 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If |dock_info|'s type is other than NONE, the newly created window should 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // be docked as identified by |dock_info|. Returns the Browser object 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // representing the newly created window and tab strip. This does not 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // show the window, it's up to the caller to do so. 51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual Browser* CreateNewStripWithContents(TabContentsWrapper* contents, 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const gfx::Rect& window_bounds, 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const DockInfo& dock_info, 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool maximize) = 0; 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Determines what drag actions are possible for the specified strip. 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual int GetDragActions() const = 0; 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Creates an appropriate TabContents for the given URL. This is handled by 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // the delegate since the TabContents may require special circumstances to 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // exist for it to be constructed (e.g. a parent HWND). 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If |defer_load| is true, the navigation controller doesn't load the url. 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If |instance| is not null, its process is used to render the tab. 64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual TabContentsWrapper* CreateTabContentsForURL( 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& url, 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& referrer, 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Profile* profile, 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PageTransition::Type transition, 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool defer_load, 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SiteInstance* instance) const = 0; 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns whether some contents can be duplicated. 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool CanDuplicateContentsAt(int index) = 0; 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Duplicates the contents at the provided index and places it into its own 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // window. 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void DuplicateContentsAt(int index) = 0; 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Called when a drag session has completed and the frame that initiated the 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // the session should be closed. 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void CloseFrameAfterDragSession() = 0; 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Creates an entry in the historical tab database for the specified 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // TabContents. 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void CreateHistoricalTab(TabContentsWrapper* contents) = 0; 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Runs any unload listeners associated with the specified TabContents before 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // it is closed. If there are unload listeners that need to be run, this 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // function returns true and the TabStripModel will wait before closing the 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // TabContents. If it returns false, there are no unload listeners and the 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // TabStripModel can close the TabContents immediately. 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual bool RunUnloadListenerBeforeClosing(TabContentsWrapper* contents) = 0; 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns true if a tab can be restored. 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool CanRestoreTab() = 0; 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Restores the last closed tab if CanRestoreTab would return true. 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void RestoreTab() = 0; 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns whether some contents can be closed. 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool CanCloseContentsAt(int index) = 0; 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns true if we should allow "bookmark all tabs" in this window; this is 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // true when there is more than one bookmarkable tab open. 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool CanBookmarkAllTabs() const = 0; 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Creates a bookmark folder containing a bookmark for all open tabs. 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void BookmarkAllTabs() = 0; 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns true if any of the tabs can be closed. 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool CanCloseTab() const = 0; 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns true if the vertical tabstrip presentation should be used. 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool UseVerticalTabs() const = 0; 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Toggles the use of the vertical tabstrip. 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void ToggleUseVerticalTabs() = 0; 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns true if the tab strip can use large icons. 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool LargeIconsPermitted() const = 0; 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~TabStripModelDelegate() {} 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_TABS_TAB_STRIP_MODEL_DELEGATE_H_ 127