Commit 002c4b58 authored by Naomi Musgrave's avatar Naomi Musgrave Committed by Commit Bot

[Nearby] Implement bandwidth upgrade NearbyConnection interface

chrome/services/sharing/*
- Introduced InitiateBandwidthUpgrade to request a higher-bandwidth
  connection for a particular endpoint

chrome/browser/nearby_sharing/nearby_connections_manager*
- Browser side usage of InitiateBandwidthUpgrade.
  NearbyConnectionsManager uses InitiateBandwidthUpgrade to request
  a higher connection data rate. This is triggered by the
  NearbySharingService receiving an incoming payload.

Bug: 1076008
Change-Id: Iea1d38c4298aade06556b23baa6761cf51bb1da9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2359140Reviewed-by: default avatarAlex Chau <alexchau@chromium.org>
Reviewed-by: default avatarAlex Gough <ajgo@chromium.org>
Commit-Queue: Naomi Musgrave <nmusgrave@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799241}
parent 2ef332d6
......@@ -82,6 +82,11 @@ class MockNearbyConnections : public NearbyConnectionsMojom {
StopAllEndpoints,
(DisconnectFromEndpointCallback callback),
(override));
MOCK_METHOD(void,
InitiateBandwidthUpgrade,
(const std::string& endpoint_id,
InitiateBandwidthUpgradeCallback callback),
(override));
};
#endif // CHROME_BROWSER_NEARBY_SHARING_MOCK_NEARBY_CONNECTIONS_H_
......@@ -286,7 +286,19 @@ NearbyConnectionsManagerImpl::GetRawAuthenticationToken(
void NearbyConnectionsManagerImpl::UpgradeBandwidth(
const std::string& endpoint_id) {
// TODO(crbug/1076008): Implement.
if (!nearby_connections_)
return;
nearby_connections_->InitiateBandwidthUpgrade(
endpoint_id,
base::BindOnce(
[](const std::string& endpoint_id, ConnectionsStatus status) {
NS_LOG(VERBOSE)
<< __func__ << ": Bandwidth upgrade attempted to endpoint "
<< endpoint_id << "over Nearby Connections with result "
<< status;
},
endpoint_id));
}
void NearbyConnectionsManagerImpl::OnNearbyProfileChanged(Profile* profile) {
......
......@@ -900,6 +900,7 @@ TEST_F(NearbyConnectionsManagerImplTest, ShutdownDiscoveryConnectionFails) {
nearby_connection = connection;
run_loop.Quit();
}));
run_loop.Run();
EXPECT_FALSE(nearby_connection);
}
......@@ -909,3 +910,53 @@ TEST_F(NearbyConnectionsManagerImplTest,
EXPECT_CALL(nearby_connections_, StopAllEndpoints).Times(0);
nearby_connections_manager_.Shutdown();
}
TEST_F(NearbyConnectionsManagerImplTest,
UpgradeBandwidthAfterAdvertisingSucceeds) {
mojo::Remote<ConnectionLifecycleListener> listener_remote;
testing::NiceMock<MockIncomingConnectionListener>
incoming_connection_listener;
StartAdvertising(listener_remote, incoming_connection_listener);
// Upgrading bandwidth will succeed.
EXPECT_CALL(nearby_connections_, InitiateBandwidthUpgrade)
.WillOnce([&](const std::string& endpoint_id,
NearbyConnectionsMojom::InitiateBandwidthUpgradeCallback
callback) {
EXPECT_EQ(kRemoteEndpointId, endpoint_id);
std::move(callback).Run(Status::kSuccess);
});
nearby_connections_manager_.UpgradeBandwidth(kRemoteEndpointId);
}
TEST_F(NearbyConnectionsManagerImplTest,
UpgradeBandwidthAfterDiscoverySucceeds) {
// StartDiscovery will succeed.
mojo::Remote<EndpointDiscoveryListener> discovery_listener_remote;
testing::NiceMock<MockDiscoveryListener> discovery_listener;
StartDiscovery(discovery_listener_remote, discovery_listener);
// RequestConnection will succeed.
mojo::Remote<ConnectionLifecycleListener> connection_listener_remote;
mojo::Remote<PayloadListener> payload_listener_remote;
NearbyConnection* nearby_connection =
Connect(connection_listener_remote, payload_listener_remote,
ConnectionResponse::kAccepted);
EXPECT_TRUE(nearby_connection);
// Upgrading bandwidth will succeed.
EXPECT_CALL(nearby_connections_, InitiateBandwidthUpgrade)
.WillOnce([&](const std::string& endpoint_id,
NearbyConnectionsMojom::InitiateBandwidthUpgradeCallback
callback) {
EXPECT_EQ(kRemoteEndpointId, endpoint_id);
std::move(callback).Run(Status::kSuccess);
});
nearby_connections_manager_.UpgradeBandwidth(kRemoteEndpointId);
}
TEST_F(NearbyConnectionsManagerImplTest,
UpgradeBandwidthBeforeStartDiscoveryOrAdvertising) {
EXPECT_CALL(nearby_connections_, InitiateBandwidthUpgrade).Times(0);
nearby_connections_manager_.UpgradeBandwidth(kRemoteEndpointId);
}
......@@ -341,6 +341,13 @@ void NearbyConnections::StopAllEndpoints(StopAllEndpointsCallback callback) {
core_->StopAllEndpoints(ResultCallbackFromMojom(std::move(callback)));
}
void NearbyConnections::InitiateBandwidthUpgrade(
const std::string& endpoint_id,
InitiateBandwidthUpgradeCallback callback) {
core_->InitiateBandwidthUpgrade(endpoint_id,
ResultCallbackFromMojom(std::move(callback)));
}
base::File NearbyConnections::ExtractFileForPayload(int64_t payload_id) {
auto file_it = outgoing_file_map_.find(payload_id);
if (file_it == outgoing_file_map_.end())
......
......@@ -94,6 +94,9 @@ class NearbyConnections : public mojom::NearbyConnections {
void CancelPayload(int64_t payload_id,
CancelPayloadCallback callback) override;
void StopAllEndpoints(StopAllEndpointsCallback callback) override;
void InitiateBandwidthUpgrade(
const std::string& endpoint_id,
InitiateBandwidthUpgradeCallback callback) override;
// Return the file associated with |payload_id|.
base::File ExtractFileForPayload(int64_t payload_id);
......
......@@ -268,6 +268,16 @@ interface NearbyConnections {
// Possible return values include:
// Status::kSuccess disconnected from all endpoints successfully.
StopAllEndpoints() => (Status status);
// Sends a request to initiate connection bandwidth upgrade.
//
// endpoint_id - The identifier for the remote endpoint which will be
// switching to a higher connection data rate and possibly
// different wireless protocol. On success, calls
// ConnectionLifecycleListener::OnBandwidthChanged.
// Possible return values include:
// Status::kSuccess if upgraded successfully.
InitiateBandwidthUpgrade(string endpoint_id) => (Status status);
};
// Provide all the dependencies that NearbyConnections library requires.
......
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