Clean outgoing share targets when last send surface is unregistered.

PiperOrigin-RevId: 708048158
This commit is contained in:
Francis Tsui
2024-12-19 15:10:36 -08:00
committed by Copybara-Service
parent b1ef67dae9
commit 844a17c9fb
2 changed files with 22 additions and 15 deletions
+21 -14
View File
@@ -510,14 +510,14 @@ void NearbySharingServiceImpl::RegisterSendSurface(
// Let newly registered send surface catch up with discovered share
// targets from current scanning session.
if (is_scanning_) {
// if (is_scanning_) {
for (const auto& item : outgoing_share_target_map_) {
LOG(INFO) << "Reporting discovered target "
<< item.second.ToString()
<< " when registering send surface";
wrapped_callback.OnShareTargetDiscovered(item.second);
}
}
// }
// Set Share Start time for Foreground Send Surfaces
if (state == SendSurfaceState::kForeground) {
@@ -868,7 +868,9 @@ void NearbySharingServiceImpl::Reject(
RunOnNearbySharingServiceThreadDelayed(
"incoming_rejection_delay", kIncomingRejectionDelay,
[this, share_target_id]() { CloseConnection(share_target_id); });
[this, endpoint_id = session->endpoint_id()]() {
CloseConnection(endpoint_id);
});
// kRejected status already sent below, no need to send on disconnect.
session->set_disconnect_status(TransferMetadata::Status::kUnknown);
@@ -957,9 +959,9 @@ void NearbySharingServiceImpl::DoCancel(
RunOnNearbySharingServiceThreadDelayed(
"initiator_cancel_delay", kInitiatorCancelDelay,
[this, share_target_id]() {
[this, endpoint_id = session->endpoint_id()]() {
LOG(INFO) << "Close connection after cancellation delay.";
CloseConnection(share_target_id);
CloseConnection(endpoint_id);
});
session->WriteCancelFrame();
@@ -1109,6 +1111,17 @@ NearbySharingServiceImpl::InternalUnregisterSendSurface(
share_target, attachment_container, transfer_metadata);
}
}
if (foreground_send_surface_map_.empty() &&
background_send_surface_map_.empty()) {
LOG(INFO) << __func__ << ": Last send surface has been unregistered";
// Clear outgoing_share_targets, outgoing_share_sessions and
// discovery_cache.
while (!outgoing_share_target_map_.empty()) {
RemoveOutgoingShareTargetWithEndpointId(
outgoing_share_target_map_.begin()->first);
}
discovery_cache_.clear();
}
VLOG(1) << __func__ << ": A SendSurface has been unregistered: "
<< SendSurfaceStateToString(state);
@@ -2489,7 +2502,7 @@ void NearbySharingServiceImpl::Fail(IncomingShareSession& session,
RunOnNearbySharingServiceThreadDelayed(
"incoming_rejection_delay", kIncomingRejectionDelay,
absl::bind_front(&NearbySharingServiceImpl::CloseConnection, this,
session.share_target().id));
session.endpoint_id()));
session.SendFailureResponse(status);
}
@@ -2648,14 +2661,8 @@ void NearbySharingServiceImpl::OnOutgoingTransferUpdate(
}
}
void NearbySharingServiceImpl::CloseConnection(int64_t share_target_id) {
ShareSession* session = GetShareSession(share_target_id);
if (session != nullptr && session->IsConnected()) {
session->Disconnect();
return;
}
LOG(WARNING) << __func__ << ": Invalid connection for target - "
<< share_target_id;
void NearbySharingServiceImpl::CloseConnection(absl::string_view endpoint_id) {
nearby_connections_manager_->Disconnect(endpoint_id);
}
void NearbySharingServiceImpl::OnIncomingDecryptedCertificate(
+1 -1
View File
@@ -327,7 +327,7 @@ class NearbySharingServiceImpl
const TransferMetadata& metadata);
void OnOutgoingTransferUpdate(OutgoingShareSession& session,
const TransferMetadata& metadata);
void CloseConnection(int64_t share_target_id);
void CloseConnection(absl::string_view endpoint_id);
void OnIncomingDecryptedCertificate(
absl::string_view endpoint_id, const Advertisement& advertisement,
int64_t placeholder_share_target_id,