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 // The window and tab are not always updated atomically, so it's possible 51 // one of the values was stale. We'll retry later, just ignore for now. 52 return false; 53} 54 55browser_sync::SyncedTabDelegate* BrowserSyncedWindowDelegate::GetTabAt( 56 int index) const { 57 return TabContentsSyncedTabDelegate::FromWebContents( 58 browser_->tab_strip_model()->GetWebContentsAt(index)); 59} 60 61SessionID::id_type BrowserSyncedWindowDelegate::GetTabIdAt(int index) const { 62 return GetTabAt(index)->GetSessionId(); 63} 64 65bool BrowserSyncedWindowDelegate::HasWindow() const { 66 return browser_->window() != NULL; 67} 68 69SessionID::id_type BrowserSyncedWindowDelegate::GetSessionId() const { 70 return browser_->session_id().id(); 71} 72 73int BrowserSyncedWindowDelegate::GetTabCount() const { 74 return browser_->tab_strip_model()->count(); 75} 76 77int BrowserSyncedWindowDelegate::GetActiveIndex() const { 78 return browser_->tab_strip_model()->active_index(); 79} 80 81bool BrowserSyncedWindowDelegate::IsApp() const { 82 return browser_->is_app(); 83} 84 85bool BrowserSyncedWindowDelegate::IsTypeTabbed() const { 86 return browser_->is_type_tabbed(); 87} 88 89bool BrowserSyncedWindowDelegate::IsTypePopup() const { 90 return browser_->is_type_popup(); 91} 92 93bool BrowserSyncedWindowDelegate::IsSessionRestoreInProgress() const { 94 return false; 95} 96