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 CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_SERVICE_H_
6 #define CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_SERVICE_H_
7 
8 #include <memory>
9 
10 #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
11 
12 class PrefService;
13 class PrefRegistrySimple;
14 
15 namespace chromeos {
16 
17 namespace device_sync {
18 class DeviceSyncClient;
19 class GcmDeviceInfoProvider;
20 }  // namespace device_sync
21 
22 namespace multidevice_setup {
23 
24 class AndroidSmsAppHelperDelegate;
25 class AndroidSmsPairingStateTracker;
26 class AuthTokenValidator;
27 class MultiDeviceSetupBase;
28 class PrivilegedHostDeviceSetterBase;
29 class OobeCompletionTracker;
30 
31 // Service which provides an implementation for mojom::MultiDeviceSetup. This
32 // service creates one implementation and shares it among all connection
33 // requests.
34 class MultiDeviceSetupService {
35  public:
36   MultiDeviceSetupService(
37       PrefService* pref_service,
38       device_sync::DeviceSyncClient* device_sync_client,
39       AuthTokenValidator* auth_token_validator,
40       OobeCompletionTracker* oobe_completion_tracker,
41       AndroidSmsAppHelperDelegate* android_sms_app_helper_delegate,
42       AndroidSmsPairingStateTracker* android_sms_pairing_state_tracker,
43       const device_sync::GcmDeviceInfoProvider* gcm_device_info_provider);
44   ~MultiDeviceSetupService();
45 
46   static void RegisterProfilePrefs(PrefRegistrySimple* registry);
47 
48   void BindMultiDeviceSetup(
49       mojo::PendingReceiver<mojom::MultiDeviceSetup> receiver);
50   void BindPrivilegedHostDeviceSetter(
51       mojo::PendingReceiver<mojom::PrivilegedHostDeviceSetter> receiver);
52 
53  private:
54   std::unique_ptr<MultiDeviceSetupBase> multidevice_setup_;
55   std::unique_ptr<PrivilegedHostDeviceSetterBase>
56       privileged_host_device_setter_;
57 
58   DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupService);
59 };
60 
61 }  // namespace multidevice_setup
62 
63 }  // namespace chromeos
64 
65 #endif  // CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_SERVICE_H_
66