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/sessions/in_memory_tab_restore_service.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include <vector>
83240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/tab_restore_service_factory.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InMemoryTabRestoreService::InMemoryTabRestoreService(
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile,
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TabRestoreService::TimeFactory* time_factory)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : helper_(this, NULL, profile, time_factory) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InMemoryTabRestoreService::~InMemoryTabRestoreService() {}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::AddObserver(
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TabRestoreServiceObserver* observer) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_.AddObserver(observer);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::RemoveObserver(
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TabRestoreServiceObserver* observer) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_.RemoveObserver(observer);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::CreateHistoricalTab(
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::WebContents* contents,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int index) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_.CreateHistoricalTab(contents, index);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::BrowserClosing(
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TabRestoreServiceDelegate* delegate) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_.BrowserClosing(delegate);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::BrowserClosed(
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TabRestoreServiceDelegate* delegate) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_.BrowserClosed(delegate);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::ClearEntries() {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_.ClearEntries();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const TabRestoreService::Entries& InMemoryTabRestoreService::entries() const {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return helper_.entries();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochstd::vector<content::WebContents*>
563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochInMemoryTabRestoreService::RestoreMostRecentEntry(
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TabRestoreServiceDelegate* delegate,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chrome::HostDesktopType host_desktop_type) {
593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  return helper_.RestoreMostRecentEntry(delegate, host_desktop_type);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabRestoreService::Tab* InMemoryTabRestoreService::RemoveTabEntryById(
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SessionID::id_type id) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return helper_.RemoveTabEntryById(id);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
673240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochstd::vector<content::WebContents*> InMemoryTabRestoreService::RestoreEntryById(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TabRestoreServiceDelegate* delegate,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SessionID::id_type id,
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chrome::HostDesktopType host_desktop_type,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WindowOpenDisposition disposition) {
723240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  return helper_.RestoreEntryById(delegate, id, host_desktop_type, disposition);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::LoadTabsFromLastSession() {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do nothing. This relies on tab persistence which is implemented in Java on
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the application side on Android.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InMemoryTabRestoreService::IsLoaded() const {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // See comment above.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::DeleteLastSession() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // See comment above.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryTabRestoreService::Shutdown() {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* TabRestoreServiceFactory::BuildServiceInstanceFor(
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::BrowserContext* profile) const {
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return new InMemoryTabRestoreService(static_cast<Profile*>(profile), NULL);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
96