sidebar_container.h revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
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_SIDEBAR_SIDEBAR_CONTAINER_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_SIDEBAR_SIDEBAR_CONTAINER_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/scoped_ptr.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/string16.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/tab_contents/tab_contents_delegate.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass BrowserWindow; 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Profile; 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass RenderViewHost; 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SkBitmap; 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TabContents; 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/////////////////////////////////////////////////////////////////////////////// 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// SidebarContainer 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Stores one particular sidebar state: sidebar's content, its content id, 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// tab it is linked to, mini tab icon, title etc. 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SidebarContainer 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : public TabContentsDelegate { 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Interface to implement to listen for sidebar update notification. 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen class Delegate { 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Delegate() {} 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~Delegate() {} 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void UpdateSidebar(SidebarContainer* host) = 0; 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(Delegate); 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SidebarContainer(TabContents* tab, const std::string& content_id, 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Delegate* delegate); 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~SidebarContainer(); 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Called right before destroying this sidebar. 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Does all the necessary cleanup. 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SidebarClosing(); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns sidebar's content id. 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& content_id() const { return content_id_; } 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns TabContents sidebar is linked to. 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents() const { return tab_; } 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns sidebar's TabContents. 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* sidebar_contents() const { return sidebar_contents_.get(); } 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Accessor for the badge text. 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const string16& badge_text() const { return badge_text_; } 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Accessor for the icon. 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const SkBitmap& icon() const { return *icon_; } 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Accessor for the title. 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const string16& title() const { return title_; } 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Functions supporting chrome.experimental.sidebar API. 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Notifies hosting window that this sidebar was expanded. 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Show(); 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Notifies hosting window that this sidebar was expanded. 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Expand(); 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Notifies hosting window that this sidebar was collapsed. 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Collapse(); 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Navigates sidebar contents to the |url|. 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Navigate(const GURL& url); 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Changes sidebar's badge text. 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SetBadgeText(const string16& badge_text); 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Changes sidebar's icon. 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SetIcon(const SkBitmap& bitmap); 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Changes sidebar's title. 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SetTitle(const string16& title); 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Overridden from TabContentsDelegate. 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OpenURLFromTab(TabContents* source, 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& url, 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& referrer, 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WindowOpenDisposition disposition, 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PageTransition::Type transition) {} 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void NavigationStateChanged(const TabContents* source, 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen unsigned changed_flags) {} 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void AddNewContents(TabContents* source, 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* new_contents, 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WindowOpenDisposition disposition, 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const gfx::Rect& initial_pos, 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool user_gesture) {} 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void ActivateContents(TabContents* contents) {} 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void DeactivateContents(TabContents* contents) {} 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void LoadingStateChanged(TabContents* source) {} 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void CloseContents(TabContents* source) {} 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void MoveContents(TabContents* source, const gfx::Rect& pos) {} 10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual bool IsPopup(const TabContents* source) const; 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void URLStarredChanged(TabContents* source, bool starred) {} 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void UpdateTargetURL(TabContents* source, const GURL& url) {} 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void ToolbarSizeChanged(TabContents* source, bool is_animating) {} 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Contents of the tab this sidebar is linked to. 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_; 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Sidebar's content id. There might be more than one sidebar liked to each 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // particular tab and they are identified by their unique content id. 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string content_id_; 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Sidebar update notification listener. 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Delegate* delegate_; 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Sidebar contents. 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<TabContents> sidebar_contents_; 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Badge text displayed on the sidebar's mini tab. 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 badge_text_; 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Icon displayed on the sidebar's mini tab. 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<SkBitmap> icon_; 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Sidebar's title, displayed as a tooltip for sidebar's mini tab. 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 title_; 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(SidebarContainer); 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_SIDEBAR_SIDEBAR_CONTAINER_H_ 139