summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui
diff options
context:
space:
mode:
authoryfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-26 05:04:23 +0000
committeryfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-26 05:04:23 +0000
commitafefa74e620c058d74737a702b1408f18b299da4 (patch)
treeb3e8df549761631887bcbd61cf6619adf09a243e /chrome/browser/ui
parent3e7a55761b611940e04a50f1a1b6c8b3233b2937 (diff)
downloadchromium_src-afefa74e620c058d74737a702b1408f18b299da4.zip
chromium_src-afefa74e620c058d74737a702b1408f18b299da4.tar.gz
chromium_src-afefa74e620c058d74737a702b1408f18b299da4.tar.bz2
Remove direct dependency from SessionModelAssociator on Browser/BrowserList.
This is acheived by having Browser implement SyncedBrowserDelegate BUG= TEST= Review URL: http://codereview.chromium.org/7399026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@94038 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui')
-rw-r--r--chrome/browser/ui/browser.cc4
-rw-r--r--chrome/browser/ui/browser.h8
-rw-r--r--chrome/browser/ui/browser_synced_window_delegate.cc80
-rw-r--r--chrome/browser/ui/browser_synced_window_delegate.h41
4 files changed, 133 insertions, 0 deletions
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index d92651e..dfb70e7 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -80,6 +80,7 @@
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_navigator.h"
+#include "chrome/browser/ui/browser_synced_window_delegate.h"
#include "chrome/browser/ui/browser_tab_restore_service_delegate.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/find_bar/find_bar.h"
@@ -251,6 +252,9 @@ Browser::Browser(Type type, Profile* profile)
ALLOW_THIS_IN_INITIALIZER_LIST(
tab_restore_service_delegate_(
new BrowserTabRestoreServiceDelegate(this))),
+ ALLOW_THIS_IN_INITIALIZER_LIST(
+ synced_window_delegate_(
+ new BrowserSyncedWindowDelegate(this))),
bookmark_bar_state_(BookmarkBar::HIDDEN) {
registrar_.Add(this, content::NOTIFICATION_SSL_VISIBLE_STATE_CHANGED,
NotificationService::AllSources());
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index 657f562..b30d8e4 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -45,6 +45,7 @@
#include "content/common/page_zoom.h"
#include "ui/gfx/rect.h"
+class BrowserSyncedWindowDelegate;
class BrowserTabRestoreServiceDelegate;
class BrowserWindow;
class Extension;
@@ -213,6 +214,9 @@ class Browser : public TabHandlerDelegate,
BrowserTabRestoreServiceDelegate* tab_restore_service_delegate() {
return tab_restore_service_delegate_.get();
}
+ BrowserSyncedWindowDelegate* synced_window_delegate() {
+ return synced_window_delegate_.get();
+ }
// Get the FindBarController for this browser, creating it if it does not
// yet exist.
@@ -362,6 +366,7 @@ class Browser : public TabHandlerDelegate,
int tab_count() const;
int active_index() const;
int GetIndexOfController(const NavigationController* controller) const;
+
// TODO(dpapad): Rename to GetActiveTabContentsWrapper().
TabContentsWrapper* GetSelectedTabContentsWrapper() const;
TabContentsWrapper* GetTabContentsWrapperAt(int index) const;
@@ -1261,6 +1266,9 @@ class Browser : public TabHandlerDelegate,
// Helper which implements the TabRestoreServiceDelegate interface.
scoped_ptr<BrowserTabRestoreServiceDelegate> tab_restore_service_delegate_;
+ // Helper which implements the SyncedWindowDelegate interface.
+ scoped_ptr<BrowserSyncedWindowDelegate> synced_window_delegate_;
+
scoped_ptr<InstantController> instant_;
scoped_ptr<InstantUnloadHandler> instant_unload_handler_;
diff --git a/chrome/browser/ui/browser_synced_window_delegate.cc b/chrome/browser/ui/browser_synced_window_delegate.cc
new file mode 100644
index 0000000..d9a0947
--- /dev/null
+++ b/chrome/browser/ui/browser_synced_window_delegate.cc
@@ -0,0 +1,80 @@
+// 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.
+
+#include "chrome/browser/ui/browser_synced_window_delegate.h"
+
+#include <set>
+
+#include "chrome/browser/sessions/session_id.h"
+#include "chrome/browser/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+
+// static SyncedWindowDelegate implementations
+
+// static
+const std::set<browser_sync::SyncedWindowDelegate*>
+ browser_sync::SyncedWindowDelegate::GetSyncedWindowDelegates() {
+ std::set<browser_sync::SyncedWindowDelegate*> synced_window_delegates;
+ for (BrowserList::const_iterator i = BrowserList::begin();
+ i != BrowserList::end(); ++i) {
+ synced_window_delegates.insert((*i)->synced_window_delegate());
+ }
+ return synced_window_delegates;
+}
+
+// static
+const browser_sync::SyncedWindowDelegate*
+ browser_sync::SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
+ SessionID::id_type id) {
+ return BrowserList::FindBrowserWithID(id)->synced_window_delegate();
+}
+
+// BrowserSyncedWindowDelegate implementations
+
+BrowserSyncedWindowDelegate::BrowserSyncedWindowDelegate(Browser* browser)
+ : browser_(browser) {}
+
+BrowserSyncedWindowDelegate::~BrowserSyncedWindowDelegate() {}
+
+bool BrowserSyncedWindowDelegate::IsTabContentsWrapperPinned(
+ const TabContentsWrapper* tab) const {
+ int index = browser_->GetIndexOfController(&tab->controller());
+ DCHECK(index != TabStripModel::kNoTab);
+ return browser_->tabstrip_model()->IsTabPinned(index);
+}
+
+TabContentsWrapper* BrowserSyncedWindowDelegate::GetTabContentsWrapperAt(
+ int index) const {
+ return browser_->GetTabContentsWrapperAt(index);
+}
+
+bool BrowserSyncedWindowDelegate::HasWindow() const {
+ return browser_->window() != NULL;
+}
+
+const SessionID& BrowserSyncedWindowDelegate::GetSessionId() const {
+ return browser_->session_id();
+}
+
+int BrowserSyncedWindowDelegate::GetTabCount() const {
+ return browser_->tab_count();
+}
+
+int BrowserSyncedWindowDelegate::GetActiveIndex() const {
+ return browser_->active_index();
+}
+
+bool BrowserSyncedWindowDelegate::IsApp() const {
+ return browser_->is_app();
+}
+
+bool BrowserSyncedWindowDelegate::IsTypeTabbed() const {
+ return browser_->is_type_tabbed();
+}
+
+bool BrowserSyncedWindowDelegate::IsTypePopup() const {
+ return browser_->is_type_popup();
+}
diff --git a/chrome/browser/ui/browser_synced_window_delegate.h b/chrome/browser/ui/browser_synced_window_delegate.h
new file mode 100644
index 0000000..b23e211
--- /dev/null
+++ b/chrome/browser/ui/browser_synced_window_delegate.h
@@ -0,0 +1,41 @@
+// 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_UI_BROWSER_SYNCED_WINDOW_DELEGATE_H_
+#define CHROME_BROWSER_UI_BROWSER_SYNCED_WINDOW_DELEGATE_H_
+#pragma once
+
+#include "base/compiler_specific.h"
+#include "chrome/browser/sessions/session_id.h"
+#include "chrome/browser/sync/glue/synced_window_delegate.h"
+
+class Browser;
+class TabContentsWrapper;
+
+// A BrowserSyncedWindowDelegate is the Browser-based implementation of
+// SyncedWindowDelegate.
+class BrowserSyncedWindowDelegate : public browser_sync::SyncedWindowDelegate {
+ public:
+ explicit BrowserSyncedWindowDelegate(Browser* browser);
+ virtual ~BrowserSyncedWindowDelegate();
+
+ // SyncedWindowDelegate:
+ virtual bool IsTabContentsWrapperPinned(
+ const TabContentsWrapper* tab) const OVERRIDE;
+ virtual TabContentsWrapper* GetTabContentsWrapperAt(int index) const OVERRIDE;
+ virtual bool HasWindow() const OVERRIDE;
+ virtual const SessionID& GetSessionId() const OVERRIDE;
+ virtual int GetTabCount() const OVERRIDE;
+ virtual int GetActiveIndex() const OVERRIDE;
+ virtual bool IsApp() const OVERRIDE;
+ virtual bool IsTypeTabbed() const OVERRIDE;
+ virtual bool IsTypePopup() const OVERRIDE;
+
+ private:
+ Browser* browser_;
+
+ DISALLOW_COPY_AND_ASSIGN(BrowserSyncedWindowDelegate);
+};
+
+#endif // CHROME_BROWSER_UI_BROWSER_SYNCED_WINDOW_DELEGATE_H_