Home | History | Annotate | Download | only in sessions
      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 #ifndef CHROME_BROWSER_SESSIONS_SESSION_SERVICE_FACTORY_H_
      6 #define CHROME_BROWSER_SESSIONS_SESSION_SERVICE_FACTORY_H_
      7 
      8 #include "base/memory/singleton.h"
      9 #include "chrome/browser/profiles/profile.h"
     10 #include "chrome/browser/sessions/session_service.h"
     11 #include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h"
     12 
     13 // Singleton that owns all SessionServices and associates them with
     14 // Profiles. Listens for the Profile's destruction notification and cleans up
     15 // the associated SessionService.
     16 class SessionServiceFactory : public BrowserContextKeyedServiceFactory {
     17  public:
     18   // Returns the session service for |profile|. This may return NULL. If this
     19   // profile supports a session service (it isn't incognito), and the session
     20   // service hasn't yet been created, this forces creation of the session
     21   // service.
     22   //
     23   // This returns NULL if the profile is incognito. Callers should always check
     24   // the return value for NULL.
     25   static SessionService* GetForProfile(Profile* profile);
     26 
     27   // Returns the session service for |profile|, but do not create it if it
     28   // doesn't exist. This returns NULL if the profile is incognito or if session
     29   // service has been explicitly shutdown (browser is exiting). Callers should
     30   // always check the return value for NULL.
     31   static SessionService* GetForProfileIfExisting(Profile* profile);
     32 
     33   // If |profile| has a session service, it is shut down. To properly record the
     34   // current state this forces creation of the session service, then shuts it
     35   // down.
     36   static void ShutdownForProfile(Profile* profile);
     37 
     38 #if defined(UNIT_TEST)
     39   // For test use: force setting of the session service for a given profile.
     40   // This will delete a previous session service for this profile if it exists.
     41   static void SetForTestProfile(Profile* profile, SessionService* service) {
     42     GetInstance()->BrowserContextShutdown(profile);
     43     GetInstance()->BrowserContextDestroyed(profile);
     44     GetInstance()->Associate(profile, service);
     45   }
     46 #endif
     47 
     48   static SessionServiceFactory* GetInstance();
     49 
     50  private:
     51   friend struct DefaultSingletonTraits<SessionServiceFactory>;
     52   FRIEND_TEST_ALL_PREFIXES(SessionCrashedInfoBarDelegateUnitTest,
     53                            DetachingTabWithCrashedInfoBar);
     54 
     55   SessionServiceFactory();
     56   virtual ~SessionServiceFactory();
     57 
     58   // BrowserContextKeyedServiceFactory:
     59   virtual BrowserContextKeyedService* BuildServiceInstanceFor(
     60       content::BrowserContext* profile) const OVERRIDE;
     61   virtual bool ServiceIsCreatedWithBrowserContext() const OVERRIDE;
     62   virtual bool ServiceIsNULLWhileTesting() const OVERRIDE;
     63 };
     64 
     65 #endif  // CHROME_BROWSER_SESSIONS_SESSION_SERVICE_FACTORY_H_
     66