1 // Copyright 2018 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_SYNC_SESSIONS_SESSION_MODEL_TYPE_CONTROLLER_H_
6 #define COMPONENTS_SYNC_SESSIONS_SESSION_MODEL_TYPE_CONTROLLER_H_
7 
8 #include <memory>
9 #include <string>
10 
11 #include "base/macros.h"
12 #include "components/prefs/pref_change_registrar.h"
13 #include "components/sync/driver/model_type_controller.h"
14 #include "components/sync/driver/sync_service_observer.h"
15 
16 class PrefService;
17 
18 namespace syncer {
19 class SyncService;
20 }  // namespace syncer
21 
22 namespace sync_sessions {
23 
24 // Overrides LoadModels to check if history sync is allowed by policy.
25 class SessionModelTypeController : public syncer::ModelTypeController,
26                                    public syncer::SyncServiceObserver {
27  public:
28   SessionModelTypeController(
29       syncer::SyncService* sync_service,
30       PrefService* pref_service,
31       std::unique_ptr<syncer::ModelTypeControllerDelegate> delegate,
32       const std::string& history_disabled_pref_name);
33   ~SessionModelTypeController() override;
34 
35   // DataTypeController overrides.
36   PreconditionState GetPreconditionState() const override;
37 
38   // syncer::SyncServiceObserver implementation.
39   void OnStateChanged(syncer::SyncService* sync) override;
40 
41  private:
42   void OnSavingBrowserHistoryPrefChanged();
43 
44   syncer::SyncService* const sync_service_;
45   PrefService* const pref_service_;
46 
47   // Name of the pref that indicates whether saving history is disabled.
48   const std::string history_disabled_pref_name_;
49 
50   PrefChangeRegistrar pref_registrar_;
51 
52   DISALLOW_COPY_AND_ASSIGN(SessionModelTypeController);
53 };
54 
55 }  // namespace sync_sessions
56 
57 #endif  // COMPONENTS_SYNC_SESSIONS_SESSION_MODEL_TYPE_CONTROLLER_H_
58