• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
GetForProfile(Profile * profile)13 SessionService* 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
GetForProfileIfExisting(Profile * profile)24 SessionService* 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
GetForProfileForSessionRestore(Profile * profile)36 SessionService* 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
ShutdownForProfile(Profile * profile)49 void 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 
GetInstance()65 SessionServiceFactory* SessionServiceFactory::GetInstance() {
66   return Singleton<SessionServiceFactory>::get();
67 }
68 
SessionServiceFactory()69 SessionServiceFactory::SessionServiceFactory()
70     : BrowserContextKeyedServiceFactory(
71         "SessionService",
72         BrowserContextDependencyManager::GetInstance()) {
73 }
74 
~SessionServiceFactory()75 SessionServiceFactory::~SessionServiceFactory() {
76 }
77 
BuildServiceInstanceFor(content::BrowserContext * profile) const78 KeyedService* 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 
ServiceIsCreatedWithBrowserContext() const86 bool SessionServiceFactory::ServiceIsCreatedWithBrowserContext() const {
87   return true;
88 }
89 
ServiceIsNULLWhileTesting() const90 bool SessionServiceFactory::ServiceIsNULLWhileTesting() const {
91   return true;
92 }
93