Commit c22183c1 authored by Josh Nohle's avatar Josh Nohle Committed by Commit Bot

[DeviceSync v2] Wire CryptAuthV2DeviceManager into DeviceSync service

If the CryptAuth v2 Enrollment and v2 DeviceSync feature flags are
enabled, DeviceSyncImpl creates a v2 DeviceSync device registry and
device manager to run alongside the v1 DeviceSync device manager.
These two device managers will run in parallel until v1 DeviceSync is
deprecated.

The unit tests were updated to test these new objects. Furthermore,
the unit tests now verify that the correct objects are created for all
permutations of the v2 Enrollment and v2 DeviceSync features flags.

Bug: 951969
Change-Id: I59541a5294e94a560c39bf636357589248ea8045
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1872416
Commit-Queue: Josh Nohle <nohle@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#710536}
parent d53844f4
...@@ -18,14 +18,17 @@ ...@@ -18,14 +18,17 @@
#include "chromeos/services/device_sync/cryptauth_client_impl.h" #include "chromeos/services/device_sync/cryptauth_client_impl.h"
#include "chromeos/services/device_sync/cryptauth_device_activity_getter_impl.h" #include "chromeos/services/device_sync/cryptauth_device_activity_getter_impl.h"
#include "chromeos/services/device_sync/cryptauth_device_manager_impl.h" #include "chromeos/services/device_sync/cryptauth_device_manager_impl.h"
#include "chromeos/services/device_sync/cryptauth_device_registry_impl.h"
#include "chromeos/services/device_sync/cryptauth_enroller_factory_impl.h" #include "chromeos/services/device_sync/cryptauth_enroller_factory_impl.h"
#include "chromeos/services/device_sync/cryptauth_enrollment_manager_impl.h" #include "chromeos/services/device_sync/cryptauth_enrollment_manager_impl.h"
#include "chromeos/services/device_sync/cryptauth_gcm_manager_impl.h" #include "chromeos/services/device_sync/cryptauth_gcm_manager_impl.h"
#include "chromeos/services/device_sync/cryptauth_key_registry_impl.h" #include "chromeos/services/device_sync/cryptauth_key_registry_impl.h"
#include "chromeos/services/device_sync/cryptauth_scheduler_impl.h" #include "chromeos/services/device_sync/cryptauth_scheduler_impl.h"
#include "chromeos/services/device_sync/cryptauth_v2_device_manager_impl.h"
#include "chromeos/services/device_sync/cryptauth_v2_enrollment_manager_impl.h" #include "chromeos/services/device_sync/cryptauth_v2_enrollment_manager_impl.h"
#include "chromeos/services/device_sync/device_sync_type_converters.h" #include "chromeos/services/device_sync/device_sync_type_converters.h"
#include "chromeos/services/device_sync/proto/cryptauth_api.pb.h" #include "chromeos/services/device_sync/proto/cryptauth_api.pb.h"
#include "chromeos/services/device_sync/proto/cryptauth_common.pb.h"
#include "chromeos/services/device_sync/proto/device_classifier_util.h" #include "chromeos/services/device_sync/proto/device_classifier_util.h"
#include "chromeos/services/device_sync/public/cpp/gcm_device_info_provider.h" #include "chromeos/services/device_sync/public/cpp/gcm_device_info_provider.h"
#include "chromeos/services/device_sync/remote_device_provider_impl.h" #include "chromeos/services/device_sync/remote_device_provider_impl.h"
...@@ -86,6 +89,13 @@ enum class DeviceSyncSetSoftwareFeature { ...@@ -86,6 +89,13 @@ enum class DeviceSyncSetSoftwareFeature {
kMaxValue = kUnexpectedClientFeature kMaxValue = kUnexpectedClientFeature
}; };
bool ShouldUseV2DeviceSync() {
return base::FeatureList::IsEnabled(
chromeos::features::kCryptAuthV2Enrollment) &&
base::FeatureList::IsEnabled(
chromeos::features::kCryptAuthV2DeviceSync);
}
DeviceSyncRequestFailureReason GetDeviceSyncRequestFailureReason( DeviceSyncRequestFailureReason GetDeviceSyncRequestFailureReason(
mojom::NetworkRequestResult failure_reason) { mojom::NetworkRequestResult failure_reason) {
switch (failure_reason) { switch (failure_reason) {
...@@ -281,6 +291,10 @@ void DeviceSyncImpl::RegisterProfilePrefs(PrefRegistrySimple* registry) { ...@@ -281,6 +291,10 @@ void DeviceSyncImpl::RegisterProfilePrefs(PrefRegistrySimple* registry) {
} else { } else {
CryptAuthEnrollmentManagerImpl::RegisterPrefs(registry); CryptAuthEnrollmentManagerImpl::RegisterPrefs(registry);
} }
if (ShouldUseV2DeviceSync()) {
CryptAuthDeviceRegistryImpl::RegisterPrefs(registry);
}
} }
DeviceSyncImpl::DeviceSyncImpl( DeviceSyncImpl::DeviceSyncImpl(
...@@ -355,6 +369,12 @@ void DeviceSyncImpl::ForceSyncNow(ForceSyncNowCallback callback) { ...@@ -355,6 +369,12 @@ void DeviceSyncImpl::ForceSyncNow(ForceSyncNowCallback callback) {
} }
cryptauth_device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); cryptauth_device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL);
if (ShouldUseV2DeviceSync()) {
cryptauth_v2_device_manager_->ForceDeviceSyncNow(
cryptauthv2::ClientMetadata::MANUAL, base::nullopt /* session_id */);
}
std::move(callback).Run(true /* success */); std::move(callback).Run(true /* success */);
RecordForceSyncNowResult( RecordForceSyncNowResult(
ForceCryptAuthOperationResult::kSuccess /* result */); ForceCryptAuthOperationResult::kSuccess /* result */);
...@@ -549,9 +569,11 @@ void DeviceSyncImpl::OnSyncDeviceListChanged() { ...@@ -549,9 +569,11 @@ void DeviceSyncImpl::OnSyncDeviceListChanged() {
void DeviceSyncImpl::Shutdown() { void DeviceSyncImpl::Shutdown() {
software_feature_manager_.reset(); software_feature_manager_.reset();
remote_device_provider_.reset(); remote_device_provider_.reset();
cryptauth_v2_device_manager_.reset();
cryptauth_device_manager_.reset(); cryptauth_device_manager_.reset();
cryptauth_enrollment_manager_.reset(); cryptauth_enrollment_manager_.reset();
cryptauth_scheduler_.reset(); cryptauth_scheduler_.reset();
cryptauth_device_registry_.reset();
cryptauth_key_registry_.reset(); cryptauth_key_registry_.reset();
cryptauth_client_factory_.reset(); cryptauth_client_factory_.reset();
cryptauth_gcm_manager_.reset(); cryptauth_gcm_manager_.reset();
...@@ -619,12 +641,6 @@ void DeviceSyncImpl::InitializeCryptAuthManagementObjects() { ...@@ -619,12 +641,6 @@ void DeviceSyncImpl::InitializeCryptAuthManagementObjects() {
identity_manager_, url_loader_factory_, identity_manager_, url_loader_factory_,
device_classifier_util::GetDeviceClassifier()); device_classifier_util::GetDeviceClassifier());
// Initialize |crypauth_device_manager_| and start observing. Start() is not
// called yet since the device has not completed enrollment.
cryptauth_device_manager_ = CryptAuthDeviceManagerImpl::Factory::NewInstance(
clock_, cryptauth_client_factory_.get(), cryptauth_gcm_manager_.get(),
profile_prefs_);
// Initialize |cryptauth_enrollment_manager_| and start observing, then call // Initialize |cryptauth_enrollment_manager_| and start observing, then call
// Start() immediately to schedule enrollment. // Start() immediately to schedule enrollment.
if (base::FeatureList::IsEnabled( if (base::FeatureList::IsEnabled(
...@@ -651,6 +667,25 @@ void DeviceSyncImpl::InitializeCryptAuthManagementObjects() { ...@@ -651,6 +667,25 @@ void DeviceSyncImpl::InitializeCryptAuthManagementObjects() {
cryptauth_gcm_manager_.get(), profile_prefs_); cryptauth_gcm_manager_.get(), profile_prefs_);
} }
// Initialize v1 and v2 CryptAuth device managers (depending on feature
// flags). Start() is not called yet since the device has not completed
// enrollment.
cryptauth_device_manager_ = CryptAuthDeviceManagerImpl::Factory::NewInstance(
clock_, cryptauth_client_factory_.get(), cryptauth_gcm_manager_.get(),
profile_prefs_);
if (ShouldUseV2DeviceSync()) {
cryptauth_device_registry_ =
CryptAuthDeviceRegistryImpl::Factory::Get()->BuildInstance(
profile_prefs_);
cryptauth_v2_device_manager_ =
CryptAuthV2DeviceManagerImpl::Factory::Get()->BuildInstance(
client_app_metadata_provider_, cryptauth_device_registry_.get(),
cryptauth_key_registry_.get(), cryptauth_client_factory_.get(),
cryptauth_gcm_manager_.get(), cryptauth_scheduler_.get());
}
cryptauth_enrollment_manager_->AddObserver(this); cryptauth_enrollment_manager_->AddObserver(this);
cryptauth_enrollment_manager_->Start(); cryptauth_enrollment_manager_->Start();
} }
...@@ -662,6 +697,9 @@ void DeviceSyncImpl::CompleteInitializationAfterSuccessfulEnrollment() { ...@@ -662,6 +697,9 @@ void DeviceSyncImpl::CompleteInitializationAfterSuccessfulEnrollment() {
// Now that enrollment has completed, the current device has been registered // Now that enrollment has completed, the current device has been registered
// with the CryptAuth back-end and can begin monitoring synced devices. // with the CryptAuth back-end and can begin monitoring synced devices.
cryptauth_device_manager_->Start(); cryptauth_device_manager_->Start();
if (ShouldUseV2DeviceSync()) {
cryptauth_v2_device_manager_->Start();
}
remote_device_provider_ = RemoteDeviceProviderImpl::Factory::NewInstance( remote_device_provider_ = RemoteDeviceProviderImpl::Factory::NewInstance(
cryptauth_device_manager_.get(), primary_account_info_.account_id, cryptauth_device_manager_.get(), primary_account_info_.account_id,
...@@ -702,6 +740,12 @@ void DeviceSyncImpl::OnSetSoftwareFeatureStateSuccess() { ...@@ -702,6 +740,12 @@ void DeviceSyncImpl::OnSetSoftwareFeatureStateSuccess() {
cryptauth_device_manager_->ForceSyncNow( cryptauth_device_manager_->ForceSyncNow(
cryptauth::INVOCATION_REASON_FEATURE_TOGGLED); cryptauth::INVOCATION_REASON_FEATURE_TOGGLED);
if (ShouldUseV2DeviceSync()) {
cryptauth_v2_device_manager_->ForceDeviceSyncNow(
cryptauthv2::ClientMetadata::FEATURE_TOGGLED,
base::nullopt /* session_id */);
}
RecordSetSoftwareFeatureStateResult(true /* success */); RecordSetSoftwareFeatureStateResult(true /* success */);
} }
......
...@@ -43,8 +43,10 @@ namespace device_sync { ...@@ -43,8 +43,10 @@ namespace device_sync {
class ClientAppMetadataProvider; class ClientAppMetadataProvider;
class CryptAuthClientFactory; class CryptAuthClientFactory;
class CryptAuthDeviceManager; class CryptAuthDeviceManager;
class CryptAuthScheduler; class CryptAuthDeviceRegistry;
class CryptAuthKeyRegistry; class CryptAuthKeyRegistry;
class CryptAuthScheduler;
class CryptAuthV2DeviceManager;
class GcmDeviceInfoProvider; class GcmDeviceInfoProvider;
class SoftwareFeatureManager; class SoftwareFeatureManager;
...@@ -221,6 +223,10 @@ class DeviceSyncImpl : public DeviceSyncBase, ...@@ -221,6 +223,10 @@ class DeviceSyncImpl : public DeviceSyncBase,
std::unique_ptr<CryptAuthKeyRegistry> cryptauth_key_registry_; std::unique_ptr<CryptAuthKeyRegistry> cryptauth_key_registry_;
std::unique_ptr<CryptAuthScheduler> cryptauth_scheduler_; std::unique_ptr<CryptAuthScheduler> cryptauth_scheduler_;
// Only created and used if v2 DeviceSync is enabled; null otherwise.
std::unique_ptr<CryptAuthDeviceRegistry> cryptauth_device_registry_;
std::unique_ptr<CryptAuthV2DeviceManager> cryptauth_v2_device_manager_;
std::unique_ptr<CryptAuthEnrollmentManager> cryptauth_enrollment_manager_; std::unique_ptr<CryptAuthEnrollmentManager> cryptauth_enrollment_manager_;
std::unique_ptr<CryptAuthDeviceManager> cryptauth_device_manager_; std::unique_ptr<CryptAuthDeviceManager> cryptauth_device_manager_;
std::unique_ptr<RemoteDeviceProvider> remote_device_provider_; std::unique_ptr<RemoteDeviceProvider> remote_device_provider_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment