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_
|