// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/sessions/session_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sessions/session_data_deleter.h" #include "chrome/browser/sessions/session_service.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" // static SessionService* SessionServiceFactory::GetForProfile(Profile* profile) { #if defined(OS_ANDROID) // For Android we do not store sessions in the SessionService. return NULL; #else return static_cast( GetInstance()->GetServiceForBrowserContext(profile, true)); #endif } // static SessionService* SessionServiceFactory::GetForProfileIfExisting( Profile* profile) { #if defined(OS_ANDROID) // For Android we do not store sessions in the SessionService. return NULL; #else return static_cast( GetInstance()->GetServiceForBrowserContext(profile, false)); #endif } // static SessionService* SessionServiceFactory::GetForProfileForSessionRestore( Profile* profile) { SessionService* service = GetForProfile(profile); if (!service) { // If the service has been shutdown, remove the reference to NULL for // |profile| so GetForProfile will recreate it. GetInstance()->Disassociate(profile); service = GetForProfile(profile); } return service; } // static void SessionServiceFactory::ShutdownForProfile(Profile* profile) { DeleteSessionOnlyData(profile); // We're about to exit, force creation of the session service if it hasn't // been created yet. We do this to ensure session state matches the point in // time the user exited. SessionServiceFactory* factory = GetInstance(); factory->GetServiceForBrowserContext(profile, true); // Shut down and remove the reference to the session service, and replace it // with an explicit NULL to prevent it being recreated on the next access. factory->BrowserContextShutdown(profile); factory->BrowserContextDestroyed(profile); factory->Associate(profile, NULL); } SessionServiceFactory* SessionServiceFactory::GetInstance() { return Singleton::get(); } SessionServiceFactory::SessionServiceFactory() : BrowserContextKeyedServiceFactory( "SessionService", BrowserContextDependencyManager::GetInstance()) { } SessionServiceFactory::~SessionServiceFactory() { } KeyedService* SessionServiceFactory::BuildServiceInstanceFor( content::BrowserContext* profile) const { SessionService* service = NULL; service = new SessionService(static_cast(profile)); service->ResetFromCurrentBrowsers(); return service; } bool SessionServiceFactory::ServiceIsCreatedWithBrowserContext() const { return true; } bool SessionServiceFactory::ServiceIsNULLWhileTesting() const { return true; }