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/sessions/session_service_factory.h" 6 7#include "chrome/browser/profiles/profile.h" 8#include "chrome/browser/sessions/session_data_deleter.h" 9#include "chrome/browser/sessions/session_service.h" 10#include "components/keyed_service/content/browser_context_dependency_manager.h" 11 12// static 13SessionService* SessionServiceFactory::GetForProfile(Profile* profile) { 14#if defined(OS_ANDROID) 15 // For Android we do not store sessions in the SessionService. 16 return NULL; 17#else 18 return static_cast<SessionService*>( 19 GetInstance()->GetServiceForBrowserContext(profile, true)); 20#endif 21} 22 23// static 24SessionService* SessionServiceFactory::GetForProfileIfExisting( 25 Profile* profile) { 26#if defined(OS_ANDROID) 27 // For Android we do not store sessions in the SessionService. 28 return NULL; 29#else 30 return static_cast<SessionService*>( 31 GetInstance()->GetServiceForBrowserContext(profile, false)); 32#endif 33} 34 35// static 36SessionService* SessionServiceFactory::GetForProfileForSessionRestore( 37 Profile* profile) { 38 SessionService* service = GetForProfile(profile); 39 if (!service) { 40 // If the service has been shutdown, remove the reference to NULL for 41 // |profile| so GetForProfile will recreate it. 42 GetInstance()->Disassociate(profile); 43 service = GetForProfile(profile); 44 } 45 return service; 46} 47 48// static 49void SessionServiceFactory::ShutdownForProfile(Profile* profile) { 50 DeleteSessionOnlyData(profile); 51 52 // We're about to exit, force creation of the session service if it hasn't 53 // been created yet. We do this to ensure session state matches the point in 54 // time the user exited. 55 SessionServiceFactory* factory = GetInstance(); 56 factory->GetServiceForBrowserContext(profile, true); 57 58 // Shut down and remove the reference to the session service, and replace it 59 // with an explicit NULL to prevent it being recreated on the next access. 60 factory->BrowserContextShutdown(profile); 61 factory->BrowserContextDestroyed(profile); 62 factory->Associate(profile, NULL); 63} 64 65SessionServiceFactory* SessionServiceFactory::GetInstance() { 66 return Singleton<SessionServiceFactory>::get(); 67} 68 69SessionServiceFactory::SessionServiceFactory() 70 : BrowserContextKeyedServiceFactory( 71 "SessionService", 72 BrowserContextDependencyManager::GetInstance()) { 73} 74 75SessionServiceFactory::~SessionServiceFactory() { 76} 77 78KeyedService* SessionServiceFactory::BuildServiceInstanceFor( 79 content::BrowserContext* profile) const { 80 SessionService* service = NULL; 81 service = new SessionService(static_cast<Profile*>(profile)); 82 service->ResetFromCurrentBrowsers(); 83 return service; 84} 85 86bool SessionServiceFactory::ServiceIsCreatedWithBrowserContext() const { 87 return true; 88} 89 90bool SessionServiceFactory::ServiceIsNULLWhileTesting() const { 91 return true; 92} 93