// Copyright (c) 2011 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. #ifndef CHROME_BROWSER_SIDEBAR_SIDEBAR_CONTAINER_H_ #define CHROME_BROWSER_SIDEBAR_SIDEBAR_CONTAINER_H_ #include <string> #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "base/string16.h" #include "chrome/browser/extensions/image_loading_tracker.h" #include "content/browser/tab_contents/tab_contents_delegate.h" class BrowserWindow; class Profile; class RenderViewHost; class SkBitmap; class TabContents; /////////////////////////////////////////////////////////////////////////////// // SidebarContainer // // Stores one particular sidebar state: sidebar's content, its content id, // tab it is linked to, mini tab icon, title etc. // class SidebarContainer : public TabContentsDelegate, private ImageLoadingTracker::Observer { public: // Interface to implement to listen for sidebar update notification. class Delegate { public: Delegate() {} virtual ~Delegate() {} virtual void UpdateSidebar(SidebarContainer* host) = 0; private: DISALLOW_COPY_AND_ASSIGN(Delegate); }; SidebarContainer(TabContents* tab, const std::string& content_id, Delegate* delegate); virtual ~SidebarContainer(); // Called right before destroying this sidebar. // Does all the necessary cleanup. void SidebarClosing(); // Sets default sidebar parameters, as specified in extension manifest. void LoadDefaults(); // Returns sidebar's content id. const std::string& content_id() const { return content_id_; } // Returns TabContents sidebar is linked to. TabContents* tab_contents() const { return tab_; } // Returns sidebar's TabContents. TabContents* sidebar_contents() const { return sidebar_contents_.get(); } // Accessor for the badge text. const string16& badge_text() const { return badge_text_; } // Accessor for the icon. const SkBitmap& icon() const { return *icon_; } // Accessor for the title. const string16& title() const { return title_; } // Functions supporting chrome.experimental.sidebar API. // Notifies hosting window that this sidebar was expanded. void Show(); // Notifies hosting window that this sidebar was expanded. void Expand(); // Notifies hosting window that this sidebar was collapsed. void Collapse(); // Navigates sidebar contents to the |url|. void Navigate(const GURL& url); // Changes sidebar's badge text. void SetBadgeText(const string16& badge_text); // Changes sidebar's icon. void SetIcon(const SkBitmap& bitmap); // Changes sidebar's title. void SetTitle(const string16& title); private: // Overridden from TabContentsDelegate. virtual void OpenURLFromTab(TabContents* source, const GURL& url, const GURL& referrer, WindowOpenDisposition disposition, PageTransition::Type transition) {} virtual void NavigationStateChanged(const TabContents* source, unsigned changed_flags) {} virtual void AddNewContents(TabContents* source, TabContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture) {} virtual void ActivateContents(TabContents* contents) {} virtual void DeactivateContents(TabContents* contents) {} virtual void LoadingStateChanged(TabContents* source) {} virtual void CloseContents(TabContents* source) {} virtual void MoveContents(TabContents* source, const gfx::Rect& pos) {} virtual bool IsPopup(const TabContents* source) const; virtual void UpdateTargetURL(TabContents* source, const GURL& url) {} // Overridden from ImageLoadingTracker::Observer. virtual void OnImageLoaded(SkBitmap* image, const ExtensionResource& resource, int index); // Returns an extension this sidebar belongs to. const Extension* GetExtension() const; // Contents of the tab this sidebar is linked to. TabContents* tab_; // Sidebar's content id. There might be more than one sidebar liked to each // particular tab and they are identified by their unique content id. const std::string content_id_; // Sidebar update notification listener. Delegate* delegate_; // Sidebar contents. scoped_ptr<TabContents> sidebar_contents_; // Badge text displayed on the sidebar's mini tab. string16 badge_text_; // Icon displayed on the sidebar's mini tab. scoped_ptr<SkBitmap> icon_; // Sidebar's title, displayed as a tooltip for sidebar's mini tab. string16 title_; // On the first expand sidebar will be automatically navigated to the default // page (specified in the extension manifest), but only if the extension has // not explicitly navigated it yet. This variable is set to false on the first // sidebar navigation. bool navigate_to_default_page_on_expand_; // Since the default icon (specified in the extension manifest) is loaded // asynchronously, sidebar icon can already be set by the extension // by the time it's loaded. This variable tracks whether the loaded default // icon should be used or discarded. bool use_default_icon_; // Helper to load icons from extension asynchronously. scoped_ptr<ImageLoadingTracker> image_loading_tracker_; DISALLOW_COPY_AND_ASSIGN(SidebarContainer); }; #endif // CHROME_BROWSER_SIDEBAR_SIDEBAR_CONTAINER_H_