Commit f2eecd43 authored by Bailey Berro's avatar Bailey Berro Committed by Chromium LUCI CQ

Introduce nearby_share.mojom.RegisterReceiveSurfaceResult

This change adds the RegisterReceiveSurfaceResult enum which is used to
provide more granular result information to RegisterReceiveSurface
callers.

Bug: 1156391
Change-Id: I6c308e71b85eab1eb52d74a9b8415a0d9231baee
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2594177
Commit-Queue: Bailey Berro <baileyberro@chromium.org>
Reviewed-by: default avatarJames Vecore <vecore@google.com>
Reviewed-by: default avatarAlex Gough <ajgo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#837704}
parent 2a3d005b
......@@ -49,11 +49,31 @@ void NearbyReceiveManager::IsInHighVisibility(
void NearbyReceiveManager::RegisterForegroundReceiveSurface(
RegisterForegroundReceiveSurfaceCallback callback) {
bool success =
NearbySharingService::StatusCodes::kOk ==
const NearbySharingService::StatusCodes result =
nearby_sharing_service_->RegisterReceiveSurface(
this, NearbySharingService::ReceiveSurfaceState::kForeground);
std::move(callback).Run(success);
switch (result) {
case NearbySharingService::StatusCodes::kOk:
std::move(callback).Run(
nearby_share::mojom::RegisterReceiveSurfaceResult::kSuccess);
return;
case NearbySharingService::StatusCodes::kError:
case NearbySharingService::StatusCodes::kOutOfOrderApiCall:
case NearbySharingService::StatusCodes::kStatusAlreadyStopped:
std::move(callback).Run(
nearby_share::mojom::RegisterReceiveSurfaceResult::kFailure);
return;
case NearbySharingService::StatusCodes::kTransferAlreadyInProgress:
std::move(callback).Run(
nearby_share::mojom::RegisterReceiveSurfaceResult::
kTransferInProgress);
return;
case NearbySharingService::StatusCodes::kNoAvailableConnectionMedium:
std::move(callback).Run(
nearby_share::mojom::RegisterReceiveSurfaceResult::
kNoConnectionMedium);
return;
}
}
void NearbyReceiveManager::UnregisterForegroundReceiveSurface(
......
......@@ -40,6 +40,8 @@ class NearbyReceiveManagerTest : public testing::Test {
public:
using ReceiveSurfaceState = NearbySharingService::ReceiveSurfaceState;
using StatusCodes = NearbySharingService::StatusCodes;
using RegisterReceiveSurfaceResult =
nearby_share::mojom::RegisterReceiveSurfaceResult;
NearbyReceiveManagerTest()
: transfer_metadata_(TransferMetadata::Status::kAwaitingLocalConfirmation,
......@@ -110,9 +112,9 @@ class NearbyReceiveManagerTest : public testing::Test {
TEST_F(NearbyReceiveManagerTest, Enter_Exit_Success) {
ExpectRegister();
bool success = false;
receive_manager_waiter_.RegisterForegroundReceiveSurface(&success);
EXPECT_TRUE(success);
RegisterReceiveSurfaceResult result = RegisterReceiveSurfaceResult::kFailure;
receive_manager_waiter_.RegisterForegroundReceiveSurface(&result);
EXPECT_EQ(RegisterReceiveSurfaceResult::kSuccess, result);
ExpectUnregister();
bool exited = false;
......@@ -123,39 +125,39 @@ TEST_F(NearbyReceiveManagerTest, Enter_Exit_Success) {
}
TEST_F(NearbyReceiveManagerTest, Enter_Failed) {
bool success = true;
RegisterReceiveSurfaceResult result = RegisterReceiveSurfaceResult::kSuccess;
ExpectRegister(StatusCodes::kError);
receive_manager_waiter_.RegisterForegroundReceiveSurface(&success);
EXPECT_FALSE(success);
receive_manager_waiter_.RegisterForegroundReceiveSurface(&result);
EXPECT_EQ(RegisterReceiveSurfaceResult::kFailure, result);
ExpectUnregister();
}
TEST_F(NearbyReceiveManagerTest, Multiple_Enter_Successful) {
bool success = false;
RegisterReceiveSurfaceResult result = RegisterReceiveSurfaceResult::kFailure;
ExpectRegister(StatusCodes::kOk);
receive_manager_waiter_.RegisterForegroundReceiveSurface(&success);
receive_manager_waiter_.RegisterForegroundReceiveSurface(&result);
FlushMojoMessages();
EXPECT_TRUE(success);
EXPECT_EQ(RegisterReceiveSurfaceResult::kSuccess, result);
success = false;
result = RegisterReceiveSurfaceResult::kFailure;
ExpectRegister(StatusCodes::kOk);
receive_manager_waiter_.RegisterForegroundReceiveSurface(&success);
receive_manager_waiter_.RegisterForegroundReceiveSurface(&result);
FlushMojoMessages();
EXPECT_TRUE(success);
EXPECT_EQ(RegisterReceiveSurfaceResult::kSuccess, result);
ExpectUnregister();
}
TEST_F(NearbyReceiveManagerTest, Exit_Failed) {
bool success = false;
RegisterReceiveSurfaceResult result = RegisterReceiveSurfaceResult::kFailure;
ExpectRegister();
receive_manager_waiter_.RegisterForegroundReceiveSurface(&success);
EXPECT_TRUE(success);
receive_manager_waiter_.RegisterForegroundReceiveSurface(&result);
EXPECT_EQ(RegisterReceiveSurfaceResult::kSuccess, result);
ExpectUnregister(StatusCodes::kError);
success = false;
receive_manager_waiter_.UnregisterForegroundReceiveSurface(&success);
EXPECT_FALSE(success);
bool exited = false;
receive_manager_waiter_.UnregisterForegroundReceiveSurface(&exited);
EXPECT_FALSE(exited);
ExpectUnregister();
}
......
......@@ -131,6 +131,19 @@ enum StartDiscoveryResult {
kErrorGeneric,
};
// This enum represents the different possible results when registering a
// Receive Surface.
enum RegisterReceiveSurfaceResult {
// Succeeded.
kSuccess,
// Failed.
kFailure,
// Bluetooth and Wi-Fi are unavailable.
kNoConnectionMedium,
// There is already a transfer in progress.
kTransferInProgress,
};
// Manager interface for nearby device discovery. Implemented on the browser
// process and used by UI surfaces. The discovery manager is also responsible
// for previewing the current share with GetPayloadPreview() so the user can
......@@ -196,11 +209,11 @@ interface ReceiveManager {
IsInHighVisibility() => (bool in_high_visibility);
// Attempt to register the receive manager as a foreground receive surface.
// If |success| is true, then the surface has been registered; otherwise it
// If |result| is kSuccess, then the surface has been registered; otherwise it
// has not been registered. The foreground surface receives incoming
// shares, and once one is registered, high visibility will become active
// after a short while. Calling multiple times will have no additional effect.
RegisterForegroundReceiveSurface() => (bool success);
RegisterForegroundReceiveSurface() => (RegisterReceiveSurfaceResult result);
// Attempt to unregister the receive manager as a foreground receive surface.
// If |success| is true, then the surface is no longer registered; otherwise,
......
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