| Index: chrome/browser/sidebar/sidebar_manager.cc
|
| ===================================================================
|
| --- chrome/browser/sidebar/sidebar_manager.cc (revision 74134)
|
| +++ chrome/browser/sidebar/sidebar_manager.cc (working copy)
|
| @@ -10,8 +10,9 @@
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/extensions/extension_sidebar_api.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/sidebar/sidebar_container.h"
|
| #include "chrome/browser/tab_contents/tab_contents.h"
|
| -#include "chrome/browser/sidebar/sidebar_container.h"
|
| +#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/notification_service.h"
|
| #include "googleurl/src/gurl.h"
|
| @@ -37,8 +38,27 @@
|
| SidebarManager::SidebarManager() {
|
| }
|
|
|
| +// SidebarModel overrides.
|
| +
|
| +std::vector<SidebarContainer*> SidebarManager::GetAllSidebarsFor(
|
| + TabContentsWrapper* tab) {
|
| + std::vector<SidebarContainer*> sidebars;
|
| + TabToSidebarHostMap::const_iterator it = tab_to_sidebar_host_.find(tab);
|
| + if (it != tab_to_sidebar_host_.end()) {
|
| + const ContentIdToSidebarHostMap& hosts =
|
| + it->second.content_id_to_sidebar_host;
|
| +
|
| + sidebars.reserve(hosts.size());
|
| + for (ContentIdToSidebarHostMap::const_iterator it = hosts.begin();
|
| + it != hosts.end(); ++it) {
|
| + sidebars.push_back(it->second);
|
| + }
|
| + }
|
| + return sidebars;
|
| +}
|
| +
|
| SidebarContainer* SidebarManager::GetActiveSidebarContainerFor(
|
| - TabContents* tab) {
|
| + TabContentsWrapper* tab) {
|
| TabToSidebarHostMap::iterator it = tab_to_sidebar_host_.find(tab);
|
| if (it == tab_to_sidebar_host_.end())
|
| return NULL;
|
| @@ -51,7 +71,7 @@
|
| }
|
|
|
| SidebarContainer* SidebarManager::GetSidebarContainerFor(
|
| - TabContents* tab, const std::string& content_id) {
|
| + TabContentsWrapper* tab, const std::string& content_id) {
|
| DCHECK(!content_id.empty());
|
| TabToSidebarHostMap::iterator it = tab_to_sidebar_host_.find(tab);
|
| if (it == tab_to_sidebar_host_.end())
|
| @@ -64,7 +84,7 @@
|
| }
|
|
|
| TabContents* SidebarManager::GetSidebarTabContents(
|
| - TabContents* tab, const std::string& content_id) {
|
| + TabContentsWrapper* tab, const std::string& content_id) {
|
| DCHECK(!content_id.empty());
|
| SidebarContainer* sidebar_host = GetSidebarContainerFor(tab, content_id);
|
| if (!sidebar_host)
|
| @@ -88,19 +108,32 @@
|
| if (was_active_host != NULL) {
|
| ExtensionSidebarEventRouter::OnStateChanged(
|
| was_active_sidebar_contents->profile(),
|
| - was_active_host->tab_contents(), was_active_host->content_id(),
|
| + was_active_host->tab(), was_active_host->content_id(),
|
| extension_sidebar_constants::kShownState);
|
| }
|
|
|
| if (active_host != NULL) {
|
| ExtensionSidebarEventRouter::OnStateChanged(
|
| active_sidebar_contents->profile(),
|
| - active_host->tab_contents(), active_host->content_id(),
|
| + active_host->tab(), active_host->content_id(),
|
| extension_sidebar_constants::kActiveState);
|
| }
|
| }
|
|
|
| -void SidebarManager::ShowSidebar(TabContents* tab,
|
| +void SidebarManager::ToggleSidebar(TabContentsWrapper* tab,
|
| + const std::string& content_id) {
|
| + DCHECK(!content_id.empty());
|
| + TabToSidebarHostMap::iterator it = tab_to_sidebar_host_.find(tab);
|
| + if (it == tab_to_sidebar_host_.end())
|
| + return;
|
| + // If it's not active, expand it.
|
| + if (it->second.active_content_id != content_id)
|
| + ExpandSidebar(tab, content_id);
|
| + else
|
| + CollapseSidebar(tab, content_id);
|
| +}
|
| +
|
| +void SidebarManager::ShowSidebar(TabContentsWrapper* tab,
|
| const std::string& content_id) {
|
| DCHECK(!content_id.empty());
|
| SidebarContainer* host = GetSidebarContainerFor(tab, content_id);
|
| @@ -119,7 +152,7 @@
|
| extension_sidebar_constants::kShownState);
|
| }
|
|
|
| -void SidebarManager::ExpandSidebar(TabContents* tab,
|
| +void SidebarManager::ExpandSidebar(TabContentsWrapper* tab,
|
| const std::string& content_id) {
|
| DCHECK(!content_id.empty());
|
| TabToSidebarHostMap::iterator it = tab_to_sidebar_host_.find(tab);
|
| @@ -130,7 +163,6 @@
|
| return;
|
|
|
| SidebarContainer* host = GetSidebarContainerFor(tab, content_id);
|
| - DCHECK(host);
|
| if (!host)
|
| return;
|
| it->second.active_content_id = content_id;
|
| @@ -138,7 +170,7 @@
|
| host->Expand();
|
| }
|
|
|
| -void SidebarManager::CollapseSidebar(TabContents* tab,
|
| +void SidebarManager::CollapseSidebar(TabContentsWrapper* tab,
|
| const std::string& content_id) {
|
| DCHECK(!content_id.empty());
|
| TabToSidebarHostMap::iterator it = tab_to_sidebar_host_.find(tab);
|
| @@ -149,7 +181,6 @@
|
| return;
|
|
|
| SidebarContainer* host = GetSidebarContainerFor(tab, content_id);
|
| - DCHECK(host);
|
| if (!host)
|
| return;
|
| it->second.active_content_id.clear();
|
| @@ -157,7 +188,7 @@
|
| host->Collapse();
|
| }
|
|
|
| -void SidebarManager::HideSidebar(TabContents* tab,
|
| +void SidebarManager::HideSidebar(TabContentsWrapper* tab,
|
| const std::string& content_id) {
|
| DCHECK(!content_id.empty());
|
| TabToSidebarHostMap::iterator it = tab_to_sidebar_host_.find(tab);
|
| @@ -167,7 +198,8 @@
|
| it->second.active_content_id.clear();
|
|
|
| SidebarContainer* host = GetSidebarContainerFor(tab, content_id);
|
| - DCHECK(host);
|
| + if (!host)
|
| + return;
|
|
|
| UnregisterSidebarContainerFor(tab, content_id);
|
|
|
| @@ -176,7 +208,7 @@
|
| extension_sidebar_constants::kHiddenState);
|
| }
|
|
|
| -void SidebarManager::NavigateSidebar(TabContents* tab,
|
| +void SidebarManager::NavigateSidebar(TabContentsWrapper* tab,
|
| const std::string& content_id,
|
| const GURL& url) {
|
| DCHECK(!content_id.empty());
|
| @@ -188,7 +220,7 @@
|
| }
|
|
|
| void SidebarManager::SetSidebarBadgeText(
|
| - TabContents* tab, const std::string& content_id,
|
| + TabContentsWrapper* tab, const std::string& content_id,
|
| const string16& badge_text) {
|
| SidebarContainer* host = GetSidebarContainerFor(tab, content_id);
|
| if (!host)
|
| @@ -197,7 +229,7 @@
|
| }
|
|
|
| void SidebarManager::SetSidebarIcon(
|
| - TabContents* tab, const std::string& content_id,
|
| + TabContentsWrapper* tab, const std::string& content_id,
|
| const SkBitmap& bitmap) {
|
| SidebarContainer* host = GetSidebarContainerFor(tab, content_id);
|
| if (!host)
|
| @@ -206,7 +238,7 @@
|
| }
|
|
|
| void SidebarManager::SetSidebarTitle(
|
| - TabContents* tab, const std::string& content_id,
|
| + TabContentsWrapper* tab, const std::string& content_id,
|
| const string16& title) {
|
| SidebarContainer* host = GetSidebarContainerFor(tab, content_id);
|
| if (!host)
|
| @@ -214,29 +246,45 @@
|
| host->SetTitle(title);
|
| }
|
|
|
| +// SidebarManager, public.
|
| +
|
| +bool SidebarManager::IsAnySidebarDefinedFor(TabContentsWrapper* tab) {
|
| + TabToSidebarHostMap::const_iterator it = tab_to_sidebar_host_.find(tab);
|
| + if (it == tab_to_sidebar_host_.end())
|
| + return false;
|
| + return !it->second.content_id_to_sidebar_host.empty();
|
| +}
|
| +
|
| SidebarManager::~SidebarManager() {
|
| DCHECK(tab_to_sidebar_host_.empty());
|
| DCHECK(sidebar_host_to_tab_.empty());
|
| }
|
|
|
| +// NotificationObserver overrides.
|
| +
|
| void SidebarManager::Observe(NotificationType type,
|
| const NotificationSource& source,
|
| const NotificationDetails& details) {
|
| if (type == NotificationType::TAB_CONTENTS_DESTROYED) {
|
| - HideAllSidebars(Source<TabContents>(source).ptr());
|
| + TabContents* tab_contents = Source<TabContents>(source).ptr();
|
| + HideAllSidebars(FindTabContentsWrapperFor(tab_contents));
|
| } else {
|
| NOTREACHED() << "Got a notification we didn't register for!";
|
| }
|
| }
|
|
|
| -void SidebarManager::UpdateSidebar(SidebarContainer* host) {
|
| +// SidebarContainer::Delegate overrides.
|
| +
|
| +void SidebarManager::UpdateSidebar(SidebarChangedDetails* details) {
|
| NotificationService::current()->Notify(
|
| NotificationType::SIDEBAR_CHANGED,
|
| Source<SidebarManager>(this),
|
| - Details<SidebarContainer>(host));
|
| + Details<SidebarChangedDetails>(details));
|
| }
|
|
|
| -void SidebarManager::HideAllSidebars(TabContents* tab) {
|
| +// SidebarManager, private.
|
| +
|
| +void SidebarManager::HideAllSidebars(TabContentsWrapper* tab) {
|
| TabToSidebarHostMap::iterator tab_it = tab_to_sidebar_host_.find(tab);
|
| if (tab_it == tab_to_sidebar_host_.end())
|
| return;
|
| @@ -266,22 +314,32 @@
|
| return NULL;
|
| }
|
|
|
| +TabContentsWrapper* SidebarManager::FindTabContentsWrapperFor(
|
| + TabContents* tab_contents) {
|
| + for (TabToSidebarHostMap::const_iterator it = tab_to_sidebar_host_.begin();
|
| + it != tab_to_sidebar_host_.end(); ++it) {
|
| + if (it->first->tab_contents() == tab_contents)
|
| + return it->first;
|
| + }
|
| + return NULL;
|
| +}
|
| +
|
| void SidebarManager::RegisterSidebarContainerFor(
|
| - TabContents* tab, SidebarContainer* sidebar_host) {
|
| + TabContentsWrapper* tab, SidebarContainer* sidebar_host) {
|
| DCHECK(!GetSidebarContainerFor(tab, sidebar_host->content_id()));
|
|
|
| // If it's a first sidebar for this tab, register destroy notification.
|
| if (tab_to_sidebar_host_.find(tab) == tab_to_sidebar_host_.end()) {
|
| registrar_.Add(this,
|
| NotificationType::TAB_CONTENTS_DESTROYED,
|
| - Source<TabContents>(tab));
|
| + Source<TabContents>(tab->tab_contents()));
|
| }
|
|
|
| BindSidebarHost(tab, sidebar_host);
|
| }
|
|
|
| void SidebarManager::UnregisterSidebarContainerFor(
|
| - TabContents* tab, const std::string& content_id) {
|
| + TabContentsWrapper* tab, const std::string& content_id) {
|
| SidebarContainer* host = GetSidebarContainerFor(tab, content_id);
|
| DCHECK(host);
|
| if (!host)
|
| @@ -293,7 +351,7 @@
|
| if (tab_to_sidebar_host_.find(tab) == tab_to_sidebar_host_.end()) {
|
| registrar_.Remove(this,
|
| NotificationType::TAB_CONTENTS_DESTROYED,
|
| - Source<TabContents>(tab));
|
| + Source<TabContents>(tab->tab_contents()));
|
| }
|
|
|
| // Issue tab closing event post unbound.
|
| @@ -302,7 +360,7 @@
|
| delete host;
|
| }
|
|
|
| -void SidebarManager::BindSidebarHost(TabContents* tab,
|
| +void SidebarManager::BindSidebarHost(TabContentsWrapper* tab,
|
| SidebarContainer* sidebar_host) {
|
| const std::string& content_id = sidebar_host->content_id();
|
|
|
| @@ -315,7 +373,7 @@
|
| sidebar_host_to_tab_[sidebar_host] = tab;
|
| }
|
|
|
| -void SidebarManager::UnbindSidebarHost(TabContents* tab,
|
| +void SidebarManager::UnbindSidebarHost(TabContentsWrapper* tab,
|
| SidebarContainer* sidebar_host) {
|
| const std::string& content_id = sidebar_host->content_id();
|
|
|
|
|