1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/sync/browser_synced_window_delegate.h"
6
7#include <set>
8
9#include "chrome/browser/sessions/session_id.h"
10#include "chrome/browser/ui/browser.h"
11#include "chrome/browser/ui/browser_finder.h"
12#include "chrome/browser/ui/browser_iterator.h"
13#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h"
14#include "chrome/browser/ui/tabs/tab_strip_model.h"
15
16// static SyncedWindowDelegate implementations
17
18// static
19const std::set<browser_sync::SyncedWindowDelegate*>
20    browser_sync::SyncedWindowDelegate::GetSyncedWindowDelegates() {
21  std::set<browser_sync::SyncedWindowDelegate*> synced_window_delegates;
22  for (chrome::BrowserIterator it; !it.done(); it.Next())
23    synced_window_delegates.insert(it->synced_window_delegate());
24  return synced_window_delegates;
25}
26
27// static
28const browser_sync::SyncedWindowDelegate*
29    browser_sync::SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
30        SessionID::id_type id) {
31  Browser* browser = chrome::FindBrowserWithID(id);
32  // In case we don't find the browser (e.g. for Developer Tools).
33  return browser ? browser->synced_window_delegate() : NULL;
34}
35
36// BrowserSyncedWindowDelegate implementations
37
38BrowserSyncedWindowDelegate::BrowserSyncedWindowDelegate(Browser* browser)
39    : browser_(browser) {}
40
41BrowserSyncedWindowDelegate::~BrowserSyncedWindowDelegate() {}
42
43bool BrowserSyncedWindowDelegate::IsTabPinned(
44    const browser_sync::SyncedTabDelegate* tab) const {
45  for (int i = 0; i < browser_->tab_strip_model()->count(); i++) {
46    browser_sync::SyncedTabDelegate* current = GetTabAt(i);
47    if (tab == current)
48      return browser_->tab_strip_model()->IsTabPinned(i);
49  }
50  NOTREACHED();
51  return false;
52}
53
54browser_sync::SyncedTabDelegate* BrowserSyncedWindowDelegate::GetTabAt(
55    int index) const {
56  return TabContentsSyncedTabDelegate::FromWebContents(
57      browser_->tab_strip_model()->GetWebContentsAt(index));
58}
59
60SessionID::id_type BrowserSyncedWindowDelegate::GetTabIdAt(int index) const {
61  return GetTabAt(index)->GetSessionId();
62}
63
64bool BrowserSyncedWindowDelegate::HasWindow() const {
65  return browser_->window() != NULL;
66}
67
68SessionID::id_type BrowserSyncedWindowDelegate::GetSessionId() const {
69  return browser_->session_id().id();
70}
71
72int BrowserSyncedWindowDelegate::GetTabCount() const {
73  return browser_->tab_strip_model()->count();
74}
75
76int BrowserSyncedWindowDelegate::GetActiveIndex() const {
77  return browser_->tab_strip_model()->active_index();
78}
79
80bool BrowserSyncedWindowDelegate::IsApp() const {
81  return browser_->is_app();
82}
83
84bool BrowserSyncedWindowDelegate::IsTypeTabbed() const {
85  return browser_->is_type_tabbed();
86}
87
88bool BrowserSyncedWindowDelegate::IsTypePopup() const {
89  return browser_->is_type_popup();
90}
91
92bool BrowserSyncedWindowDelegate::IsSessionRestoreInProgress() const {
93  return false;
94}
95