Commit 32ae4305 authored by Josh Nohle's avatar Josh Nohle Committed by Commit Bot

[Nearby] Add GetDeviceState to HTTP client

Add support for GetDeviceState RPC in the HTTP client and the HTTP tab
of chrome://nearby-internals. The proto was added in a previous CL, and
the RPC will be called in a follow-up CL.

Bug: b/166115703
Change-Id: Id6965c5e59a1ee892737df398425eb4ece9d5ab1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2399505
Auto-Submit: Josh Nohle <nohle@chromium.org>
Commit-Queue: James Vecore <vecore@google.com>
Reviewed-by: default avatarJames Vecore <vecore@google.com>
Cr-Commit-Position: refs/heads/master@{#805197}
parent 5f3103a0
......@@ -19,6 +19,20 @@ FakeNearbyShareClient::UpdateDeviceRequest::UpdateDeviceRequest(
FakeNearbyShareClient::UpdateDeviceRequest::~UpdateDeviceRequest() = default;
FakeNearbyShareClient::GetDeviceStateRequest::GetDeviceStateRequest(
const nearbyshare::proto::GetDeviceStateRequest& request,
GetDeviceStateCallback&& callback,
ErrorCallback&& error_callback)
: request(request),
callback(std::move(callback)),
error_callback(std::move(error_callback)) {}
FakeNearbyShareClient::GetDeviceStateRequest::GetDeviceStateRequest(
FakeNearbyShareClient::GetDeviceStateRequest&& request) = default;
FakeNearbyShareClient::GetDeviceStateRequest::~GetDeviceStateRequest() =
default;
FakeNearbyShareClient::CheckContactsReachabilityRequest::
CheckContactsReachabilityRequest(
const nearbyshare::proto::CheckContactsReachabilityRequest& request,
......@@ -83,6 +97,14 @@ void FakeNearbyShareClient::UpdateDevice(
std::move(error_callback));
}
void FakeNearbyShareClient::GetDeviceState(
const nearbyshare::proto::GetDeviceStateRequest& request,
GetDeviceStateCallback&& callback,
ErrorCallback&& error_callback) {
get_device_state_requests_.emplace_back(request, std::move(callback),
std::move(error_callback));
}
void FakeNearbyShareClient::CheckContactsReachability(
const nearbyshare::proto::CheckContactsReachabilityRequest& request,
CheckContactsReachabilityCallback&& callback,
......
......@@ -28,6 +28,17 @@ class FakeNearbyShareClient : public NearbyShareClient {
UpdateDeviceCallback callback;
ErrorCallback error_callback;
};
struct GetDeviceStateRequest {
GetDeviceStateRequest(
const nearbyshare::proto::GetDeviceStateRequest& request,
GetDeviceStateCallback&& callback,
ErrorCallback&& error_callback);
GetDeviceStateRequest(GetDeviceStateRequest&& request);
~GetDeviceStateRequest();
nearbyshare::proto::GetDeviceStateRequest request;
GetDeviceStateCallback callback;
ErrorCallback error_callback;
};
struct CheckContactsReachabilityRequest {
CheckContactsReachabilityRequest(
const nearbyshare::proto::CheckContactsReachabilityRequest& request,
......@@ -69,6 +80,9 @@ class FakeNearbyShareClient : public NearbyShareClient {
std::vector<UpdateDeviceRequest>& update_device_requests() {
return update_device_requests_;
}
std::vector<GetDeviceStateRequest>& get_device_state_requests() {
return get_device_state_requests_;
}
std::vector<CheckContactsReachabilityRequest>&
check_contacts_reachabilty_requests() {
return check_contacts_reachabilty_requests_;
......@@ -88,6 +102,9 @@ class FakeNearbyShareClient : public NearbyShareClient {
void UpdateDevice(const nearbyshare::proto::UpdateDeviceRequest& request,
UpdateDeviceCallback&& callback,
ErrorCallback&& error_callback) override;
void GetDeviceState(const nearbyshare::proto::GetDeviceStateRequest& request,
GetDeviceStateCallback&& callback,
ErrorCallback&& error_callback) override;
void CheckContactsReachability(
const nearbyshare::proto::CheckContactsReachabilityRequest& request,
CheckContactsReachabilityCallback&& callback,
......@@ -103,6 +120,7 @@ class FakeNearbyShareClient : public NearbyShareClient {
std::string GetAccessTokenUsed() override;
std::vector<UpdateDeviceRequest> update_device_requests_;
std::vector<GetDeviceStateRequest> get_device_state_requests_;
std::vector<CheckContactsReachabilityRequest>
check_contacts_reachabilty_requests_;
std::vector<ListContactPeopleRequest> list_contact_people_requests_;
......
......@@ -15,6 +15,8 @@ namespace nearbyshare {
namespace proto {
class CheckContactsReachabilityRequest;
class CheckContactsReachabilityResponse;
class GetDeviceStateRequest;
class GetDeviceStateResponse;
class ListContactPeopleRequest;
class ListContactPeopleResponse;
class ListPublicCertificatesRequest;
......@@ -33,6 +35,8 @@ class NearbyShareClient {
using CheckContactsReachabilityCallback = base::OnceCallback<void(
const nearbyshare::proto::CheckContactsReachabilityResponse&)>;
using ErrorCallback = base::OnceCallback<void(NearbyShareHttpError)>;
using GetDeviceStateCallback = base::OnceCallback<void(
const nearbyshare::proto::GetDeviceStateResponse&)>;
using ListContactPeopleCallback = base::OnceCallback<void(
const nearbyshare::proto::ListContactPeopleResponse&)>;
using ListPublicCertificatesCallback = base::OnceCallback<void(
......@@ -49,6 +53,12 @@ class NearbyShareClient {
UpdateDeviceCallback&& callback,
ErrorCallback&& error_callback) = 0;
// NearbyShareService v1: GetDeviceState
virtual void GetDeviceState(
const nearbyshare::proto::GetDeviceStateRequest& request,
GetDeviceStateCallback&& callback,
ErrorCallback&& error_callback) = 0;
// NearbyShareService v1: CheckContactsReachability
virtual void CheckContactsReachability(
const nearbyshare::proto::CheckContactsReachabilityRequest& request,
......
......@@ -36,6 +36,7 @@ const char kDefaultNearbyShareV1HTTPHost[] =
const char kNearbyShareV1Path[] = "v1/";
const char kCheckContactsReachabilityPath[] = "contactsReachability:check";
const char kGetDeviceStatePath[] = "deviceState";
const char kListContactPeoplePath[] = "contactRecords";
const char kListPublicCertificatesPath[] = "publicCertificates";
......@@ -240,6 +241,22 @@ void NearbyShareClientImpl::UpdateDevice(
GetUpdateDeviceAnnotation());
}
void NearbyShareClientImpl::GetDeviceState(
const nearbyshare::proto::GetDeviceStateRequest& request,
GetDeviceStateCallback&& callback,
ErrorCallback&& error_callback) {
notifier_->NotifyOfRequest(request);
// NOTE: No query parameters are needed because the lone field, "parent", of
// the GetDeviceState request is bound by the URL path template defined by the
// Nearby Share server.
MakeApiCall(CreateV1RequestUrl(request.parent() + "/" + kGetDeviceStatePath),
RequestType::kGet,
/*serialized_request=*/base::nullopt,
NearbyShareApiCallFlow::QueryParameters(), std::move(callback),
std::move(error_callback), GetContactsAnnotation());
}
void NearbyShareClientImpl::CheckContactsReachability(
const nearbyshare::proto::CheckContactsReachabilityRequest& request,
CheckContactsReachabilityCallback&& callback,
......
......@@ -52,6 +52,9 @@ class NearbyShareClientImpl : public NearbyShareClient {
void UpdateDevice(const nearbyshare::proto::UpdateDeviceRequest& request,
UpdateDeviceCallback&& callback,
ErrorCallback&& error_callback) override;
void GetDeviceState(const nearbyshare::proto::GetDeviceStateRequest& request,
GetDeviceStateCallback&& callback,
ErrorCallback&& error_callback) override;
void CheckContactsReachability(
const nearbyshare::proto::CheckContactsReachabilityRequest& request,
CheckContactsReachabilityCallback&& callback,
......
......@@ -213,6 +213,16 @@ class NearbyShareClientImplTest : public testing::Test,
update_device_response_from_notifier_ = response;
}
void OnGetDeviceStateRequest(
const nearbyshare::proto::GetDeviceStateRequest& request) override {
get_device_state_request_from_notifier_ = request;
}
void OnGetDeviceStateResponse(
const nearbyshare::proto::GetDeviceStateResponse& response) override {
get_device_state_response_from_notifier_ = response;
}
void OnListContactPeopleRequest(
const nearbyshare::proto::ListContactPeopleRequest& request) override {
list_contact_people_request_from_notifier_ = request;
......@@ -286,6 +296,21 @@ class NearbyShareClientImplTest : public testing::Test,
update_device_response_from_notifier_->SerializeAsString());
}
void VerifyRequestNotification(
const nearbyshare::proto::GetDeviceStateRequest& expected_request) const {
ASSERT_TRUE(get_device_state_request_from_notifier_);
EXPECT_EQ(expected_request.SerializeAsString(),
get_device_state_request_from_notifier_->SerializeAsString());
}
void VerifyResponseNotification(
const nearbyshare::proto::GetDeviceStateResponse& expected_response)
const {
ASSERT_TRUE(get_device_state_response_from_notifier_);
EXPECT_EQ(expected_response.SerializeAsString(),
get_device_state_response_from_notifier_->SerializeAsString());
}
void VerifyRequestNotification(
const nearbyshare::proto::ListContactPeopleRequest& expected_request)
const {
......@@ -343,6 +368,10 @@ class NearbyShareClientImplTest : public testing::Test,
update_device_request_from_notifier_;
base::Optional<nearbyshare::proto::UpdateDeviceResponse>
update_device_response_from_notifier_;
base::Optional<nearbyshare::proto::GetDeviceStateRequest>
get_device_state_request_from_notifier_;
base::Optional<nearbyshare::proto::GetDeviceStateResponse>
get_device_state_response_from_notifier_;
base::Optional<nearbyshare::proto::ListContactPeopleRequest>
list_contact_people_request_from_notifier_;
base::Optional<nearbyshare::proto::ListContactPeopleResponse>
......@@ -445,6 +474,61 @@ TEST_F(NearbyShareClientImplTest, UpdateDeviceFailure) {
EXPECT_EQ(NearbyShareHttpError::kInternalServerError, error);
}
TEST_F(NearbyShareClientImplTest, GetDeviceStateSuccess) {
nearbyshare::proto::GetDeviceStateResponse result_proto;
nearbyshare::proto::GetDeviceStateRequest request_proto;
request_proto.set_parent(kDeviceIdPath);
client_->GetDeviceState(
request_proto,
base::BindOnce(
&SaveResultConstRef<nearbyshare::proto::GetDeviceStateResponse>,
&result_proto),
base::BindOnce(&NotCalled<NearbyShareHttpError>));
identity_test_environment_
.WaitForAccessTokenRequestIfNecessaryAndRespondWithToken(
kAccessToken, base::Time::Max());
VerifyRequestNotification(request_proto);
EXPECT_EQ(kGet, http_method());
EXPECT_EQ(request_url(), std::string(kTestGoogleApisUrl) + "/v1/" +
std::string(kDeviceIdPath) + "/deviceState");
nearbyshare::proto::GetDeviceStateRequest expected_request;
EXPECT_EQ(NearbyShareApiCallFlow::QueryParameters(),
request_as_query_parameters());
nearbyshare::proto::GetDeviceStateResponse response_proto;
response_proto.set_are_contacts_changed(true);
FinishApiCallFlow(&response_proto);
VerifyResponseNotification(response_proto);
// Check that the result received in callback is the same as the response.
ASSERT_EQ(true, result_proto.are_contacts_changed());
}
TEST_F(NearbyShareClientImplTest, GetDeviceStateFailure) {
nearbyshare::proto::GetDeviceStateRequest request;
request.set_parent(kDeviceIdPath);
NearbyShareHttpError error;
client_->GetDeviceState(
request,
base::BindOnce(
&NotCalledConstRef<nearbyshare::proto::GetDeviceStateResponse>),
base::BindOnce(&SaveResult<NearbyShareHttpError>, &error));
identity_test_environment_
.WaitForAccessTokenRequestIfNecessaryAndRespondWithToken(
kAccessToken, base::Time::Max());
EXPECT_EQ(kGet, http_method());
EXPECT_EQ(request_url(), std::string(kTestGoogleApisUrl) + "/v1/" +
std::string(kDeviceIdPath) + "/deviceState");
FailApiCallFlow(NearbyShareHttpError::kInternalServerError);
EXPECT_EQ(NearbyShareHttpError::kInternalServerError, error);
}
TEST_F(NearbyShareClientImplTest, CheckContactsReachabilitySuccess) {
nearbyshare::proto::CheckContactsReachabilityResponse result_proto;
nearbyshare::proto::CheckContactsReachabilityRequest request_proto;
......
......@@ -28,6 +28,18 @@ void NearbyShareHttpNotifier::NotifyOfResponse(
observer.OnUpdateDeviceResponse(response);
}
void NearbyShareHttpNotifier::NotifyOfRequest(
const nearbyshare::proto::GetDeviceStateRequest& request) {
for (auto& observer : observers_)
observer.OnGetDeviceStateRequest(request);
}
void NearbyShareHttpNotifier::NotifyOfResponse(
const nearbyshare::proto::GetDeviceStateResponse& response) {
for (auto& observer : observers_)
observer.OnGetDeviceStateResponse(response);
}
void NearbyShareHttpNotifier::NotifyOfRequest(
const nearbyshare::proto::ListContactPeopleRequest& request) {
for (auto& observer : observers_)
......
......@@ -22,6 +22,10 @@ class NearbyShareHttpNotifier {
const nearbyshare::proto::UpdateDeviceRequest& request) = 0;
virtual void OnUpdateDeviceResponse(
const nearbyshare::proto::UpdateDeviceResponse& response) = 0;
virtual void OnGetDeviceStateRequest(
const nearbyshare::proto::GetDeviceStateRequest& request) = 0;
virtual void OnGetDeviceStateResponse(
const nearbyshare::proto::GetDeviceStateResponse& response) = 0;
virtual void OnListContactPeopleRequest(
const nearbyshare::proto::ListContactPeopleRequest& request) = 0;
virtual void OnListContactPeopleResponse(
......@@ -48,6 +52,8 @@ class NearbyShareHttpNotifier {
// Sends |request| to all observers.
void NotifyOfRequest(const nearbyshare::proto::UpdateDeviceRequest& request);
void NotifyOfRequest(
const nearbyshare::proto::GetDeviceStateRequest& request);
void NotifyOfRequest(
const nearbyshare::proto::CheckContactsReachabilityRequest& request);
void NotifyOfRequest(
......@@ -58,6 +64,8 @@ class NearbyShareHttpNotifier {
// Sends |response| to all observers.
void NotifyOfResponse(
const nearbyshare::proto::UpdateDeviceResponse& response);
void NotifyOfResponse(
const nearbyshare::proto::GetDeviceStateResponse& response);
void NotifyOfResponse(
const nearbyshare::proto::ListContactPeopleResponse& response);
void NotifyOfResponse(
......
......@@ -255,3 +255,17 @@ base::Value EncryptedMetadataToReadableDictionary(
dict.SetStringKey("obfuscated_gaia_id", data.obfuscated_gaia_id());
return dict;
}
base::Value GetDeviceStateRequestToReadableDictionary(
const nearbyshare::proto::GetDeviceStateRequest& request) {
base::Value dict(base::Value::Type::DICTIONARY);
dict.SetStringKey("parent", request.parent());
return dict;
}
base::Value GetDeviceStateResponseToReadableDictionary(
const nearbyshare::proto::GetDeviceStateResponse& response) {
base::Value dict(base::Value::Type::DICTIONARY);
dict.SetBoolKey("are_contacts_changed", response.are_contacts_changed());
return dict;
}
......@@ -53,5 +53,9 @@ base::Value UpdateDeviceResponseToReadableDictionary(
const nearbyshare::proto::UpdateDeviceResponse& response);
base::Value EncryptedMetadataToReadableDictionary(
const nearbyshare::proto::EncryptedMetadata& data);
base::Value GetDeviceStateRequestToReadableDictionary(
const nearbyshare::proto::GetDeviceStateRequest& request);
base::Value GetDeviceStateResponseToReadableDictionary(
const nearbyshare::proto::GetDeviceStateResponse& response);
#endif // CHROME_BROWSER_NEARBY_SHARING_LOGGING_PROTO_TO_DICTIONARY_CONVERSION_H_
......@@ -47,14 +47,17 @@ Polymer({
*/
rpcToString_(rpc) {
switch (rpc) {
case Rpc.DEVICE:
return 'UpdateDevice RPC';
case Rpc.CERTIFICATE:
return 'ListPublicCertificates RPC';
break;
case Rpc.CONTACT:
return 'ListContactPeople RPC';
break;
case Rpc.CERTIFICATE:
return 'ListPublicCertificates RPC';
case Rpc.DEVICE:
return 'UpdateDevice RPC';
break;
case Rpc.DEVICE_STATE:
return 'GetDeviceState RPC';
break;
default:
break;
......
......@@ -35,7 +35,8 @@ export let LogMessage;
export const Rpc = {
CERTIFICATE: 0,
CONTACT: 1,
DEVICE: 2
DEVICE: 2,
DEVICE_STATE: 3
};
/**
......
......@@ -24,15 +24,13 @@ namespace {
enum class Rpc {
kCertificate = 0,
kContact = 1,
kDevice = 2
kDevice = 2,
kDeviceState = 3
};
// This enum class needs to stay in sync with the Direction definition in
// chrome/browser/resources/nearby_internals/types.js.
enum class Direction {
kRequest = 0,
kResponse = 1
};
enum class Direction { kRequest = 0, kResponse = 1 };
std::string FormatAsJSON(const base::Value& value) {
std::string json;
......@@ -162,6 +160,22 @@ void NearbyInternalsHttpHandler::OnUpdateDeviceResponse(
Direction::kResponse, Rpc::kDevice));
}
void NearbyInternalsHttpHandler::OnGetDeviceStateRequest(
const nearbyshare::proto::GetDeviceStateRequest& request) {
FireWebUIListener(kHttpMessageAdded,
HttpMessageToDictionary(
GetDeviceStateRequestToReadableDictionary(request),
Direction::kRequest, Rpc::kDeviceState));
}
void NearbyInternalsHttpHandler::OnGetDeviceStateResponse(
const nearbyshare::proto::GetDeviceStateResponse& response) {
FireWebUIListener(kHttpMessageAdded,
HttpMessageToDictionary(
GetDeviceStateResponseToReadableDictionary(response),
Direction::kResponse, Rpc::kDeviceState));
}
void NearbyInternalsHttpHandler::OnListContactPeopleRequest(
const nearbyshare::proto::ListContactPeopleRequest& request) {
FireWebUIListener(kHttpMessageAdded,
......
......@@ -42,6 +42,10 @@ class NearbyInternalsHttpHandler : public content::WebUIMessageHandler,
const nearbyshare::proto::UpdateDeviceRequest& request) override;
void OnUpdateDeviceResponse(
const nearbyshare::proto::UpdateDeviceResponse& response) override;
void OnGetDeviceStateRequest(
const nearbyshare::proto::GetDeviceStateRequest& request) override;
void OnGetDeviceStateResponse(
const nearbyshare::proto::GetDeviceStateResponse& response) override;
void OnListContactPeopleRequest(
const nearbyshare::proto::ListContactPeopleRequest& request) override;
void OnListContactPeopleResponse(
......
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