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

[DeviceSync v2] Add SetFeatureStatus to DeviceSync service

Bug: 951969
Change-Id: Id12f9a7513aa73608b4b4586cd233cf5967fbb77
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1831010Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Commit-Queue: Josh Nohle <nohle@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714581}
parent 73365d6c
......@@ -14,6 +14,7 @@
#include "chromeos/services/device_sync/cryptauth_enrollment_manager.h"
#include "chromeos/services/device_sync/cryptauth_gcm_manager.h"
#include "chromeos/services/device_sync/device_sync_base.h"
#include "chromeos/services/device_sync/feature_status_change.h"
#include "chromeos/services/device_sync/network_request_error.h"
#include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h"
#include "chromeos/services/device_sync/remote_device_provider.h"
......@@ -44,6 +45,7 @@ class ClientAppMetadataProvider;
class CryptAuthClientFactory;
class CryptAuthDeviceManager;
class CryptAuthDeviceRegistry;
class CryptAuthFeatureStatusSetter;
class CryptAuthKeyRegistry;
class CryptAuthScheduler;
class CryptAuthV2DeviceManager;
......@@ -100,6 +102,10 @@ class DeviceSyncImpl : public DeviceSyncBase,
bool enabled,
bool is_exclusive,
SetSoftwareFeatureStateCallback callback) override;
void SetFeatureStatus(const std::string& device_instance_id,
multidevice::SoftwareFeature feature,
FeatureStatusChange status_change,
SetFeatureStatusCallback callback) override;
void FindEligibleDevices(multidevice::SoftwareFeature software_feature,
FindEligibleDevicesCallback callback) override;
void GetDevicesActivityStatus(
......@@ -147,6 +153,30 @@ class DeviceSyncImpl : public DeviceSyncBase,
SetSoftwareFeatureStateCallback callback_;
};
class PendingSetFeatureStatusRequest {
public:
PendingSetFeatureStatusRequest(
const std::string& device_instance_id,
multidevice::SoftwareFeature software_feature,
FeatureStatusChange status_change,
RemoteDeviceProvider* remote_device_provider,
SetFeatureStatusCallback callback);
~PendingSetFeatureStatusRequest();
// True if the device and software feature status specified in the request
// agrees with the device data returned by CryptAuth.
bool IsFulfilled() const;
void InvokeCallback(mojom::NetworkRequestResult result);
private:
std::string device_instance_id_;
multidevice::SoftwareFeature software_feature_;
FeatureStatusChange status_change_;
RemoteDeviceProvider* remote_device_provider_;
SetFeatureStatusCallback callback_;
};
DeviceSyncImpl(
signin::IdentityManager* identity_manager,
gcm::GCMDriver* gcm_driver,
......@@ -174,6 +204,9 @@ class DeviceSyncImpl : public DeviceSyncBase,
void OnSetSoftwareFeatureStateSuccess();
void OnSetSoftwareFeatureStateError(const base::UnguessableToken& request_id,
NetworkRequestError error);
void OnSetFeatureStatusSuccess();
void OnSetFeatureStatusError(const base::UnguessableToken& request_id,
NetworkRequestError error);
void OnFindEligibleDevicesSuccess(
const base::RepeatingCallback<
void(mojom::NetworkRequestResult,
......@@ -213,6 +246,9 @@ class DeviceSyncImpl : public DeviceSyncBase,
base::flat_map<base::UnguessableToken,
std::unique_ptr<PendingSetSoftwareFeatureRequest>>
id_to_pending_set_software_feature_request_map_;
base::flat_map<base::UnguessableToken,
std::unique_ptr<PendingSetFeatureStatusRequest>>
id_to_pending_set_feature_status_request_map_;
base::flat_map<base::UnguessableToken, GetDevicesActivityStatusCallback>
get_devices_activity_status_callbacks_;
......@@ -231,6 +267,7 @@ class DeviceSyncImpl : public DeviceSyncBase,
std::unique_ptr<CryptAuthDeviceManager> cryptauth_device_manager_;
std::unique_ptr<RemoteDeviceProvider> remote_device_provider_;
std::unique_ptr<SoftwareFeatureManager> software_feature_manager_;
std::unique_ptr<CryptAuthFeatureStatusSetter> feature_status_setter_;
std::unique_ptr<CryptAuthDeviceActivityGetter>
cryptauth_device_activity_getter_;
......
......@@ -39,6 +39,12 @@ void FakeDeviceSync::InvokePendingSetSoftwareFeatureStateCallback(
set_software_feature_state_callback_queue_.pop();
}
void FakeDeviceSync::InvokePendingSetFeatureStatusCallback(
mojom::NetworkRequestResult result_code) {
std::move(set_feature_status_callback_queue_.front()).Run(result_code);
set_feature_status_callback_queue_.pop();
}
void FakeDeviceSync::InvokePendingFindEligibleDevicesCallback(
mojom::NetworkRequestResult result_code,
mojom::FindEligibleDevicesResponsePtr find_eligible_devices_response_ptr) {
......@@ -89,6 +95,13 @@ void FakeDeviceSync::SetSoftwareFeatureState(
set_software_feature_state_callback_queue_.push(std::move(callback));
}
void FakeDeviceSync::SetFeatureStatus(const std::string& device_instance_id,
multidevice::SoftwareFeature feature,
FeatureStatusChange status_change,
SetFeatureStatusCallback callback) {
set_feature_status_callback_queue_.push(std::move(callback));
}
void FakeDeviceSync::FindEligibleDevices(
multidevice::SoftwareFeature software_feature,
FindEligibleDevicesCallback callback) {
......
......@@ -41,6 +41,8 @@ class FakeDeviceSync : public DeviceSyncBase {
remote_devices);
void InvokePendingSetSoftwareFeatureStateCallback(
mojom::NetworkRequestResult result_code);
void InvokePendingSetFeatureStatusCallback(
mojom::NetworkRequestResult result_code);
void InvokePendingFindEligibleDevicesCallback(
mojom::NetworkRequestResult result_code,
mojom::FindEligibleDevicesResponsePtr find_eligible_devices_response_ptr);
......@@ -62,6 +64,10 @@ class FakeDeviceSync : public DeviceSyncBase {
bool enabled,
bool is_exclusive,
SetSoftwareFeatureStateCallback callback) override;
void SetFeatureStatus(const std::string& device_instance_id,
multidevice::SoftwareFeature feature,
FeatureStatusChange status_change,
SetFeatureStatusCallback callback) override;
void FindEligibleDevices(multidevice::SoftwareFeature software_feature,
FindEligibleDevicesCallback callback) override;
void GetDebugInfo(GetDebugInfoCallback callback) override;
......@@ -77,6 +83,7 @@ class FakeDeviceSync : public DeviceSyncBase {
std::queue<GetSyncedDevicesCallback> get_synced_devices_callback_queue_;
std::queue<SetSoftwareFeatureStateCallback>
set_software_feature_state_callback_queue_;
std::queue<SetFeatureStatusCallback> set_feature_status_callback_queue_;
std::queue<FindEligibleDevicesCallback> find_eligible_devices_callback_queue_;
std::queue<GetDevicesActivityStatusCallback>
get_devices_activity_status_callback_queue_;
......
......@@ -147,12 +147,26 @@ interface DeviceSync {
// SoftwareFeature::EASY_UNLOCK_HOST and |enabled| = false, |public_key| is
// ignored, because that combination of arguments disables EASY_UNLOCK_HOST on
// all of the user's devices.
//
// TODO(https://crbug.com/1019206): Remove this function when v1 DeviceSync
// is deprecated.
SetSoftwareFeatureState(
string device_public_key,
chromeos.multidevice.mojom.SoftwareFeature software_feature,
bool enabled,
bool is_exclusive) => (NetworkRequestResult result_code);
// Enables or disables |feature| for the device with Instance ID
// |device_instance_id|.
//
// This function can only affect devices using CryptAuth v2 DeviceSync since
// it requires an Instance ID. See SetSoftwareFeatureState() for the v1
// DeviceSync analog.
SetFeatureStatus(
string device_instance_id,
chromeos.multidevice.mojom.SoftwareFeature feature,
FeatureStatusChange status_change) => (NetworkRequestResult result_code);
// Finds devices which are eligible for the given feature. When this function
// is invoked, a network request will be sent to each eligible device which
// instructs that device to enable BLE advertising; thus, this function can be
......@@ -161,6 +175,9 @@ interface DeviceSync {
// On success, this function returns a null error_code with a valid response
// to the callback; on error, it returns a valid error_code string indicating
// the reason for failure along with a null response.
//
// TODO(https://crbug.com/1019206): Remove this function when v1 DeviceSync
// is deprecated.
FindEligibleDevices(
chromeos.multidevice.mojom.SoftwareFeature software_feature) =>
(NetworkRequestResult result_code,
......
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