15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/synced_window_delegate_android.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/android/tab_android.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/sync/glue/synced_tab_delegate_android.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/android/tab_model/tab_model.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_sync {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SyncedWindowDelegate implementations
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::set<SyncedWindowDelegate*>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SyncedWindowDelegate::GetSyncedWindowDelegates() {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<SyncedWindowDelegate*> synced_window_delegates;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (TabModelList::const_iterator i = TabModelList::begin();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      i != TabModelList::end(); ++i) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    synced_window_delegates.insert((*i)->GetSyncedWindowDelegate());
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return synced_window_delegates;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const SyncedWindowDelegate*
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SessionID::id_type session_id) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabModel* tab_model = TabModelList::FindTabModelWithId(
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      session_id);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In case we don't find the browser (e.g. for Developer Tools).
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return tab_model ? tab_model->GetSyncedWindowDelegate() : NULL;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SyncedWindowDelegateAndroid implementations
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncedWindowDelegateAndroid::SyncedWindowDelegateAndroid(
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TabModel* tab_model)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : tab_model_(tab_model) {}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncedWindowDelegateAndroid::~SyncedWindowDelegateAndroid() {}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncedWindowDelegateAndroid::HasWindow() const {
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return !tab_model_->IsOffTheRecord();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionID::id_type SyncedWindowDelegateAndroid::GetSessionId() const {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return tab_model_->GetSessionId();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int SyncedWindowDelegateAndroid::GetTabCount() const {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return tab_model_->GetTabCount();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int SyncedWindowDelegateAndroid::GetActiveIndex() const {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return tab_model_->GetActiveIndex();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncedWindowDelegateAndroid::IsApp() const {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncedWindowDelegateAndroid::IsTypeTabbed() const {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncedWindowDelegateAndroid::IsTypePopup() const {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncedWindowDelegateAndroid::IsTabPinned(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const SyncedTabDelegate* tab) const {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncedTabDelegate* SyncedWindowDelegateAndroid::GetTabAt(int index) const {
804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // After a restart, it is possible for the Tab to be null during startup.
814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  TabAndroid* tab = tab_model_->GetTabAt(index);
824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return tab ? tab->GetSyncedTabDelegate() : NULL;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionID::id_type SyncedWindowDelegateAndroid::GetTabIdAt(int index) const {
86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SyncedTabDelegate* tab = GetTabAt(index);
87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return tab ? tab->GetSessionId() : -1;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncedWindowDelegateAndroid::IsSessionRestoreInProgress() const {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return tab_model_->IsSessionRestoreInProgress();
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace browser_sync
95