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 COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_IMPL_H_
6 #define COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_IMPL_H_
7 
8 #include <memory>
9 #include <vector>
10 
11 #include "base/compiler_specific.h"
12 #include "base/macros.h"
13 #include "components/prefs/pref_change_registrar.h"
14 #include "components/sessions/core/sessions_export.h"
15 #include "components/sessions/core/tab_restore_service.h"
16 #include "components/sessions/core/tab_restore_service_client.h"
17 #include "components/sessions/core/tab_restore_service_helper.h"
18 
19 class PrefService;
20 class TabRestoreServiceImplTest;
21 
22 namespace sessions {
23 
24 // Tab restore service that persists data on disk.
25 class SESSIONS_EXPORT TabRestoreServiceImpl : public TabRestoreService {
26  public:
27   // Does not take ownership of |time_factory|.
28   TabRestoreServiceImpl(std::unique_ptr<TabRestoreServiceClient> client,
29                         PrefService* pref_service,
30                         TimeFactory* time_factory);
31 
32   ~TabRestoreServiceImpl() override;
33 
34   // TabRestoreService:
35   void AddObserver(TabRestoreServiceObserver* observer) override;
36   void RemoveObserver(TabRestoreServiceObserver* observer) override;
37   void CreateHistoricalTab(LiveTab* live_tab, int index) override;
38   void BrowserClosing(LiveTabContext* context) override;
39   void BrowserClosed(LiveTabContext* context) override;
40   void ClearEntries() override;
41   void DeleteNavigationEntries(const DeletionPredicate& predicate) override;
42   const Entries& entries() const override;
43   std::vector<LiveTab*> RestoreMostRecentEntry(
44       LiveTabContext* context) override;
45   std::unique_ptr<Tab> RemoveTabEntryById(SessionID id) override;
46   std::vector<LiveTab*> RestoreEntryById(
47       LiveTabContext* context,
48       SessionID id,
49       WindowOpenDisposition disposition) override;
50   void LoadTabsFromLastSession() override;
51   bool IsLoaded() const override;
52   void DeleteLastSession() override;
53   bool IsRestoring() const override;
54   void Shutdown() override;
55 
56  private:
57   friend class ::TabRestoreServiceImplTest;
58 
59   class PersistenceDelegate;
60   void UpdatePersistenceDelegate();
61 
62   // Exposed for testing.
63   Entries* mutable_entries();
64   void PruneEntries();
65 
66   std::unique_ptr<TabRestoreServiceClient> client_;
67   std::unique_ptr<PersistenceDelegate> persistence_delegate_;
68   TabRestoreServiceHelper helper_;
69   PrefChangeRegistrar pref_change_registrar_;
70 
71   DISALLOW_COPY_AND_ASSIGN(TabRestoreServiceImpl);
72 };
73 
74 }  // namespace sessions
75 
76 #endif  // COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_IMPL_H_
77