blob: fb1b10cfab55224994c6294b5815511a4499373b [file]
// Copyright 2026 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_DEVICE_INFO_TEST_DEVICE_INFO_BUILDER_H_
#define COMPONENTS_SYNC_DEVICE_INFO_TEST_DEVICE_INFO_BUILDER_H_
#include <memory>
#include <optional>
#include <string>
#include "base/time/time.h"
#include "components/sync/base/data_type.h"
#include "components/sync_device_info/device_info.h"
namespace syncer {
// A builder to construct syncer::DeviceInfo objects for testing.
// It initializes with sensible default values, and allows overriding only
// the required properties.
class TestDeviceInfoBuilder {
public:
explicit TestDeviceInfoBuilder(
DeviceInfo::OsType os_type = DeviceInfo::OsType::kWindows);
explicit TestDeviceInfoBuilder(const DeviceInfo& other);
~TestDeviceInfoBuilder();
// Disable copy
TestDeviceInfoBuilder(const TestDeviceInfoBuilder&) = delete;
TestDeviceInfoBuilder& operator=(const TestDeviceInfoBuilder&) = delete;
// Move is okay
TestDeviceInfoBuilder(TestDeviceInfoBuilder&&);
TestDeviceInfoBuilder& operator=(TestDeviceInfoBuilder&&);
std::unique_ptr<DeviceInfo> Build() const;
TestDeviceInfoBuilder& WithGuid(const std::string& guid);
TestDeviceInfoBuilder& WithClientName(const std::string& client_name);
TestDeviceInfoBuilder& WithChromeVersion(const std::string& chrome_version);
TestDeviceInfoBuilder& WithSyncUserAgent(const std::string& sync_user_agent);
TestDeviceInfoBuilder& WithDeviceType(DeviceInfo::DeviceType device_type);
TestDeviceInfoBuilder& WithOsType(DeviceInfo::OsType os_type);
TestDeviceInfoBuilder& WithFormFactor(DeviceInfo::FormFactor form_factor);
TestDeviceInfoBuilder& WithSigninScopedDeviceId(
const std::string& signin_scoped_device_id);
TestDeviceInfoBuilder& WithManufacturerName(
const std::string& manufacturer_name);
TestDeviceInfoBuilder& WithModelName(const std::string& model_name);
TestDeviceInfoBuilder& WithFullHardwareClass(
const std::string& full_hardware_class);
TestDeviceInfoBuilder& WithAndroidBuildFingerprintPrefix(
std::optional<std::string> android_os_build_fingerprint_prefix);
TestDeviceInfoBuilder& WithLastUpdatedTimestamp(
base::Time last_updated_timestamp);
TestDeviceInfoBuilder& WithPulseInterval(base::TimeDelta pulse_interval);
TestDeviceInfoBuilder& WithSendTabToSelfReceivingEnabled(
bool send_tab_to_self_receiving_enabled);
TestDeviceInfoBuilder& WithSendTabToSelfReceivingType(
DeviceInfo::SendTabReceivingType send_tab_to_self_receiving_type);
TestDeviceInfoBuilder& WithSharingInfo(
const std::optional<DeviceInfo::SharingInfo>& sharing_info);
TestDeviceInfoBuilder& WithSharingInfo(
const DeviceInfo::SharingInfo& sharing_info);
TestDeviceInfoBuilder& WithPaaskInfo(
const std::optional<DeviceInfo::PhoneAsASecurityKeyInfo>& paask_info);
TestDeviceInfoBuilder& WithFcmRegistrationToken(
const std::string& fcm_registration_token);
TestDeviceInfoBuilder& WithInterestedDataTypes(
const DataTypeSet& interested_data_types);
TestDeviceInfoBuilder& WithAutoSignOutLastSigninTimestamp(
std::optional<base::Time> auto_sign_out_last_signin_timestamp);
TestDeviceInfoBuilder& WithDesktopToIosPromoReceivingEnabled(
bool desktop_to_ios_promo_receiving_enabled);
TestDeviceInfoBuilder& WithDesktopToIosPromoReceivingTypes(
const MobilePromoOnDesktopPromoTypeSet&
desktop_to_ios_promo_receiving_types);
TestDeviceInfoBuilder& WithGlicExperimentalTriggeringState(
DeviceInfo::GlicExperimentalTriggeringState
glic_experimental_triggering_state);
TestDeviceInfoBuilder& WithGlicExperimentalTriggeringVersion(
std::optional<int> glic_experimental_triggering_version);
TestDeviceInfoBuilder& WithServerDeterminedModelName(
const std::optional<std::string>& server_determined_model_name);
TestDeviceInfoBuilder& WithPersonalContextInfo(
const std::optional<DeviceInfo::PersonalContextInfo>&
personal_context_info);
private:
std::string guid_ = "guid";
std::string client_name_ = "client_name";
std::string chrome_version_ = "chrome_version";
std::string sync_user_agent_ = "sync_user_agent";
DeviceInfo::DeviceType device_type_;
DeviceInfo::OsType os_type_;
DeviceInfo::FormFactor form_factor_;
std::string signin_scoped_device_id_ = "signin_scoped_device_id";
std::string manufacturer_name_ = "manufacturer";
std::string model_name_ = "model";
std::string full_hardware_class_;
std::optional<std::string> android_os_build_fingerprint_prefix_;
base::Time last_updated_timestamp_ = base::Time::Now();
base::TimeDelta pulse_interval_ = base::Days(1);
bool send_tab_to_self_receiving_enabled_ = false;
DeviceInfo::SendTabReceivingType send_tab_to_self_receiving_type_ =
DeviceInfo::SendTabReceivingType::kChromeOrUnspecified;
std::optional<DeviceInfo::SharingInfo> sharing_info_;
std::optional<DeviceInfo::PhoneAsASecurityKeyInfo> paask_info_;
std::string fcm_registration_token_;
DataTypeSet interested_data_types_ = DataTypeSet::All();
std::optional<base::Time> auto_sign_out_last_signin_timestamp_;
bool desktop_to_ios_promo_receiving_enabled_ = false;
MobilePromoOnDesktopPromoTypeSet desktop_to_ios_promo_receiving_types_;
DeviceInfo::GlicExperimentalTriggeringState
glic_experimental_triggering_state_ =
DeviceInfo::GlicExperimentalTriggeringState::kUnavailable;
std::optional<int> glic_experimental_triggering_version_;
std::optional<std::string> server_determined_model_name_;
std::optional<DeviceInfo::PersonalContextInfo> personal_context_info_;
};
} // namespace syncer
#endif // COMPONENTS_SYNC_DEVICE_INFO_TEST_DEVICE_INFO_BUILDER_H_