File: sharing_device_registration_impl.h

package info (click to toggle)
chromium 138.0.7204.157-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,864 kB
  • sloc: cpp: 34,936,859; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,967; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (130 lines) | stat: -rw-r--r-- 5,025 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_SHARING_SHARING_DEVICE_REGISTRATION_IMPL_H_
#define CHROME_BROWSER_SHARING_SHARING_DEVICE_REGISTRATION_IMPL_H_

#include <optional>
#include <string>

#include "base/functional/callback.h"
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "components/gcm_driver/instance_id/instance_id.h"
#include "components/sync/protocol/device_info_specifics.pb.h"
#include "components/sync_device_info/device_info.h"
#include "components/sharing_message/sharing_device_registration.h"

class PrefService;

namespace instance_id {
class InstanceIDDriver;
}  // namespace instance_id

namespace syncer {
class SyncService;
}  // namespace syncer

enum class SharingDeviceRegistrationResult;
class SharingSyncPreference;
class VapidKeyManager;

// Responsible for registering and unregistering device with
// SharingSyncPreference.
class SharingDeviceRegistrationImpl : public SharingDeviceRegistration {
 public:
  using RegistrationCallback =
      base::OnceCallback<void(SharingDeviceRegistrationResult)>;
  using TargetInfoCallback = base::OnceCallback<void(
      SharingDeviceRegistrationResult,
      std::optional<syncer::DeviceInfo::SharingTargetInfo>)>;

  SharingDeviceRegistrationImpl(PrefService* pref_service,
                            SharingSyncPreference* prefs,
                            VapidKeyManager* vapid_key_manager,
                            instance_id::InstanceIDDriver* instance_id_driver,
                            syncer::SyncService* sync_service);

  SharingDeviceRegistrationImpl(const SharingDeviceRegistrationImpl&) = delete;
  SharingDeviceRegistrationImpl& operator=(const SharingDeviceRegistrationImpl&) =
      delete;

  ~SharingDeviceRegistrationImpl() override;

  // Registers device with sharing sync preferences. Takes a |callback| function
  // which receives the result of FCM registration for device.
  void RegisterDevice(RegistrationCallback callback) override;

  // Un-registers device with sharing sync preferences.
  void UnregisterDevice(RegistrationCallback callback) override;

  // Returns if device can handle receiving phone numbers for calling.
  bool IsClickToCallSupported() const override;

  // Returns if device can handle receiving of shared clipboard contents.
  bool IsSharedClipboardSupported() const override;

  // Returns if device can handle receiving of sms fetcher requests.
  bool IsSmsFetcherSupported() const override;

  // Returns if device can handle receiving of remote copy contents.
  bool IsRemoteCopySupported() const override;

  // Returns if device can handle receiving of optimization guide push
  // notification.
  bool IsOptimizationGuidePushNotificationSupported() const override;

    // For testing
  void SetEnabledFeaturesForTesting(
      std::set<sync_pb::SharingSpecificFields_EnabledFeatures>
          enabled_features) override;

 private:
  FRIEND_TEST_ALL_PREFIXES(SharingDeviceRegistrationImplTest,
                           RegisterDeviceTest_Success);

  void RetrieveTargetInfo(const std::string& sender_id,
                          TargetInfoCallback callback);

  void OnFCMTokenReceived(TargetInfoCallback callback,
                          const std::string& sender_id,
                          const std::string& fcm_token,
                          instance_id::InstanceID::Result result);

  void OnEncryptionInfoReceived(TargetInfoCallback callback,
                                const std::string& fcm_token,
                                std::string p256dh,
                                std::string auth_secret);

  void OnSharingTargetInfoRetrieved(
      RegistrationCallback callback,
      SharingDeviceRegistrationResult result,
      std::optional<syncer::DeviceInfo::SharingTargetInfo> sharing_target_info);

  void OnVapidFCMTokenDeleted(RegistrationCallback callback,
                              SharingDeviceRegistrationResult result);

  void DeleteFCMToken(const std::string& authorized_entity,
                      RegistrationCallback callback);

  void OnFCMTokenDeleted(RegistrationCallback callback,
                         instance_id::InstanceID::Result result);

  // Computes and returns a set of all enabled features on the device.
  std::set<sync_pb::SharingSpecificFields_EnabledFeatures> GetEnabledFeatures()
      const;

  raw_ptr<PrefService> pref_service_;
  raw_ptr<SharingSyncPreference> sharing_sync_preference_;
  raw_ptr<VapidKeyManager> vapid_key_manager_;
  raw_ptr<instance_id::InstanceIDDriver> instance_id_driver_;
  raw_ptr<syncer::SyncService> sync_service_;
  std::optional<std::set<sync_pb::SharingSpecificFields_EnabledFeatures>>
      enabled_features_testing_value_;

  base::WeakPtrFactory<SharingDeviceRegistrationImpl> weak_ptr_factory_{this};
};

#endif  // CHROME_BROWSER_SHARING_SHARING_DEVICE_REGISTRATION_IMPL_H_