File: active_devices_invalidation_info.h

package info (click to toggle)
chromium 139.0.7258.138-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 6,120,676 kB
  • sloc: cpp: 35,100,869; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (92 lines) | stat: -rw-r--r-- 4,081 bytes parent folder | download | duplicates (6)
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
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_SYNC_ENGINE_ACTIVE_DEVICES_INVALIDATION_INFO_H_
#define COMPONENTS_SYNC_ENGINE_ACTIVE_DEVICES_INVALIDATION_INFO_H_

#include <map>
#include <string>
#include <vector>

#include "components/sync/base/data_type.h"

namespace syncer {

// This class keeps information about known active devices' invalidation fields.
// It's used for invalidations-related fields in a commit messages.
class ActiveDevicesInvalidationInfo {
 public:
  // Uninitialized object represents the case when sync engine is not
  // initialized and there is no information about other devices.
  static ActiveDevicesInvalidationInfo CreateUninitialized();

  // Creates and initializes the object with all collected
  // `all_fcm_registration_tokens` and `interested_data_types` from all other
  // devices (and the local device if the client waits for self-invalidations).
  // `fcm_token_and_interested_data_types` contains FCM registration tokens and
  // a corresponding interested data type list.
  static ActiveDevicesInvalidationInfo Create(
      std::vector<std::string> all_fcm_registration_tokens,
      DataTypeSet all_interested_data_types,
      std::map<std::string, DataTypeSet> fcm_token_and_interested_data_types,
      DataTypeSet old_invalidations_interested_data_types);

  ~ActiveDevicesInvalidationInfo();

  ActiveDevicesInvalidationInfo(const ActiveDevicesInvalidationInfo&);
  ActiveDevicesInvalidationInfo& operator=(
      const ActiveDevicesInvalidationInfo&);
  ActiveDevicesInvalidationInfo(ActiveDevicesInvalidationInfo&&);
  ActiveDevicesInvalidationInfo& operator=(ActiveDevicesInvalidationInfo&&);

  // Returns true if there are no other devices interested in invalidations for
  // the given `types`. Otherwise returns false (and in case when it's unknown,
  // e.g. while DeviceInfo is not initialized). When reflections are enabled,
  // returns false even if current client is the only one.
  bool IsSingleClientForTypes(const DataTypeSet& types) const;

  // Returns true if there are no other active DeviceInfos with enabled sync
  // standalone invalidations interested in the given `types`. Returns false in
  // all other cases:
  // * When it's unknown if there are other clients (e.g. when DeviceInfo data
  //   type is not initialized yet.
  // * There is at least one client with enabled sync standalone invalidations
  //   subscribed for the given `types` (including current client if reflections
  //   are enabled).
  bool IsSingleClientWithStandaloneInvalidationsForTypes(
      const DataTypeSet& types) const;

  // Returns true if there are no other active DeviceInfos with *disabled* synce
  // standalone invalidations interested in the given `types`.
  bool IsSingleClientWithOldInvalidationsForTypes(
      const DataTypeSet& types) const;

  // Returns a list with all remote FCM registration tokens known to the current
  // device. The list may contain the local device's token if a reflection
  // should be sent from the server.
  const std::vector<std::string>& all_fcm_registration_tokens() const {
    return all_fcm_registration_tokens_;
  }

  // Returns a list of all remote FCM registration tokens known to current
  // device which are interested in at least one of the given `types`. This is a
  // subset of the list returned by all_fcm_registration_tokens().
  std::vector<std::string> GetFcmRegistrationTokensForInterestedClients(
      DataTypeSet types) const;

 private:
  explicit ActiveDevicesInvalidationInfo(bool initialized);

  DataTypeSet GetAllInterestedDataTypesForStandaloneInvalidations() const;

  bool initialized_ = false;
  std::vector<std::string> all_fcm_registration_tokens_;
  DataTypeSet all_interested_data_types_;
  std::map<std::string, DataTypeSet> fcm_token_and_interested_data_types_;
  DataTypeSet old_invalidations_interested_data_types_;
};

}  // namespace syncer

#endif  // COMPONENTS_SYNC_ENGINE_ACTIVE_DEVICES_INVALIDATION_INFO_H_