diff --git a/sharing/incoming_share_session.cc b/sharing/incoming_share_session.cc index 3555e526..3fe1b384 100644 --- a/sharing/incoming_share_session.cc +++ b/sharing/incoming_share_session.cc @@ -50,34 +50,33 @@ using ::nearby::sharing::service::proto::WifiCredentials; } // namespace -IncomingShareTargetInfo::IncomingShareTargetInfo( +IncomingShareSession::IncomingShareSession( std::string endpoint_id, const ShareTarget& share_target, - std::function + std::function transfer_update_callback) - : ShareTargetInfo(std::move(endpoint_id), share_target), + : ShareSession(std::move(endpoint_id), share_target), transfer_update_callback_(std::move(transfer_update_callback)) {} -IncomingShareTargetInfo::IncomingShareTargetInfo(IncomingShareTargetInfo&&) = +IncomingShareSession::IncomingShareSession(IncomingShareSession&&) = default; + +IncomingShareSession& IncomingShareSession::operator=(IncomingShareSession&&) = default; -IncomingShareTargetInfo& IncomingShareTargetInfo::operator=( - IncomingShareTargetInfo&&) = default; +IncomingShareSession::~IncomingShareSession() = default; -IncomingShareTargetInfo::~IncomingShareTargetInfo() = default; - -void IncomingShareTargetInfo::InvokeTransferUpdateCallback( +void IncomingShareSession::InvokeTransferUpdateCallback( const TransferMetadata& metadata) { transfer_update_callback_(*this, metadata); } -bool IncomingShareTargetInfo::OnNewConnection(NearbyConnection* connection) { +bool IncomingShareSession::OnNewConnection(NearbyConnection* connection) { set_disconnect_status( TransferMetadata::Status::kAwaitingRemoteAcceptanceFailed); return true; } std::optional -IncomingShareTargetInfo::ProcessIntroduction( +IncomingShareSession::ProcessIntroduction( const IntroductionFrame& introduction_frame) { int64_t file_size_sum = 0; AttachmentContainer& container = mutable_attachment_container(); @@ -149,20 +148,20 @@ IncomingShareTargetInfo::ProcessIntroduction( return std::nullopt; } -void IncomingShareTargetInfo::RegisterPayloadListener( - Context* context, - NearbyConnectionsManager& connections_manager, +void IncomingShareSession::RegisterPayloadListener( + Context* context, NearbyConnectionsManager& connections_manager, std::function update_callback) { const absl::flat_hash_map& payload_map = attachment_payload_map(); set_payload_tracker(std::make_shared( - context, share_target().id, attachment_container(), - payload_map, std::move(update_callback))); + context, share_target().id, attachment_container(), payload_map, + std::move(update_callback))); // Register status listener for all payloads. for (auto it = payload_map.begin(); it != payload_map.end(); ++it) { - NL_VLOG(1) << __func__ << ": Started listening for progress on payload: " - << it->second << " for attachment: " << it->first; + NL_VLOG(1) << __func__ + << ": Started listening for progress on payload: " << it->second + << " for attachment: " << it->first; connections_manager.RegisterPayloadStatusListener(it->second, payload_tracker()); @@ -172,7 +171,7 @@ void IncomingShareTargetInfo::RegisterPayloadListener( } } -bool IncomingShareTargetInfo::UpdateFilePayloadPaths( +bool IncomingShareSession::UpdateFilePayloadPaths( const NearbyConnectionsManager& connections_manager) { AttachmentContainer& container = mutable_attachment_container(); bool result = true; @@ -207,7 +206,7 @@ bool IncomingShareTargetInfo::UpdateFilePayloadPaths( return result; } -bool IncomingShareTargetInfo::UpdatePayloadContents( +bool IncomingShareSession::UpdatePayloadContents( const NearbyConnectionsManager& connections_manager) { if (!UpdateFilePayloadPaths(connections_manager)) { return false; @@ -291,7 +290,7 @@ bool IncomingShareTargetInfo::UpdatePayloadContents( return true; } -bool IncomingShareTargetInfo::FinalizePayloads( +bool IncomingShareSession::FinalizePayloads( const NearbyConnectionsManager& connections_manager) { if (!UpdatePayloadContents(connections_manager)) { mutable_attachment_container().ClearAttachments(); @@ -300,8 +299,8 @@ bool IncomingShareTargetInfo::FinalizePayloads( return true; } -std::vector -IncomingShareTargetInfo::GetPayloadFilePaths() const { +std::vector IncomingShareSession::GetPayloadFilePaths() + const { std::vector file_paths; const AttachmentContainer& container = attachment_container(); const absl::flat_hash_map& attachment_paylod_map = diff --git a/sharing/incoming_share_session.h b/sharing/incoming_share_session.h index e6e3ea56..93b3628d 100644 --- a/sharing/incoming_share_session.h +++ b/sharing/incoming_share_session.h @@ -26,22 +26,23 @@ #include "sharing/nearby_connection.h" #include "sharing/nearby_connections_manager.h" #include "sharing/proto/wire_format.pb.h" -#include "sharing/share_target.h" #include "sharing/share_session.h" +#include "sharing/share_target.h" #include "sharing/transfer_metadata.h" namespace nearby::sharing { -class IncomingShareTargetInfo : public ShareTargetInfo { +// Class that represents a single incoming share session. +// This class is thread-compatible. +class IncomingShareSession : public ShareSession { public: - IncomingShareTargetInfo(std::string endpoint_id, - const ShareTarget& share_target, - std::function - transfer_update_callback); - IncomingShareTargetInfo(IncomingShareTargetInfo&&); - IncomingShareTargetInfo& operator=(IncomingShareTargetInfo&&); - ~IncomingShareTargetInfo() override; + IncomingShareSession( + std::string endpoint_id, const ShareTarget& share_target, + std::function + transfer_update_callback); + IncomingShareSession(IncomingShareSession&&); + IncomingShareSession& operator=(IncomingShareSession&&); + ~IncomingShareSession() override; bool IsIncoming() const override { return true; } @@ -57,8 +58,7 @@ class IncomingShareTargetInfo : public ShareTargetInfo { const NearbyConnectionsManager& connections_manager); void RegisterPayloadListener( - Context* context, - NearbyConnectionsManager& connections_manager, + Context* context, NearbyConnectionsManager& connections_manager, std::function update_callback); // Once transfer has completed, make payload content available in the @@ -78,7 +78,7 @@ class IncomingShareTargetInfo : public ShareTargetInfo { bool UpdatePayloadContents( const NearbyConnectionsManager& connections_manager); - std::function + std::function transfer_update_callback_; }; diff --git a/sharing/incoming_share_session_test.cc b/sharing/incoming_share_session_test.cc index 92b6c326..71ac57a9 100644 --- a/sharing/incoming_share_session_test.cc +++ b/sharing/incoming_share_session_test.cc @@ -83,11 +83,11 @@ std::unique_ptr CreateWifiCredentialsPayload( wifi_payload->id = payload_id; return wifi_payload; } -class IncomingShareTargetInfoTest : public ::testing::Test { +class IncomingShareSessionTest : public ::testing::Test { protected: - IncomingShareTargetInfoTest() - : info_(std::string(kEndpointId), share_target_, - [](const IncomingShareTargetInfo&, const TransferMetadata&) {}) { + IncomingShareSessionTest() + : session_(std::string(kEndpointId), share_target_, + [](const IncomingShareSession&, const TransferMetadata&) {}) { NL_CHECK( proto2::TextFormat::ParseFromString(R"pb( file_metadata { @@ -139,28 +139,28 @@ class IncomingShareTargetInfoTest : public ::testing::Test { } ShareTarget share_target_; - IncomingShareTargetInfo info_; + IncomingShareSession session_; IntroductionFrame introduction_frame_; }; -TEST_F(IncomingShareTargetInfoTest, ProcessIntroductionNoSupportedPayload) { +TEST_F(IncomingShareSessionTest, ProcessIntroductionNoSupportedPayload) { IntroductionFrame frame; - EXPECT_THAT(info_.ProcessIntroduction(frame), + EXPECT_THAT(session_.ProcessIntroduction(frame), Eq(TransferMetadata::Status::kUnsupportedAttachmentType)); - EXPECT_THAT(info_.attachment_container().HasAttachments(), IsFalse()); + EXPECT_THAT(session_.attachment_container().HasAttachments(), IsFalse()); } -TEST_F(IncomingShareTargetInfoTest, ProcessIntroductionEmptyFile) { +TEST_F(IncomingShareSessionTest, ProcessIntroductionEmptyFile) { IntroductionFrame frame; frame.mutable_file_metadata(); - EXPECT_THAT(info_.ProcessIntroduction(frame), + EXPECT_THAT(session_.ProcessIntroduction(frame), Eq(TransferMetadata::Status::kUnsupportedAttachmentType)); - EXPECT_THAT(info_.attachment_container().HasAttachments(), IsFalse()); + EXPECT_THAT(session_.attachment_container().HasAttachments(), IsFalse()); } -TEST_F(IncomingShareTargetInfoTest, ProcessIntroductionFilesTooLarge) { +TEST_F(IncomingShareSessionTest, ProcessIntroductionFilesTooLarge) { IntroductionFrame frame; FileMetadata file1; FileMetadata file2; @@ -169,21 +169,21 @@ TEST_F(IncomingShareTargetInfoTest, ProcessIntroductionFilesTooLarge) { frame.mutable_file_metadata()->Add(std::move(file1)); frame.mutable_file_metadata()->Add(std::move(file2)); - EXPECT_THAT(info_.ProcessIntroduction(frame), + EXPECT_THAT(session_.ProcessIntroduction(frame), Eq(TransferMetadata::Status::kNotEnoughSpace)); - EXPECT_THAT(info_.attachment_container().HasAttachments(), IsFalse()); + EXPECT_THAT(session_.attachment_container().HasAttachments(), IsFalse()); } -TEST_F(IncomingShareTargetInfoTest, ProcessIntroductionEmptyText) { +TEST_F(IncomingShareSessionTest, ProcessIntroductionEmptyText) { IntroductionFrame frame; frame.mutable_text_metadata(); - EXPECT_THAT(info_.ProcessIntroduction(frame), + EXPECT_THAT(session_.ProcessIntroduction(frame), Eq(TransferMetadata::Status::kUnsupportedAttachmentType)); - EXPECT_THAT(info_.attachment_container().HasAttachments(), IsFalse()); + EXPECT_THAT(session_.attachment_container().HasAttachments(), IsFalse()); } -TEST_F(IncomingShareTargetInfoTest, ProcessIntroductionSuccess) { +TEST_F(IncomingShareSessionTest, ProcessIntroductionSuccess) { FileMetadata filemeta1 = introduction_frame_.file_metadata(0); FileAttachment file1(filemeta1.id(), filemeta1.size(), filemeta1.name(), filemeta1.mime_type(), filemeta1.type(), @@ -207,30 +207,32 @@ TEST_F(IncomingShareTargetInfoTest, ProcessIntroductionSuccess) { WifiCredentialsAttachment wifi2(wifimeta2.id(), wifimeta2.ssid(), wifimeta2.security_type()); - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); - EXPECT_THAT(info_.attachment_container().HasAttachments(), IsTrue()); - EXPECT_THAT(info_.attachment_container().GetFileAttachments(), + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); + EXPECT_THAT(session_.attachment_container().HasAttachments(), IsTrue()); + EXPECT_THAT(session_.attachment_container().GetFileAttachments(), UnorderedElementsAre(file1, file2)); - EXPECT_THAT(info_.attachment_container().GetTextAttachments(), + EXPECT_THAT(session_.attachment_container().GetTextAttachments(), UnorderedElementsAre(text1, text2)); - EXPECT_THAT(info_.attachment_container().GetWifiCredentialsAttachments(), + EXPECT_THAT(session_.attachment_container().GetWifiCredentialsAttachments(), UnorderedElementsAre(wifi1, wifi2)); - EXPECT_THAT(info_.attachment_payload_map().at(filemeta1.id()), + EXPECT_THAT(session_.attachment_payload_map().at(filemeta1.id()), Eq(filemeta1.payload_id())); - EXPECT_THAT(info_.attachment_payload_map().at(filemeta2.id()), + EXPECT_THAT(session_.attachment_payload_map().at(filemeta2.id()), Eq(filemeta2.payload_id())); - EXPECT_THAT(info_.attachment_payload_map().at(textmeta1.id()), + EXPECT_THAT(session_.attachment_payload_map().at(textmeta1.id()), Eq(textmeta1.payload_id())); - EXPECT_THAT(info_.attachment_payload_map().at(textmeta2.id()), + EXPECT_THAT(session_.attachment_payload_map().at(textmeta2.id()), Eq(textmeta2.payload_id())); - EXPECT_THAT(info_.attachment_payload_map().at(wifimeta1.id()), + EXPECT_THAT(session_.attachment_payload_map().at(wifimeta1.id()), Eq(wifimeta1.payload_id())); - EXPECT_THAT(info_.attachment_payload_map().at(wifimeta2.id()), + EXPECT_THAT(session_.attachment_payload_map().at(wifimeta2.id()), Eq(wifimeta2.payload_id())); } -TEST_F(IncomingShareTargetInfoTest, UpdateFilePayloadPathsSuccess) { - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); +TEST_F(IncomingShareSessionTest, UpdateFilePayloadPathsSuccess) { + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); FakeNearbyConnectionsManager connections_manager; std::filesystem::path file1_path = "/usr/tmp/file1"; int64_t payload_id1 = introduction_frame_.file_metadata(0).payload_id(); @@ -242,15 +244,18 @@ TEST_F(IncomingShareTargetInfoTest, UpdateFilePayloadPathsSuccess) { connections_manager.SetIncomingPayload( payload_id2, CreateFilePayload(payload_id2, file2_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsTrue()); - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[0].file_path(), - Eq(file1_path)); - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[1].file_path(), - Eq(file2_path)); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsTrue()); + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[0].file_path(), + Eq(file1_path)); + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[1].file_path(), + Eq(file2_path)); } -TEST_F(IncomingShareTargetInfoTest, UpdateFilePayloadPathsWrongType) { - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); +TEST_F(IncomingShareSessionTest, UpdateFilePayloadPathsWrongType) { + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); FakeNearbyConnectionsManager connections_manager; int64_t payload_id1 = introduction_frame_.file_metadata(0).payload_id(); connections_manager.SetIncomingPayload( @@ -261,11 +266,12 @@ TEST_F(IncomingShareTargetInfoTest, UpdateFilePayloadPathsWrongType) { connections_manager.SetIncomingPayload( payload_id2, CreateFilePayload(payload_id2, file2_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsFalse()); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsFalse()); } -TEST_F(IncomingShareTargetInfoTest, GetPayloadFilePaths) { - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); +TEST_F(IncomingShareSessionTest, GetPayloadFilePaths) { + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); FakeNearbyConnectionsManager connections_manager; std::filesystem::path file1_path = "/usr/tmp/file1"; int64_t payload_id1 = introduction_frame_.file_metadata(0).payload_id(); @@ -276,15 +282,17 @@ TEST_F(IncomingShareTargetInfoTest, GetPayloadFilePaths) { int64_t payload_id2 = introduction_frame_.file_metadata(1).payload_id(); connections_manager.SetIncomingPayload( payload_id2, CreateFilePayload(payload_id2, file2_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsTrue()); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsTrue()); - std::vector file_paths = info_.GetPayloadFilePaths(); + std::vector file_paths = + session_.GetPayloadFilePaths(); EXPECT_THAT(file_paths, UnorderedElementsAre(file1_path, file2_path)); } -TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsSuccess) { - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); +TEST_F(IncomingShareSessionTest, FinalizePayloadsSuccess) { + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); FakeNearbyConnectionsManager connections_manager; std::filesystem::path file1_path = "/usr/tmp/file1"; int64_t payload_id1 = introduction_frame_.file_metadata(0).payload_id(); @@ -295,7 +303,7 @@ TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsSuccess) { int64_t payload_id2 = introduction_frame_.file_metadata(1).payload_id(); connections_manager.SetIncomingPayload( payload_id2, CreateFilePayload(payload_id2, file2_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsTrue()); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsTrue()); std::string text_content1 = "text1"; int64_t text_payload_id1 = introduction_frame_.text_metadata(0).payload_id(); @@ -319,40 +327,46 @@ TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsSuccess) { wifi_payload_id2, CreateWifiCredentialsPayload(wifi_payload_id2, "password2", true)); - EXPECT_THAT(info_.FinalizePayloads(connections_manager), IsTrue()); - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[0].file_path(), - Eq(file1_path)); - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[1].file_path(), - Eq(file2_path)); - EXPECT_THAT(info_.attachment_container().GetTextAttachments()[0].text_body(), - Eq(text_content1)); - EXPECT_THAT(info_.attachment_container().GetTextAttachments()[1].text_body(), - Eq(text_content2)); - EXPECT_THAT(info_.attachment_container() - .GetWifiCredentialsAttachments()[0].password(), + EXPECT_THAT(session_.FinalizePayloads(connections_manager), IsTrue()); + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[0].file_path(), + Eq(file1_path)); + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[1].file_path(), + Eq(file2_path)); + EXPECT_THAT( + session_.attachment_container().GetTextAttachments()[0].text_body(), + Eq(text_content1)); + EXPECT_THAT( + session_.attachment_container().GetTextAttachments()[1].text_body(), + Eq(text_content2)); + EXPECT_THAT(session_.attachment_container() + .GetWifiCredentialsAttachments()[0] + .password(), Eq("password1")); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[0] .is_hidden(), IsFalse()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[1] .password(), Eq("password2")); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[1] .is_hidden(), IsTrue()); } -TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsMissingFilePayloads) { - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); +TEST_F(IncomingShareSessionTest, FinalizePayloadsMissingFilePayloads) { + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); FakeNearbyConnectionsManager connections_manager; std::filesystem::path file1_path = "/usr/tmp/file1"; int64_t payload_id1 = introduction_frame_.file_metadata(0).payload_id(); connections_manager.SetIncomingPayload( payload_id1, CreateFilePayload(payload_id1, file1_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsFalse()); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsFalse()); std::string text_content1 = "text1"; int64_t text_payload_id1 = introduction_frame_.text_metadata(0).payload_id(); @@ -376,48 +390,54 @@ TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsMissingFilePayloads) { wifi_payload_id2, CreateWifiCredentialsPayload(wifi_payload_id2, "password2", true)); - EXPECT_THAT(info_.FinalizePayloads(connections_manager), IsFalse()); + EXPECT_THAT(session_.FinalizePayloads(connections_manager), IsFalse()); // Verify that attachments are cleared out - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[0].file_path(), - Eq(std::nullopt)); - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[1].file_path(), - Eq(std::nullopt)); - EXPECT_THAT(info_.attachment_container().GetTextAttachments()[0].text_body(), + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[0].file_path(), + Eq(std::nullopt)); + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[1].file_path(), + Eq(std::nullopt)); + EXPECT_THAT( + session_.attachment_container().GetTextAttachments()[0].text_body(), + IsEmpty()); + EXPECT_THAT( + session_.attachment_container().GetTextAttachments()[1].text_body(), + IsEmpty()); + EXPECT_THAT(session_.attachment_container() + .GetWifiCredentialsAttachments()[0] + .password(), IsEmpty()); - EXPECT_THAT(info_.attachment_container().GetTextAttachments()[1].text_body(), - IsEmpty()); - EXPECT_THAT(info_.attachment_container() - .GetWifiCredentialsAttachments()[0].password(), - IsEmpty()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[0] .is_hidden(), IsFalse()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[1] .password(), IsEmpty()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[1] .is_hidden(), IsFalse()); } -TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsMissingTextPayloads) { - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); +TEST_F(IncomingShareSessionTest, FinalizePayloadsMissingTextPayloads) { + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); FakeNearbyConnectionsManager connections_manager; std::filesystem::path file1_path = "/usr/tmp/file1"; int64_t payload_id1 = introduction_frame_.file_metadata(0).payload_id(); connections_manager.SetIncomingPayload( payload_id1, CreateFilePayload(payload_id1, file1_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsFalse()); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsFalse()); std::filesystem::path file2_path = "/usr/tmp/file2"; int64_t payload_id2 = introduction_frame_.file_metadata(1).payload_id(); connections_manager.SetIncomingPayload( payload_id2, CreateFilePayload(payload_id2, file2_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsTrue()); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsTrue()); std::string text_content1 = "text1"; int64_t text_payload_id1 = introduction_frame_.text_metadata(0).payload_id(); @@ -436,48 +456,54 @@ TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsMissingTextPayloads) { wifi_payload_id2, CreateWifiCredentialsPayload(wifi_payload_id2, "password2", true)); - EXPECT_THAT(info_.FinalizePayloads(connections_manager), IsFalse()); + EXPECT_THAT(session_.FinalizePayloads(connections_manager), IsFalse()); // Verify that attachments are cleared out - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[0].file_path(), - Eq(std::nullopt)); - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[1].file_path(), - Eq(std::nullopt)); - EXPECT_THAT(info_.attachment_container().GetTextAttachments()[0].text_body(), + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[0].file_path(), + Eq(std::nullopt)); + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[1].file_path(), + Eq(std::nullopt)); + EXPECT_THAT( + session_.attachment_container().GetTextAttachments()[0].text_body(), + IsEmpty()); + EXPECT_THAT( + session_.attachment_container().GetTextAttachments()[1].text_body(), + IsEmpty()); + EXPECT_THAT(session_.attachment_container() + .GetWifiCredentialsAttachments()[0] + .password(), IsEmpty()); - EXPECT_THAT(info_.attachment_container().GetTextAttachments()[1].text_body(), - IsEmpty()); - EXPECT_THAT(info_.attachment_container() - .GetWifiCredentialsAttachments()[0].password(), - IsEmpty()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[0] .is_hidden(), IsFalse()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[1] .password(), IsEmpty()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[1] .is_hidden(), IsFalse()); } -TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsMissingWifiPayloads) { - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); +TEST_F(IncomingShareSessionTest, FinalizePayloadsMissingWifiPayloads) { + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); FakeNearbyConnectionsManager connections_manager; std::filesystem::path file1_path = "/usr/tmp/file1"; int64_t payload_id1 = introduction_frame_.file_metadata(0).payload_id(); connections_manager.SetIncomingPayload( payload_id1, CreateFilePayload(payload_id1, file1_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsFalse()); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsFalse()); std::filesystem::path file2_path = "/usr/tmp/file2"; int64_t payload_id2 = introduction_frame_.file_metadata(1).payload_id(); connections_manager.SetIncomingPayload( payload_id2, CreateFilePayload(payload_id2, file2_path)); - EXPECT_THAT(info_.UpdateFilePayloadPaths(connections_manager), IsTrue()); + EXPECT_THAT(session_.UpdateFilePayloadPaths(connections_manager), IsTrue()); std::string text_content1 = "text1"; int64_t text_payload_id1 = introduction_frame_.text_metadata(0).payload_id(); @@ -495,47 +521,53 @@ TEST_F(IncomingShareTargetInfoTest, FinalizePayloadsMissingWifiPayloads) { wifi_payload_id1, CreateWifiCredentialsPayload(wifi_payload_id1, "password1", false)); - EXPECT_THAT(info_.FinalizePayloads(connections_manager), IsFalse()); + EXPECT_THAT(session_.FinalizePayloads(connections_manager), IsFalse()); // Verify that attachments are cleared out - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[0].file_path(), - Eq(std::nullopt)); - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[1].file_path(), - Eq(std::nullopt)); - EXPECT_THAT(info_.attachment_container().GetTextAttachments()[0].text_body(), + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[0].file_path(), + Eq(std::nullopt)); + EXPECT_THAT( + session_.attachment_container().GetFileAttachments()[1].file_path(), + Eq(std::nullopt)); + EXPECT_THAT( + session_.attachment_container().GetTextAttachments()[0].text_body(), + IsEmpty()); + EXPECT_THAT( + session_.attachment_container().GetTextAttachments()[1].text_body(), + IsEmpty()); + EXPECT_THAT(session_.attachment_container() + .GetWifiCredentialsAttachments()[0] + .password(), IsEmpty()); - EXPECT_THAT(info_.attachment_container().GetTextAttachments()[1].text_body(), - IsEmpty()); - EXPECT_THAT(info_.attachment_container() - .GetWifiCredentialsAttachments()[0].password(), - IsEmpty()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[0] .is_hidden(), IsFalse()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[1] .password(), IsEmpty()); - EXPECT_THAT(info_.attachment_container() + EXPECT_THAT(session_.attachment_container() .GetWifiCredentialsAttachments()[1] .is_hidden(), IsFalse()); } -TEST_F(IncomingShareTargetInfoTest, RegisterPayloadListenerSuccess) { - EXPECT_THAT(info_.ProcessIntroduction(introduction_frame_), Eq(std::nullopt)); +TEST_F(IncomingShareSessionTest, RegisterPayloadListenerSuccess) { + EXPECT_THAT(session_.ProcessIntroduction(introduction_frame_), + Eq(std::nullopt)); FakeNearbyConnectionsManager connections_manager; FakeContext context; - info_.RegisterPayloadListener(&context, connections_manager, - [](int64_t, TransferMetadata) {}); + session_.RegisterPayloadListener(&context, connections_manager, + [](int64_t, TransferMetadata) {}); - for (auto it : info_.attachment_payload_map()) { + for (auto it : session_.attachment_payload_map()) { EXPECT_THAT( connections_manager.GetRegisteredPayloadStatusListener(it.second) .lock(), - Eq(info_.payload_tracker().lock())); + Eq(session_.payload_tracker().lock())); } } diff --git a/sharing/nearby_sharing_service_impl.cc b/sharing/nearby_sharing_service_impl.cc index a761b8da..3b2106ca 100644 --- a/sharing/nearby_sharing_service_impl.cc +++ b/sharing/nearby_sharing_service_impl.cc @@ -108,14 +108,14 @@ namespace nearby::sharing { namespace { using BlockedVendorId = ::nearby::sharing::Advertisement::BlockedVendorId; -using ::nearby::sharing::api::SharingPlatform; -using ::nearby::sharing::proto::DataUsage; -using ::nearby::sharing::proto::DeviceVisibility; using ::location::nearby::proto::sharing::AttachmentTransmissionStatus; using ::location::nearby::proto::sharing::EstablishConnectionStatus; using ::location::nearby::proto::sharing::OSType; using ::location::nearby::proto::sharing::ResponseToIntroduction; using ::location::nearby::proto::sharing::SessionStatus; +using ::nearby::sharing::api::SharingPlatform; +using ::nearby::sharing::proto::DataUsage; +using ::nearby::sharing::proto::DeviceVisibility; constexpr absl::Duration kBackgroundAdvertisementRotationDelayMin = absl::Minutes(12); @@ -153,7 +153,7 @@ bool ShouldBlockSurfaceRegistration(BlockedVendorId registering_vendor_id, } NearbySharingService::Observer::AdapterState MapAdapterState(bool is_present, - bool is_powered) { + bool is_powered) { NearbySharingService::Observer::AdapterState state = NearbySharingService::Observer::AdapterState::NOT_PRESENT; if (is_present) { @@ -335,8 +335,8 @@ void NearbySharingServiceImpl::Cleanup() { endpoint_discovery_events_ = {}; - ClearOutgoingShareTargetInfoMap(); - incoming_share_target_info_map_.clear(); + ClearOutgoingShareSessionMap(); + incoming_share_session_map_.clear(); discovered_advertisements_to_retry_map_.clear(); discovered_advertisements_retried_set_.clear(); @@ -363,22 +363,22 @@ void NearbySharingServiceImpl::Cleanup() { void NearbySharingServiceImpl::SendInitialAdapterState( NearbySharingService::Observer* observer) { - RunOnNearbySharingServiceThread("send_initial_adapter_state", [this, - observer]() { - // |observer| may have been removed before the task is run. This is not - // sufficient to catch all cases, but without taking some form of ownership - // of the observer, this is the best we can do. - if (!observers_.HasObserver(observer)) { - return; - } - observer->OnBluetoothStatusChanged( - MapAdapterState(context_->GetBluetoothAdapter().IsPresent(), - context_->GetBluetoothAdapter().IsPowered())); - observer->OnLanStatusChanged( - context_->GetConnectivityManager()->IsLanConnected() - ? NearbySharingService::Observer::AdapterState::ENABLED - : NearbySharingService::Observer::AdapterState::DISABLED); - }); + RunOnNearbySharingServiceThread( + "send_initial_adapter_state", [this, observer]() { + // |observer| may have been removed before the task is run. This is not + // sufficient to catch all cases, but without taking some form of + // ownership of the observer, this is the best we can do. + if (!observers_.HasObserver(observer)) { + return; + } + observer->OnBluetoothStatusChanged( + MapAdapterState(context_->GetBluetoothAdapter().IsPresent(), + context_->GetBluetoothAdapter().IsPowered())); + observer->OnLanStatusChanged( + context_->GetConnectivityManager()->IsLanConnected() + ? NearbySharingService::Observer::AdapterState::ENABLED + : NearbySharingService::Observer::AdapterState::DISABLED); + }); } void NearbySharingServiceImpl::AddObserver( @@ -757,9 +757,9 @@ void NearbySharingServiceImpl::SendAttachments( return; } - OutgoingShareTargetInfo* info = - GetOutgoingShareTargetInfo(share_target_id); - if (!info) { + OutgoingShareSession* session = + GetOutgoingShareSession(share_target_id); + if (!session) { NL_LOG(WARNING) << __func__ << ": Failed to send attachments. Unknown ShareTarget."; @@ -767,18 +767,18 @@ void NearbySharingServiceImpl::SendAttachments( return; } - info->SetAttachmentContainer(std::move(*attachment_container)); + session->SetAttachmentContainer(std::move(*attachment_container)); app_info_->SetActiveFlag(); // Set session ID. - info->set_session_id(analytics_recorder_->GenerateNextId()); + session->set_session_id(analytics_recorder_->GenerateNextId()); // Log analytics event of sending start. analytics_recorder_->NewSendStart( - info->session_id(), + session->session_id(), /*transfer_position=*/GetConnectedShareTargetPos(), /*concurrent_connections=*/GetConnectedShareTargetCount(), - info->share_target()); + session->share_target()); OnTransferStarted(/*is_incoming=*/false); is_connecting_ = true; @@ -786,15 +786,16 @@ void NearbySharingServiceImpl::SendAttachments( // Send process initialized successfully, from now on status updated // will be sent out via OnOutgoingTransferUpdate(). - info->UpdateTransferMetadata( + session->UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kConnecting) .build()); - CreatePayloads(*info, [this, endpoint_info = std::move(*endpoint_info)]( - OutgoingShareTargetInfo& info, bool success) { - OnCreatePayloads(std::move(endpoint_info), info, success); - }); + CreatePayloads( + *session, [this, endpoint_info = std::move(*endpoint_info)]( + OutgoingShareSession& session, bool success) { + OnCreatePayloads(std::move(endpoint_info), session, success); + }); std::move(status_codes_callback)(StatusCodes::kOk); }); @@ -811,26 +812,26 @@ void NearbySharingServiceImpl::Accept( analytics_recorder_->NewRespondToIntroduction( ResponseToIntroduction::ACCEPT_INTRODUCTION, receiving_session_id_); - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); - if (info == nullptr) { + ShareSession* session = GetShareSession(share_target_id); + if (session == nullptr) { NL_LOG(WARNING) << __func__ << ": Accept invoked for unknown share target"; std::move(status_codes_callback)(StatusCodes::kInvalidArgument); return; } - if (!info->IsConnected()) { + if (!session->IsConnected()) { NL_LOG(WARNING) << __func__ << ": Accept invoked for unconnected share target"; std::move(status_codes_callback)(StatusCodes::kOutOfOrderApiCall); return; } - bool is_incoming = info->IsIncoming(); + bool is_incoming = session->IsIncoming(); std::optional< std::tuple> metadata = is_incoming ? last_incoming_metadata_ : last_outgoing_metadata_; - if (!ReadyToAccept(info->self_share(), + if (!ReadyToAccept(session->self_share(), metadata.has_value() ? std::get<2>(*metadata).status() : TransferMetadata::Status::kUnknown)) { @@ -841,14 +842,14 @@ void NearbySharingServiceImpl::Accept( is_waiting_to_record_accept_to_transfer_start_metric_ = is_incoming; if (is_incoming) { - IncomingShareTargetInfo* incoming_info = - GetIncomingShareTargetInfo(share_target_id); + IncomingShareSession* incoming_session = + GetIncomingShareSession(share_target_id); incoming_share_accepted_timestamp_ = context_->GetClock()->Now(); - ReceivePayloads(*incoming_info, std::move(status_codes_callback)); + ReceivePayloads(*incoming_session, std::move(status_codes_callback)); return; } - std::move(status_codes_callback)(SendPayloads(*info)); + std::move(status_codes_callback)(SendPayloads(*session)); }); } @@ -863,14 +864,14 @@ void NearbySharingServiceImpl::Reject( analytics_recorder_->NewRespondToIntroduction( ResponseToIntroduction::REJECT_INTRODUCTION, receiving_session_id_); - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); - if (info == nullptr) { + ShareSession* session = GetShareSession(share_target_id); + if (session == nullptr) { NL_LOG(WARNING) << __func__ << ": Reject invoked for unknown share target"; std::move(status_codes_callback)(StatusCodes::kInvalidArgument); return; } - if (!info->IsConnected()) { + if (!session->IsConnected()) { NL_LOG(WARNING) << __func__ << ": Reject invoked for unconnected share target"; std::move(status_codes_callback)(StatusCodes::kOutOfOrderApiCall); @@ -881,14 +882,14 @@ void NearbySharingServiceImpl::Reject( "incoming_rejection_delay", kIncomingRejectionDelay, [this, share_target_id]() { CloseConnection(share_target_id); }); // kRejected status already sent below, no need to send on disconnect. - info->set_disconnect_status(TransferMetadata::Status::kUnknown); + session->set_disconnect_status(TransferMetadata::Status::kUnknown); - info->WriteResponseFrame( + session->WriteResponseFrame( service::proto::ConnectionResponseFrame::REJECT); NL_VLOG(1) << __func__ << ": Successfully wrote a rejection response frame"; - info->UpdateTransferMetadata( + session->UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kRejected) .build()); @@ -922,8 +923,8 @@ void NearbySharingServiceImpl::DoCancel( int64_t share_target_id, std::function status_codes_callback, bool is_initiator_of_cancellation) { - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); - if (info == nullptr) { + ShareSession* session = GetShareSession(share_target_id); + if (session == nullptr) { NL_LOG(WARNING) << __func__ << ": Cancel invoked for unknown share target"; std::move(status_codes_callback)(StatusCodes::kInvalidArgument); return; @@ -939,7 +940,7 @@ void NearbySharingServiceImpl::DoCancel( // cancellation signals. Also, note that there might not be any ongoing // payload transfer, for example, if a connection has not been established // yet. - info->CancelPayloads(*nearby_connections_manager_); + session->CancelPayloads(*nearby_connections_manager_); // Inform the user that the transfer has been cancelled before disconnecting // because subsequent disconnections might be interpreted as failure. @@ -948,7 +949,7 @@ void NearbySharingServiceImpl::DoCancel( // been invoked as a result of the payload cancellations above, but again, // superfluous status updates are handled gracefully by the // UpdateTransferMetadata. - info->UpdateTransferMetadata( + session->UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kCancelled) .build()); @@ -958,13 +959,13 @@ void NearbySharingServiceImpl::DoCancel( // allowing for final processing by the other device. Otherwise, disconnect // from endpoint id directly. Note: A share attempt can be cancelled by the // user before a connection is fully established, in which case, - // info->connection() will be null. - if (info->IsConnected()) { + // session->connection() will be null. + if (session->IsConnected()) { NL_LOG(INFO) << "Disconnect fully established endpoint id:" - << info->endpoint_id(); + << session->endpoint_id(); if (is_initiator_of_cancellation) { // kCancelled status already sent above, no need to send on disconnect. - info->set_disconnect_status(TransferMetadata::Status::kUnknown); + session->set_disconnect_status(TransferMetadata::Status::kUnknown); RunOnNearbySharingServiceThreadDelayed( "initiator_cancel_delay", kInitiatorCancelDelay, @@ -973,13 +974,13 @@ void NearbySharingServiceImpl::DoCancel( CloseConnection(share_target_id); }); - info->WriteCancelFrame(); + session->WriteCancelFrame(); } else { - info->connection()->Close(); + session->connection()->Close(); } } else { - NL_LOG(INFO) << "Disconnect endpoint id:" << info->endpoint_id(); - nearby_connections_manager_->Disconnect(info->endpoint_id()); + NL_LOG(INFO) << "Disconnect endpoint id:" << session->endpoint_id(); + nearby_connections_manager_->Disconnect(session->endpoint_id()); UnregisterShareTarget(share_target_id); } @@ -1007,9 +1008,10 @@ void NearbySharingServiceImpl::Open( NL_LOG(INFO) << __func__ << ": Open is called for share_target: " << share_target.ToString(); // Log analytics event of opening received attachments. - ShareTargetInfo* info = GetShareTargetInfo(share_target.id); + ShareSession* session = GetShareSession(share_target.id); analytics_recorder_->NewOpenReceivedAttachments( - *attachment_container, info != nullptr ? info->session_id() : 0); + *attachment_container, + session != nullptr ? session->session_id() : 0); status_codes_callback(service_extension_->Open(*attachment_container)); }); } @@ -1083,9 +1085,9 @@ void NearbySharingServiceImpl::OnIncomingConnection( ShareTarget placeholder_share_target; placeholder_share_target.is_incoming = true; int64_t placeholder_share_target_id = placeholder_share_target.id; - IncomingShareTargetInfo& share_target_info = CreateIncomingShareTargetInfo( + IncomingShareSession& session = CreateIncomingShareSession( placeholder_share_target, endpoint_id, /*certificate=*/std::nullopt); - share_target_info.OnConnected(context_->GetClock()->Now(), connection); + session.OnConnected(context_->GetClock()->Now(), connection); connection->SetDisconnectionListener([this, placeholder_share_target_id]() { OnConnectionDisconnected(placeholder_share_target_id); }); @@ -1095,7 +1097,7 @@ void NearbySharingServiceImpl::OnIncomingConnection( std::unique_ptr advertisement = decoder_->DecodeAdvertisement(endpoint_info); - OnIncomingAdvertisementDecoded(endpoint_id, share_target_info, + OnIncomingAdvertisementDecoded(endpoint_id, session, std::move(advertisement)); } @@ -1739,7 +1741,7 @@ void NearbySharingServiceImpl::OnOutgoingAdvertisementDecoded( } // Now we will report endpoints met before in NearbyConnectionsManager. - // Check outgoingShareTargetInfoMap first and pass the same shareTarget if we + // Check outgoingShareSessionMap first and pass the same shareTarget if we // found one. // Looking for the ShareTarget based on endpoint id. @@ -1806,8 +1808,8 @@ void NearbySharingServiceImpl::OnOutgoingDecryptedCertificate( FinishEndpointDiscoveryEvent(); return; } - CreateOutgoingShareTargetInfo(*share_target, endpoint_id, - std::move(certificate)); + CreateOutgoingShareSession(*share_target, endpoint_id, + std::move(certificate)); // Update the endpoint id for the share target. NL_LOG(INFO) << __func__ @@ -2210,7 +2212,7 @@ void NearbySharingServiceImpl::StartScanning() { is_scanning_ = true; InvalidateReceiveSurfaceState(); - ClearOutgoingShareTargetInfoMap(); + ClearOutgoingShareSessionMap(); discovered_advertisements_to_retry_map_.clear(); discovered_advertisements_retried_set_.clear(); @@ -2440,12 +2442,12 @@ void NearbySharingServiceImpl::RemoveOutgoingShareTargetWithEndpointId( ShareTarget share_target = std::move(it->second); outgoing_share_target_map_.erase(it); - auto info_it = outgoing_share_target_info_map_.find(share_target.id); - if (info_it != outgoing_share_target_info_map_.end()) { - outgoing_share_target_info_map_.erase(info_it); + auto info_it = outgoing_share_session_map_.find(share_target.id); + if (info_it != outgoing_share_session_map_.end()) { + outgoing_share_session_map_.erase(info_it); } else { NL_LOG(WARNING) << __func__ << ": share_target.id=" << it->second.id - << " not found in outgoing share target info map."; + << " not found in outgoing share session map."; return; } @@ -2487,46 +2489,45 @@ void NearbySharingServiceImpl::OnTransferStarted(bool is_incoming) { } void NearbySharingServiceImpl::ReceivePayloads( - IncomingShareTargetInfo& share_target_info, + IncomingShareSession& session, std::function status_codes_callback) { mutual_acceptance_timeout_alarm_->Stop(); // Log analytics event of starting to receive payloads. analytics_recorder_->NewReceiveAttachmentsStart( - receiving_session_id_, share_target_info.attachment_container()); - share_target_info.RegisterPayloadListener( + receiving_session_id_, session.attachment_container()); + session.RegisterPayloadListener( context_, *nearby_connections_manager_, absl::bind_front(&NearbySharingServiceImpl::OnPayloadTransferUpdate, this)); - share_target_info.WriteResponseFrame( + session.WriteResponseFrame( nearby::sharing::service::proto::ConnectionResponseFrame::ACCEPT); NL_VLOG(1) << __func__ << ": Successfully wrote response frame"; - share_target_info.UpdateTransferMetadata( + session.UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kAwaitingRemoteAcceptance) - .set_token(share_target_info.token()) + .set_token(session.token()) .build()); - if (share_target_info.attachment_container().GetTotalAttachmentsSize() >= + if (session.attachment_container().GetTotalAttachmentsSize() >= kAttachmentsSizeThresholdOverHighQualityMedium) { // Upgrade bandwidth regardless of advertising visibility because either // the system or the user has verified the sender's identity; the // stable identifiers potentially exposed by performing a bandwidth // upgrade are no longer a concern. NL_LOG(INFO) << __func__ << ": Upgrade bandwidth when receiving accept."; - nearby_connections_manager_->UpgradeBandwidth( - share_target_info.endpoint_id()); + nearby_connections_manager_->UpgradeBandwidth(session.endpoint_id()); } std::move(status_codes_callback)(StatusCodes::kOk); } NearbySharingService::StatusCodes NearbySharingServiceImpl::SendPayloads( - ShareTargetInfo& info) { + ShareSession& session) { NL_VLOG(1) << __func__ << ": Preparing to send payloads to " - << info.share_target().id; - if (!info.IsConnected()) { + << session.share_target().id; + if (!session.IsConnected()) { NL_LOG(WARNING) << __func__ << ": Failed to send payload due to missing connection."; return StatusCodes::kOutOfOrderApiCall; @@ -2534,26 +2535,26 @@ NearbySharingService::StatusCodes NearbySharingServiceImpl::SendPayloads( // Log analytics event of sending attachment start. analytics_recorder_->NewSendAttachmentsStart( - info.session_id(), info.attachment_container(), + session.session_id(), session.attachment_container(), /*transfer_position=*/GetConnectedShareTargetPos(), /*concurrent_connections=*/GetConnectedShareTargetCount()); - info.UpdateTransferMetadata( + session.UpdateTransferMetadata( TransferMetadataBuilder() - .set_token(info.token()) + .set_token(session.token()) .set_status(TransferMetadata::Status::kAwaitingRemoteAcceptance) .build()); - ReceiveConnectionResponse(info); + ReceiveConnectionResponse(session); return StatusCodes::kOk; } void NearbySharingServiceImpl::OnOutgoingConnection( absl::Time connect_start_time, NearbyConnection* connection, - OutgoingShareTargetInfo& info) { - int64_t share_target_id = info.share_target().id; - if (!info.OnConnected(connect_start_time, connection)) { - AbortAndCloseConnectionIfNecessary(info.disconnect_status(), + OutgoingShareSession& session) { + int64_t share_target_id = session.share_target().id; + if (!session.OnConnected(connect_start_time, connection)) { + AbortAndCloseConnectionIfNecessary(session.disconnect_status(), share_target_id); return; } @@ -2563,8 +2564,9 @@ void NearbySharingServiceImpl::OnOutgoingConnection( // Log analytics event of establishing connection. analytics_recorder_->NewEstablishConnection( - info.session_id(), EstablishConnectionStatus::CONNECTION_STATUS_SUCCESS, - info.share_target(), + session.session_id(), + EstablishConnectionStatus::CONNECTION_STATUS_SUCCESS, + session.share_target(), /*transfer_position=*/GetConnectedShareTargetPos(), /*concurrent_connections=*/GetConnectedShareTargetCount(), absl::ToInt64Milliseconds( @@ -2573,10 +2575,10 @@ void NearbySharingServiceImpl::OnOutgoingConnection( std::optional> token = nearby_connections_manager_->GetRawAuthenticationToken( - info.endpoint_id()); + session.endpoint_id()); std::optional four_digit_token = TokenToFourDigitString(token); - info.RunPairedKeyVerification( + session.RunPairedKeyVerification( context_, decoder_, ToProtoOsType(device_info_.GetOsType()), { .visibility = settings_->GetVisibility(), @@ -2593,29 +2595,29 @@ void NearbySharingServiceImpl::OnOutgoingConnection( } void NearbySharingServiceImpl::SendIntroduction( - OutgoingShareTargetInfo& info, + OutgoingShareSession& session, std::optional four_digit_token) { // We successfully connected! Now lets build up Payloads for all the files we // want to send them. We won't send any just yet, but we'll send the Payload // IDs in our introduction frame so that they know what to expect if they // accept. NL_VLOG(1) << __func__ << ": Preparing to send introduction to " - << info.share_target().id; + << session.share_target().id; - if (!info.IsConnected()) { + if (!session.IsConnected()) { NL_LOG(WARNING) << __func__ << ": No NearbyConnection tied to " - << info.share_target().id; + << session.share_target().id; return; } // Log analytics event of sending introduction. analytics_recorder_->NewSendIntroduction( - info.session_id(), info.share_target(), + session.session_id(), session.share_target(), /*transfer_position=*/GetConnectedShareTargetPos(), /*concurrent_connections=*/GetConnectedShareTargetCount(), - info.os_type()); + session.os_type()); - NearbyConnection* connection = info.connection(); + NearbyConnection* connection = session.connection(); if (foreground_send_surface_map_.empty() && background_send_surface_map_.empty()) { @@ -2625,12 +2627,12 @@ void NearbySharingServiceImpl::SendIntroduction( } NL_VLOG(1) << __func__ << ": Sending attachments to " - << info.share_target().id; - if (!info.WriteIntroductionFrame()) { + << session.share_target().id; + if (!session.WriteIntroductionFrame()) { NL_LOG(WARNING) << __func__ << ": No payloads tied to transfer, disconnecting."; AbortAndCloseConnectionIfNecessary( - TransferMetadata::Status::kMissingPayloads, info.share_target().id); + TransferMetadata::Status::kMissingPayloads, session.share_target().id); return; } @@ -2641,11 +2643,11 @@ void NearbySharingServiceImpl::SendIntroduction( mutual_acceptance_timeout_alarm_->Stop(); mutual_acceptance_timeout_alarm_->Start( absl::ToInt64Milliseconds(kReadResponseFrameTimeout), 0, - [this, share_target_id = info.share_target().id]() { + [this, share_target_id = session.share_target().id]() { OnOutgoingMutualAcceptanceTimeout(share_target_id); }); - info.UpdateTransferMetadata( + session.UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kAwaitingLocalConfirmation) .set_token(four_digit_token) @@ -2653,101 +2655,102 @@ void NearbySharingServiceImpl::SendIntroduction( } void NearbySharingServiceImpl::CreatePayloads( - OutgoingShareTargetInfo& info, - std::function callback) { - int64_t share_target_id = info.share_target().id; - if (!info.file_payloads().empty() || !info.text_payloads().empty() || - !info.wifi_credentials_payloads().empty()) { + OutgoingShareSession& session, + std::function callback) { + int64_t share_target_id = session.share_target().id; + if (!session.file_payloads().empty() || !session.text_payloads().empty() || + !session.wifi_credentials_payloads().empty()) { // We may have already created the payloads in the case of retry, so we can // skip this step. - std::move(callback)(info, /*success=*/false); + std::move(callback)(session, /*success=*/false); return; } - info.CreateTextPayloads(); - info.CreateWifiCredentialsPayloads(); + session.CreateTextPayloads(); + session.CreateWifiCredentialsPayloads(); file_handler_.OpenFiles( - info.GetFilePaths(), + session.GetFilePaths(), [this, share_target_id, callback = std::move(callback)]( std::vector file_infos) { RunOnNearbySharingServiceThread( "open_files", [this, share_target_id, callback = std::move(callback), file_infos = std::move(file_infos)]() { - OutgoingShareTargetInfo* info = - GetOutgoingShareTargetInfo(share_target_id); - if (info == nullptr) { + OutgoingShareSession* session = + GetOutgoingShareSession(share_target_id); + if (session == nullptr) { return; } - bool result = info->CreateFilePayloads(file_infos); - std::move(callback)(*info, result); + bool result = session->CreateFilePayloads(file_infos); + std::move(callback)(*session, result); }); }); } void NearbySharingServiceImpl::OnCreatePayloads( - std::vector endpoint_info, OutgoingShareTargetInfo& info, + std::vector endpoint_info, OutgoingShareSession& session, bool success) { - bool has_payloads = !info.text_payloads().empty() || - !info.file_payloads().empty() || - !info.wifi_credentials_payloads().empty(); + bool has_payloads = !session.text_payloads().empty() || + !session.file_payloads().empty() || + !session.wifi_credentials_payloads().empty(); if (!success || !has_payloads) { NL_LOG(WARNING) << __func__ << ": Failed to send file to remote ShareTarget. Failed to " "create payloads."; - info.UpdateTransferMetadata( + session.UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kMediaUnavailable) .build()); return; } // Log analytics event of describing attachments. - analytics_recorder_->NewDescribeAttachments(info.attachment_container()); + analytics_recorder_->NewDescribeAttachments(session.attachment_container()); std::optional> bluetooth_mac_address = - GetBluetoothMacAddressForShareTarget(info); + GetBluetoothMacAddressForShareTarget(session); // For metrics. all_cancelled_share_target_ids_.clear(); - int64_t share_target_id = info.share_target().id; + int64_t share_target_id = session.share_target().id; nearby_connections_manager_->Connect( - std::move(endpoint_info), info.endpoint_id(), + std::move(endpoint_info), session.endpoint_id(), std::move(bluetooth_mac_address), settings_->GetDataUsage(), - GetTransportType(info.attachment_container()), + GetTransportType(session.attachment_container()), [this, share_target_id](NearbyConnection* connection, Status status) { - OutgoingShareTargetInfo* info = - GetOutgoingShareTargetInfo(share_target_id); - if (info == nullptr) { + OutgoingShareSession* session = + GetOutgoingShareSession(share_target_id); + if (session == nullptr) { NL_LOG(WARNING) << __func__ << "Nearby connection connected, but share target " << share_target_id << " already disconnected."; return; } // Log analytics event of new connection. - info->set_connection_layer_status(status); + session->set_connection_layer_status(status); if (connection == nullptr) { analytics_recorder_->NewEstablishConnection( - info->session_id(), + session->session_id(), EstablishConnectionStatus::CONNECTION_STATUS_FAILURE, - info->share_target(), + session->share_target(), /*transfer_position=*/ GetConnectedShareTargetPos(), /*concurrent_connections=*/GetConnectedShareTargetCount(), - info->connection_start_time().has_value() - ? absl::ToInt64Milliseconds(context_->GetClock()->Now() - - *(info->connection_start_time())) + session->connection_start_time().has_value() + ? absl::ToInt64Milliseconds( + context_->GetClock()->Now() - + *(session->connection_start_time())) : 0, std::nullopt); } - OnOutgoingConnection(context_->GetClock()->Now(), connection, *info); + OnOutgoingConnection(context_->GetClock()->Now(), connection, *session); }); } void NearbySharingServiceImpl::Fail(int64_t share_target_id, TransferMetadata::Status status) { - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); - if (!info || !info->IsConnected()) { + ShareSession* session = GetShareSession(share_target_id); + if (!session || !session->IsConnected()) { NL_LOG(WARNING) << __func__ << ": Fail invoked for unknown share target."; return; } @@ -2755,7 +2758,7 @@ void NearbySharingServiceImpl::Fail(int64_t share_target_id, "incoming_rejection_delay", kIncomingRejectionDelay, [this, share_target_id]() { CloseConnection(share_target_id); }); - info->set_disconnect_status(status); + session->set_disconnect_status(status); // Send response to remote device. nearby::sharing::service::proto::ConnectionResponseFrame::Status @@ -2782,17 +2785,16 @@ void NearbySharingServiceImpl::Fail(int64_t share_target_id, break; } - info->WriteResponseFrame(response_status); - info->UpdateTransferMetadata( + session->WriteResponseFrame(response_status); + session->UpdateTransferMetadata( TransferMetadataBuilder().set_status(status).build()); } void NearbySharingServiceImpl::OnIncomingAdvertisementDecoded( - absl::string_view endpoint_id, - const IncomingShareTargetInfo& share_target_info, + absl::string_view endpoint_id, const IncomingShareSession& session, std::unique_ptr advertisement) { - int64_t placeholder_share_target_id = share_target_info.share_target().id; - if (!share_target_info.IsConnected()) { + int64_t placeholder_share_target_id = session.share_target().id; + if (!session.IsConnected()) { NL_LOG(WARNING) << __func__ << ": Invalid connection for endpoint id - " << endpoint_id; return; @@ -2826,20 +2828,18 @@ void NearbySharingServiceImpl::OnIncomingAdvertisementDecoded( } void NearbySharingServiceImpl::OnIncomingTransferUpdate( - const IncomingShareTargetInfo& share_target_info, - const TransferMetadata& metadata) { + const IncomingShareSession& session, const TransferMetadata& metadata) { // kInProgress status is logged extensively elsewhere so avoid the spam. if (metadata.status() != TransferMetadata::Status::kInProgress) { NL_VLOG(1) << __func__ << ": Nearby Share service: " << "Incoming transfer update for share target with ID " - << share_target_info.share_target().id << ": " + << session.share_target().id << ": " << TransferMetadata::StatusToString(metadata.status()); } if (metadata.status() != TransferMetadata::Status::kCancelled && metadata.status() != TransferMetadata::Status::kRejected) { last_incoming_metadata_ = - std::make_tuple(share_target_info.share_target(), - share_target_info.attachment_container(), + std::make_tuple(session.share_target(), session.attachment_container(), TransferMetadataBuilder::Clone(metadata) .set_is_original(false) .build()); @@ -2850,7 +2850,7 @@ void NearbySharingServiceImpl::OnIncomingTransferUpdate( if (metadata.is_final_status()) { // Log analytics event of receiving attachment end. int64_t received_bytes = - share_target_info.attachment_container().GetTotalAttachmentsSize() * + session.attachment_container().GetTotalAttachmentsSize() * metadata.progress() / 100; AttachmentTransmissionStatus transmission_status = ConvertToTransmissionStatus(metadata.status()); @@ -2863,7 +2863,7 @@ void NearbySharingServiceImpl::OnIncomingTransferUpdate( if (metadata.status() != TransferMetadata::Status::kComplete) { // For any type of failure, lets make sure any pending files get cleaned // up. - RemoveIncomingPayloads(share_target_info); + RemoveIncomingPayloads(session); } else { if (!nearby_connections_manager_->GetAndClearUnknownFilePathsToDelete() .empty()) { @@ -2881,46 +2881,42 @@ void NearbySharingServiceImpl::OnIncomingTransferUpdate( } for (auto& callback : callbacks) { - callback.first->OnTransferUpdate(share_target_info.share_target(), - share_target_info.attachment_container(), - metadata); + callback.first->OnTransferUpdate(session.share_target(), + session.attachment_container(), metadata); } } void NearbySharingServiceImpl::OnOutgoingTransferUpdate( - OutgoingShareTargetInfo& share_target_info, - const TransferMetadata& metadata) { + OutgoingShareSession& session, const TransferMetadata& metadata) { // kInProgress status is logged extensively elsewhere so avoid the spam. if (metadata.status() != TransferMetadata::Status::kInProgress) { NL_VLOG(1) << __func__ << ": Nearby Share service: " << "Outgoing transfer update for share target with ID " - << share_target_info.share_target().id << ": " + << session.share_target().id << ": " << TransferMetadata::StatusToString(metadata.status()); } if (metadata.is_final_status()) { // Log analytics event of sending attachment end. int64_t sent_bytes = - share_target_info.attachment_container().GetTotalAttachmentsSize() * + session.attachment_container().GetTotalAttachmentsSize() * metadata.progress() / 100; AttachmentTransmissionStatus transmission_status = ConvertToTransmissionStatus(metadata.status()); analytics_recorder_->NewSendAttachmentsEnd( - share_target_info.session_id(), sent_bytes, - share_target_info.share_target(), transmission_status, + session.session_id(), sent_bytes, session.share_target(), + transmission_status, /*transfer_position=*/GetConnectedShareTargetPos(), /*concurrent_connections=*/GetConnectedShareTargetCount(), /*duration_millis=*/ - share_target_info.connection_start_time().has_value() - ? absl::ToInt64Milliseconds( - context_->GetClock()->Now() - - *(share_target_info.connection_start_time())) + session.connection_start_time().has_value() + ? absl::ToInt64Milliseconds(context_->GetClock()->Now() - + *(session.connection_start_time())) : 0, /*referrer_package=*/std::nullopt, - ConvertToConnectionLayerStatus( - share_target_info.connection_layer_status()), - share_target_info.os_type()); + ConvertToConnectionLayerStatus(session.connection_layer_status()), + session.os_type()); is_connecting_ = false; OnTransferComplete(); } else if (metadata.status() == TransferMetadata::Status::kMediaDownloading || @@ -2931,18 +2927,16 @@ void NearbySharingServiceImpl::OnOutgoingTransferUpdate( } bool has_foreground_send_surface = !foreground_send_surface_map_.empty(); - // only call transfer update when having share target info. + // only call transfer update when having share session. if (has_foreground_send_surface) { for (auto& entry : foreground_send_surface_map_) { - entry.first->OnTransferUpdate(share_target_info.share_target(), - share_target_info.attachment_container(), - metadata); + entry.first->OnTransferUpdate(session.share_target(), + session.attachment_container(), metadata); } } else { for (auto& entry : background_send_surface_map_) { - entry.first->OnTransferUpdate(share_target_info.share_target(), - share_target_info.attachment_container(), - metadata); + entry.first->OnTransferUpdate(session.share_target(), + session.attachment_container(), metadata); } } @@ -2954,7 +2948,7 @@ void NearbySharingServiceImpl::OnOutgoingTransferUpdate( metadata.in_progress_attachment_total_bytes().has_value() && *metadata.in_progress_attachment_transferred_bytes() == *metadata.in_progress_attachment_total_bytes()) { - share_target_info.SendNextPayload(*nearby_connections_manager_); + session.SendNextPayload(*nearby_connections_manager_); } } @@ -2962,8 +2956,7 @@ void NearbySharingServiceImpl::OnOutgoingTransferUpdate( last_outgoing_metadata_ = std::nullopt; } else { last_outgoing_metadata_ = - std::make_tuple(share_target_info.share_target(), - share_target_info.attachment_container(), + std::make_tuple(session.share_target(), session.attachment_container(), TransferMetadataBuilder::Clone(metadata) .set_is_original(false) .build()); @@ -2971,9 +2964,9 @@ void NearbySharingServiceImpl::OnOutgoingTransferUpdate( } void NearbySharingServiceImpl::CloseConnection(int64_t share_target_id) { - ShareTargetInfo* share_target_info = GetShareTargetInfo(share_target_id); - if (share_target_info != nullptr && share_target_info->IsConnected()) { - share_target_info->connection()->Close(); + ShareSession* session = GetShareSession(share_target_id); + if (session != nullptr && session->IsConnected()) { + session->connection()->Close(); return; } NL_LOG(WARNING) << __func__ << ": Invalid connection for target - " @@ -2984,8 +2977,8 @@ void NearbySharingServiceImpl::OnIncomingDecryptedCertificate( absl::string_view endpoint_id, const Advertisement& advertisement, int64_t placeholder_share_target_id, std::optional certificate) { - auto it = incoming_share_target_info_map_.find(placeholder_share_target_id); - if (it == incoming_share_target_info_map_.end()) { + auto it = incoming_share_session_map_.find(placeholder_share_target_id); + if (it == incoming_share_session_map_.end()) { NL_VLOG(1) << __func__ << ": Invalid connection for endpoint id - " << endpoint_id; return; @@ -2993,14 +2986,14 @@ void NearbySharingServiceImpl::OnIncomingDecryptedCertificate( if (!it->second.IsConnected()) { NL_VLOG(1) << __func__ << ": Connection has been closedfor endpoint id - " << endpoint_id; - incoming_share_target_info_map_.erase(it); + incoming_share_session_map_.erase(it); return; } NearbyConnection* connection = it->second.connection(); // Remove placeholder share target since we are creating the actual share // target below. - incoming_share_target_info_map_.erase(it); + incoming_share_session_map_.erase(it); std::optional share_target = CreateShareTarget(endpoint_id, advertisement, certificate, @@ -3018,19 +3011,19 @@ void NearbySharingServiceImpl::OnIncomingDecryptedCertificate( NL_VLOG(1) << __func__ << ": Received incoming connection from " << share_target_id; - IncomingShareTargetInfo& share_target_info = CreateIncomingShareTargetInfo( + IncomingShareSession& session = CreateIncomingShareSession( *share_target, endpoint_id, std::move(certificate)); - share_target_info.OnConnected(context_->GetClock()->Now(), connection); + session.OnConnected(context_->GetClock()->Now(), connection); // Need to rebind the disconnect listener to the new share target id. connection->SetDisconnectionListener( [this, share_target_id]() { OnConnectionDisconnected(share_target_id); }); std::optional> token = nearby_connections_manager_->GetRawAuthenticationToken( - share_target_info.endpoint_id()); + session.endpoint_id()); std::optional four_digit_token = TokenToFourDigitString(token); - share_target_info.RunPairedKeyVerification( + session.RunPairedKeyVerification( context_, decoder_, ToProtoOsType(device_info_.GetOsType()), { .visibility = settings_->GetVisibility(), @@ -3052,13 +3045,13 @@ void NearbySharingServiceImpl::OnIncomingConnectionKeyVerificationDone( int64_t share_target_id, std::optional four_digit_token, PairedKeyVerificationRunner::PairedKeyVerificationResult result, OSType share_target_os_type) { - IncomingShareTargetInfo* info = GetIncomingShareTargetInfo(share_target_id); - if (!info || !info->IsConnected()) { + IncomingShareSession* session = GetIncomingShareSession(share_target_id); + if (!session || !session->IsConnected()) { NL_VLOG(1) << __func__ << ": Invalid connection or endpoint id"; return; } - info->set_os_type(share_target_os_type); + session->set_os_type(share_target_os_type); switch (result) { case PairedKeyVerificationRunner::PairedKeyVerificationResult::kFail: @@ -3072,7 +3065,7 @@ void NearbySharingServiceImpl::OnIncomingConnectionKeyVerificationDone( case PairedKeyVerificationRunner::PairedKeyVerificationResult::kSuccess: NL_VLOG(1) << __func__ << ": Paired key handshake succeeded for target - " << share_target_id; - ReceiveIntroduction(*info, /*four_digit_token=*/std::nullopt); + ReceiveIntroduction(*session, /*four_digit_token=*/std::nullopt); break; case PairedKeyVerificationRunner::PairedKeyVerificationResult::kUnable: @@ -3080,9 +3073,9 @@ void NearbySharingServiceImpl::OnIncomingConnectionKeyVerificationDone( << ": Unable to verify paired key encryption when " "receiving connection from target - " << share_target_id; - if (four_digit_token) info->set_token(*four_digit_token); + if (four_digit_token) session->set_token(*four_digit_token); - ReceiveIntroduction(*info, std::move(four_digit_token)); + ReceiveIntroduction(*session, std::move(four_digit_token)); break; case PairedKeyVerificationRunner::PairedKeyVerificationResult::kUnknown: @@ -3100,12 +3093,12 @@ void NearbySharingServiceImpl::OnOutgoingConnectionKeyVerificationDone( int64_t share_target_id, std::optional four_digit_token, PairedKeyVerificationRunner::PairedKeyVerificationResult result, OSType share_target_os_type) { - OutgoingShareTargetInfo* info = GetOutgoingShareTargetInfo(share_target_id); - if (!info || !info->IsConnected()) { + OutgoingShareSession* session = GetOutgoingShareSession(share_target_id); + if (!session || !session->IsConnected()) { return; } - info->set_os_type(share_target_os_type); + session->set_os_type(share_target_os_type); switch (result) { case PairedKeyVerificationRunner::PairedKeyVerificationResult::kFail: @@ -3119,8 +3112,8 @@ void NearbySharingServiceImpl::OnOutgoingConnectionKeyVerificationDone( case PairedKeyVerificationRunner::PairedKeyVerificationResult::kSuccess: NL_VLOG(1) << __func__ << ": Paired key handshake succeeded for target - " << share_target_id; - SendIntroduction(*info, /*four_digit_token=*/std::nullopt); - SendPayloads(*info); + SendIntroduction(*session, /*four_digit_token=*/std::nullopt); + SendPayloads(*session); return; case PairedKeyVerificationRunner::PairedKeyVerificationResult::kUnable: @@ -3130,7 +3123,7 @@ void NearbySharingServiceImpl::OnOutgoingConnectionKeyVerificationDone( << share_target_id; if (four_digit_token) { - info->set_token(*four_digit_token); + session->set_token(*four_digit_token); } if (NearbyFlags::GetInstance().GetBoolFlag( @@ -3140,10 +3133,10 @@ void NearbySharingServiceImpl::OnOutgoingConnectionKeyVerificationDone( << ": Sender-side verification is disabled. Skipping " "token comparison with " << share_target_id; - SendIntroduction(*info, /*four_digit_token=*/std::nullopt); - SendPayloads(*info); + SendIntroduction(*session, /*four_digit_token=*/std::nullopt); + SendPayloads(*session); } else { - SendIntroduction(*info, std::move(four_digit_token)); + SendIntroduction(*session, std::move(four_digit_token)); } return; @@ -3159,15 +3152,15 @@ void NearbySharingServiceImpl::OnOutgoingConnectionKeyVerificationDone( } void NearbySharingServiceImpl::ReceiveIntroduction( - const IncomingShareTargetInfo& info, + const IncomingShareSession& session, std::optional four_digit_token) { NL_LOG(INFO) << __func__ << ": Receiving introduction from " - << info.share_target().id; - NL_DCHECK(info.IsConnected()); + << session.share_target().id; + NL_DCHECK(session.IsConnected()); - info.frames_reader()->ReadFrame( + session.frames_reader()->ReadFrame( nearby::sharing::service::proto::V1Frame::INTRODUCTION, - [this, share_target_id = info.share_target().id, + [this, share_target_id = session.share_target().id, four_digit_token = std::move(four_digit_token)]( std::optional frame) { OnReceivedIntroduction(share_target_id, std::move(four_digit_token), @@ -3179,8 +3172,8 @@ void NearbySharingServiceImpl::ReceiveIntroduction( void NearbySharingServiceImpl::OnReceivedIntroduction( int64_t share_target_id, std::optional four_digit_token, std::optional frame) { - IncomingShareTargetInfo* info = GetIncomingShareTargetInfo(share_target_id); - if (!info || !info->IsConnected()) { + IncomingShareSession* session = GetIncomingShareSession(share_target_id); + if (!session || !session->IsConnected()) { NL_LOG(WARNING) << __func__ << ": Ignore received introduction, due to no connection established."; @@ -3197,7 +3190,7 @@ void NearbySharingServiceImpl::OnReceivedIntroduction( NL_LOG(INFO) << __func__ << ": Successfully read the introduction frame."; std::optional status = - info->ProcessIntroduction(frame->introduction()); + session->ProcessIntroduction(frame->introduction()); if (status.has_value()) { Fail(share_target_id, *status); return; @@ -3205,8 +3198,8 @@ void NearbySharingServiceImpl::OnReceivedIntroduction( // Log analytics event of receiving introduction. analytics_recorder_->NewReceiveIntroduction( - receiving_session_id_, info->share_target(), - /*referrer_package=*/std::nullopt, info->os_type()); + receiving_session_id_, session->share_target(), + /*referrer_package=*/std::nullopt, session->os_type()); // Controls BWU using a flag when receiving an introduction frame, since it // could be a problem before accepted by a user. @@ -3215,12 +3208,12 @@ void NearbySharingServiceImpl::OnReceivedIntroduction( kUpgradeBandwidthAfterAccept)) { if (frame->introduction().has_start_transfer() && frame->introduction().start_transfer()) { - if (info->attachment_container().GetTotalAttachmentsSize() >= + if (session->attachment_container().GetTotalAttachmentsSize() >= kAttachmentsSizeThresholdOverHighQualityMedium) { NL_LOG(INFO) << __func__ << ": Upgrade bandwidth when receiving an introduction frame."; - nearby_connections_manager_->UpgradeBandwidth(info->endpoint_id()); + nearby_connections_manager_->UpgradeBandwidth(session->endpoint_id()); } } } @@ -3230,21 +3223,21 @@ void NearbySharingServiceImpl::OnReceivedIntroduction( bool is_out_of_storage = IsOutOfStorage(device_info_, download_path, - info->attachment_container().GetStorageSize()); + session->attachment_container().GetStorageSize()); OnStorageCheckCompleted(share_target_id, std::move(four_digit_token), is_out_of_storage); } void NearbySharingServiceImpl::ReceiveConnectionResponse( - ShareTargetInfo& info) { + ShareSession& session) { NL_VLOG(1) << __func__ << ": Receiving response frame from " - << info.share_target().id; - NL_DCHECK(info.IsConnected()); + << session.share_target().id; + NL_DCHECK(session.IsConnected()); - info.frames_reader()->ReadFrame( + session.frames_reader()->ReadFrame( nearby::sharing::service::proto::V1Frame::RESPONSE, - [this, share_target_id = info.share_target().id]( + [this, share_target_id = session.share_target().id]( std::optional frame) { OnReceiveConnectionResponse(share_target_id, std::move(frame)); }, @@ -3254,8 +3247,8 @@ void NearbySharingServiceImpl::ReceiveConnectionResponse( void NearbySharingServiceImpl::OnReceiveConnectionResponse( int64_t share_target_id, std::optional frame) { - OutgoingShareTargetInfo* info = GetOutgoingShareTargetInfo(share_target_id); - if (!info || !info->IsConnected()) { + OutgoingShareSession* session = GetOutgoingShareSession(share_target_id); + if (!session || !session->IsConnected()) { NL_LOG(WARNING) << __func__ << ": Ignore received connection response, due to no " "connection established."; @@ -3282,16 +3275,16 @@ void NearbySharingServiceImpl::OnReceiveConnectionResponse( switch (response.status()) { case nearby::sharing::service::proto::ConnectionResponseFrame::ACCEPT: { // Write progress update frame to remote machine. - info->WriteProgressUpdateFrame(/*start_transfer=*/true, - /*progress=*/std::nullopt); + session->WriteProgressUpdateFrame(/*start_transfer=*/true, + /*progress=*/std::nullopt); - info->frames_reader()->ReadFrame( + session->frames_reader()->ReadFrame( [this, share_target_id]( std::optional frame) { OnFrameRead(share_target_id, std::move(frame)); }); - info->UpdateTransferMetadata( + session->UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kInProgress) .build()); @@ -3299,13 +3292,13 @@ void NearbySharingServiceImpl::OnReceiveConnectionResponse( if (NearbyFlags::GetInstance().GetBoolFlag( config_package_nearby::nearby_sharing_feature:: kEnableTransferCancellationOptimization)) { - info->InitSendPayload( + session->InitSendPayload( context_, *nearby_connections_manager_, absl::bind_front(&NearbySharingServiceImpl::OnPayloadTransferUpdate, this)); - info->SendNextPayload(*nearby_connections_manager_); + session->SendNextPayload(*nearby_connections_manager_); } else { - info->SendAllPayloads( + session->SendAllPayloads( context_, *nearby_connections_manager_, absl::bind_front(&NearbySharingServiceImpl::OnPayloadTransferUpdate, this)); @@ -3367,8 +3360,8 @@ void NearbySharingServiceImpl::OnStorageCheckCompleted( << share_target_id; return; } - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); - if (!info || !info->IsConnected()) { + ShareSession* session = GetShareSession(share_target_id); + if (!session || !session->IsConnected()) { NL_LOG(WARNING) << __func__ << ": Invalid connection for share target - " << share_target_id; return; @@ -3381,8 +3374,8 @@ void NearbySharingServiceImpl::OnStorageCheckCompleted( OnIncomingMutualAcceptanceTimeout(share_target_id); }); - bool is_self_share = !four_digit_token.has_value() && info->self_share(); - bool is_self_share_auto_accept = info->self_share(); + bool is_self_share = !four_digit_token.has_value() && session->self_share(); + bool is_self_share_auto_accept = session->self_share(); if (!is_self_share_auto_accept) { TransferMetadataBuilder transfer_metadata_builder; @@ -3391,14 +3384,14 @@ void NearbySharingServiceImpl::OnStorageCheckCompleted( transfer_metadata_builder.set_token(four_digit_token); transfer_metadata_builder.set_is_self_share(is_self_share); - info->UpdateTransferMetadata(transfer_metadata_builder.build()); + session->UpdateTransferMetadata(transfer_metadata_builder.build()); } else { // Don't need to send kAwaitingLocalConfirmation for auto accept of Self // share. OnTransferStarted(/*is_incoming=*/true); } - if (!incoming_share_target_info_map_.count(share_target_id)) { + if (!incoming_share_session_map_.count(share_target_id)) { NL_VLOG(1) << __func__ << ": IncomingShareTarget not found, disconnecting " << share_target_id; AbortAndCloseConnectionIfNecessary( @@ -3406,10 +3399,10 @@ void NearbySharingServiceImpl::OnStorageCheckCompleted( return; } - info->set_disconnect_status( + session->set_disconnect_status( TransferMetadata::Status::kUnexpectedDisconnection); - auto* frames_reader = info->frames_reader(); + auto* frames_reader = session->frames_reader(); if (!frames_reader) { NL_LOG(WARNING) << __func__ << ": Stopped reading further frames, due to no connection " @@ -3465,15 +3458,15 @@ void NearbySharingServiceImpl::OnFrameRead( break; } - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); - if (!info || !info->frames_reader()) { + ShareSession* session = GetShareSession(share_target_id); + if (!session || !session->frames_reader()) { NL_LOG(WARNING) << __func__ << ": Stopped reading further frames, due to no connection " "established."; return; } - info->frames_reader()->ReadFrame( + session->frames_reader()->ReadFrame( [this, share_target_id]( std::optional frame) { OnFrameRead(share_target_id, std::move(frame)); @@ -3486,17 +3479,17 @@ void NearbySharingServiceImpl::HandleProgressUpdateFrame( progress_update_frame) { if (progress_update_frame.has_start_transfer() && progress_update_frame.start_transfer()) { - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); + ShareSession* session = GetShareSession(share_target_id); - if (info != nullptr && - info->attachment_container().GetTotalAttachmentsSize() >= + if (session != nullptr && + session->attachment_container().GetTotalAttachmentsSize() >= kAttachmentsSizeThresholdOverHighQualityMedium) { NL_LOG(INFO) << __func__ << ": Upgrade bandwidth when receiving progress update frame " "for endpoint " - << info->endpoint_id(); - nearby_connections_manager_->UpgradeBandwidth(info->endpoint_id()); + << session->endpoint_id(); + nearby_connections_manager_->UpgradeBandwidth(session->endpoint_id()); } } @@ -3512,9 +3505,9 @@ void NearbySharingServiceImpl::OnConnectionDisconnected( if (IsShuttingDown()) { return; } - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); - if (info != nullptr) { - info->OnDisconnect(); + ShareSession* session = GetShareSession(share_target_id); + if (session != nullptr) { + session->OnDisconnect(); } UnregisterShareTarget(share_target_id); } @@ -3592,8 +3585,8 @@ std::optional NearbySharingServiceImpl::CreateShareTarget( void NearbySharingServiceImpl::OnPayloadTransferUpdate( int64_t share_target_id, TransferMetadata metadata) { - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); - if (!info) { + ShareSession* session = GetShareSession(share_target_id); + if (!session) { // ShareTarget already disconnected. NL_LOG(WARNING) << "Received payload update after share target disconnected: " @@ -3612,23 +3605,23 @@ void NearbySharingServiceImpl::OnPayloadTransferUpdate( } bool payload_incomplete = false; - if (info->IsIncoming()) { + if (session->IsIncoming()) { if (is_in_progress && is_waiting_to_record_accept_to_transfer_start_metric_) { is_waiting_to_record_accept_to_transfer_start_metric_ = false; } - IncomingShareTargetInfo* incoming_info = - GetIncomingShareTargetInfo(share_target_id); + IncomingShareSession* incoming_session = + GetIncomingShareSession(share_target_id); // Update file paths during progress. It may impact transfer speed. // TODO: b/289290115 - Revisit UpdateFilePath to enhance transfer speed for // MacOS. if (update_file_paths_in_progress_) { - incoming_info->UpdateFilePayloadPaths(*nearby_connections_manager_); + incoming_session->UpdateFilePayloadPaths(*nearby_connections_manager_); } if (metadata.status() == TransferMetadata::Status::kComplete) { - if (!incoming_info->FinalizePayloads(*nearby_connections_manager_)) { + if (!incoming_session->FinalizePayloads(*nearby_connections_manager_)) { payload_incomplete = true; } @@ -3642,7 +3635,7 @@ void NearbySharingServiceImpl::OnPayloadTransferUpdate( } else if (metadata.status() == TransferMetadata::Status::kCancelled) { NL_VLOG(1) << __func__ << ": Update file paths for cancelled transfer"; if (!update_file_paths_in_progress_) { - incoming_info->UpdateFilePayloadPaths(*nearby_connections_manager_); + incoming_session->UpdateFilePayloadPaths(*nearby_connections_manager_); } } } @@ -3650,7 +3643,7 @@ void NearbySharingServiceImpl::OnPayloadTransferUpdate( // Make sure to call this before calling Disconnect, or we risk losing some // transfer updates in the receive case due to the Disconnect call cleaning up // share targets. - info->UpdateTransferMetadata( + session->UpdateTransferMetadata( payload_incomplete ? TransferMetadataBuilder() .set_status(TransferMetadata::Status::kIncompletePayloads) @@ -3660,7 +3653,7 @@ void NearbySharingServiceImpl::OnPayloadTransferUpdate( if (payload_incomplete || TransferMetadata::IsFinalStatus(metadata.status())) { // final status already sent, no need to send again on disconnect. - info->set_disconnect_status(TransferMetadata::Status::kUnknown); + session->set_disconnect_status(TransferMetadata::Status::kUnknown); } // Cancellation has its own disconnection strategy, possibly adding a // delay before disconnection to provide the other party time to process @@ -3672,7 +3665,7 @@ void NearbySharingServiceImpl::OnPayloadTransferUpdate( } void NearbySharingServiceImpl::RemoveIncomingPayloads( - const IncomingShareTargetInfo& share_target_info) { + const IncomingShareSession& session) { NL_LOG(INFO) << __func__ << ": Cleaning up payloads due to transfer failure"; nearby_connections_manager_->ClearIncomingPayloads(); std::vector files_for_deletion; @@ -3688,7 +3681,7 @@ void NearbySharingServiceImpl::RemoveIncomingPayloads( } } std::vector payload_file_path = - share_target_info.GetPayloadFilePaths(); + session.GetPayloadFilePaths(); files_for_deletion.insert(files_for_deletion.end(), payload_file_path.begin(), payload_file_path.end()); file_handler_.DeleteFilesFromDisk(std::move(files_for_deletion), []() {}); @@ -3696,21 +3689,21 @@ void NearbySharingServiceImpl::RemoveIncomingPayloads( void NearbySharingServiceImpl::Disconnect(int64_t share_target_id, TransferMetadata metadata) { - ShareTargetInfo* share_target_info = GetShareTargetInfo(share_target_id); - if (!share_target_info) { + ShareSession* session = GetShareSession(share_target_id); + if (!session) { NL_LOG(WARNING) << __func__ - << ": Failed to disconnect. No share target info found for target - " + << ": Failed to disconnect. No share session found for target - " << share_target_id; return; } - std::string endpoint_id = share_target_info->endpoint_id(); + std::string endpoint_id = session->endpoint_id(); // Failed to send or receive. No point in continuing, so disconnect // immediately. if (metadata.status() != TransferMetadata::Status::kComplete) { - if (share_target_info->IsConnected()) { - share_target_info->connection()->Close(); + if (session->IsConnected()) { + session->connection()->Close(); } else { nearby_connections_manager_->Disconnect(endpoint_id); } @@ -3718,9 +3711,9 @@ void NearbySharingServiceImpl::Disconnect(int64_t share_target_id, } // Files received successfully. Receivers can immediately cancel. - if (share_target_info->IsIncoming()) { - if (share_target_info->IsConnected()) { - share_target_info->connection()->Close(); + if (session->IsIncoming()) { + if (session->IsConnected()) { + session->connection()->Close(); } else { nearby_connections_manager_->Disconnect(endpoint_id); } @@ -3735,7 +3728,7 @@ void NearbySharingServiceImpl::Disconnect(int64_t share_target_id, disconnection_timeout_alarms_[endpoint_id] = std::move(timer); - share_target_info->set_disconnect_status(TransferMetadata::Status::kUnknown); + session->set_disconnect_status(TransferMetadata::Status::kUnknown); } void NearbySharingServiceImpl::OnDisconnectingConnectionTimeout( @@ -3748,12 +3741,11 @@ void NearbySharingServiceImpl::OnDisconnectingConnectionTimeout( nearby_connections_manager_->Disconnect(endpoint_id); } -IncomingShareTargetInfo& -NearbySharingServiceImpl::CreateIncomingShareTargetInfo( +IncomingShareSession& NearbySharingServiceImpl::CreateIncomingShareSession( const ShareTarget& share_target, absl::string_view endpoint_id, std::optional certificate) { NL_DCHECK(share_target.is_incoming); - auto [it, inserted] = incoming_share_target_info_map_.try_emplace( + auto [it, inserted] = incoming_share_session_map_.try_emplace( share_target.id, std::string(endpoint_id), share_target, absl::bind_front(&NearbySharingServiceImpl::OnIncomingTransferUpdate, this)); @@ -3767,8 +3759,7 @@ NearbySharingServiceImpl::CreateIncomingShareTargetInfo( return it->second; } -OutgoingShareTargetInfo& -NearbySharingServiceImpl::CreateOutgoingShareTargetInfo( +OutgoingShareSession& NearbySharingServiceImpl::CreateOutgoingShareSession( const ShareTarget& share_target, absl::string_view endpoint_id, std::optional certificate) { // We need to explicitly remove any previous share target for @@ -3784,41 +3775,41 @@ NearbySharingServiceImpl::CreateOutgoingShareTargetInfo( << ", share_target_id=" << share_target.id << ") to outgoing share target map"; outgoing_share_target_map_.insert_or_assign(endpoint_id, share_target); - auto [it_out, inserted] = outgoing_share_target_info_map_.try_emplace( + auto [it_out, inserted] = outgoing_share_session_map_.try_emplace( share_target.id, std::string(endpoint_id), share_target, absl::bind_front(&NearbySharingServiceImpl::OnOutgoingTransferUpdate, this)); - auto& info = it_out->second; - info.set_connection_layer_status(Status::kUnknown); + auto& session = it_out->second; + session.set_connection_layer_status(Status::kUnknown); if (certificate.has_value()) { - info.set_certificate(std::move(*certificate)); + session.set_certificate(std::move(*certificate)); } - return info; + return session; } -ShareTargetInfo* NearbySharingServiceImpl::GetShareTargetInfo( +ShareSession* NearbySharingServiceImpl::GetShareSession( int64_t share_target_id) { - ShareTargetInfo* result = GetIncomingShareTargetInfo(share_target_id); + ShareSession* result = GetIncomingShareSession(share_target_id); if (result != nullptr) { return result; } - return GetOutgoingShareTargetInfo(share_target_id); + return GetOutgoingShareSession(share_target_id); } -IncomingShareTargetInfo* NearbySharingServiceImpl::GetIncomingShareTargetInfo( +IncomingShareSession* NearbySharingServiceImpl::GetIncomingShareSession( int64_t share_target_id) { - auto it = incoming_share_target_info_map_.find(share_target_id); - if (it == incoming_share_target_info_map_.end()) { + auto it = incoming_share_session_map_.find(share_target_id); + if (it == incoming_share_session_map_.end()) { return nullptr; } return &it->second; } -OutgoingShareTargetInfo* NearbySharingServiceImpl::GetOutgoingShareTargetInfo( +OutgoingShareSession* NearbySharingServiceImpl::GetOutgoingShareSession( int64_t share_target_id) { - auto it = outgoing_share_target_info_map_.find(share_target_id); - if (it == outgoing_share_target_info_map_.end()) { + auto it = outgoing_share_session_map_.find(share_target_id); + if (it == outgoing_share_session_map_.end()) { return nullptr; } @@ -3827,26 +3818,26 @@ OutgoingShareTargetInfo* NearbySharingServiceImpl::GetOutgoingShareTargetInfo( std::optional> NearbySharingServiceImpl::GetBluetoothMacAddressForShareTarget( - OutgoingShareTargetInfo& info) { + OutgoingShareSession& session) { const std::optional& certificate = - info.certificate(); + session.certificate(); if (!certificate) { NL_LOG(ERROR) << __func__ << ": No decrypted public certificate found for " - << "share target id: " << info.share_target().id; + << "share target id: " << session.share_target().id; return std::nullopt; } return GetBluetoothMacAddressFromCertificate(*certificate); } -void NearbySharingServiceImpl::ClearOutgoingShareTargetInfoMap() { +void NearbySharingServiceImpl::ClearOutgoingShareSessionMap() { NL_VLOG(1) << __func__ << ": Clearing outgoing share target map."; while (!outgoing_share_target_map_.empty()) { RemoveOutgoingShareTargetWithEndpointId( /*endpoint_id=*/outgoing_share_target_map_.begin()->first); } NL_DCHECK(outgoing_share_target_map_.empty()); - NL_DCHECK(outgoing_share_target_info_map_.empty()); + NL_DCHECK(outgoing_share_session_map_.empty()); } void NearbySharingServiceImpl::UnregisterShareTarget(int64_t share_target_id) { @@ -3856,10 +3847,9 @@ void NearbySharingServiceImpl::UnregisterShareTarget(int64_t share_target_id) { // For metrics. all_cancelled_share_target_ids_.erase(share_target_id); - // If share target ID is found in incoming_share_target_info_map_, then it's - // an incoming share target. - bool is_incoming = - (incoming_share_target_info_map_.erase(share_target_id) > 0); + // If share target ID is found in incoming_share_session_map_, then it's an + // incoming share target. + bool is_incoming = (incoming_share_session_map_.erase(share_target_id) > 0); if (is_incoming) { if (last_incoming_metadata_ && std::get<0>(*last_incoming_metadata_).id == share_target_id) { @@ -3874,14 +3864,14 @@ void NearbySharingServiceImpl::UnregisterShareTarget(int64_t share_target_id) { last_outgoing_metadata_.reset(); } // Find the endpoint id that matches the given share target. - auto it = outgoing_share_target_info_map_.find(share_target_id); - if (it != outgoing_share_target_info_map_.end()) { + auto it = outgoing_share_session_map_.find(share_target_id); + if (it != outgoing_share_session_map_.end()) { RemoveOutgoingShareTargetWithEndpointId(it->second.endpoint_id()); } else { - // Be careful not to clear out the share target info map if a new session - // was started during the cancellation delay. + // Be careful not to clear out the share session map if a new session was + // started during the cancellation delay. if (!is_scanning_ && !is_transferring_) { - ClearOutgoingShareTargetInfoMap(); + ClearOutgoingShareSessionMap(); } } @@ -3968,22 +3958,22 @@ void NearbySharingServiceImpl::AbortAndCloseConnectionIfNecessary( [this, status, share_target_id]() { TransferMetadata metadata = TransferMetadataBuilder().set_status(status).build(); - ShareTargetInfo* info = GetShareTargetInfo(share_target_id); + ShareSession* session = GetShareSession(share_target_id); - if (info == nullptr) { + if (session == nullptr) { NL_LOG(WARNING) << ": Share target " << share_target_id << " lost"; return; } // First invoke the appropriate transfer callback with the final // |status|. - info->UpdateTransferMetadata(metadata); + session->UpdateTransferMetadata(metadata); // Close connection if necessary. - if (info->IsConnected()) { + if (session->IsConnected()) { // Final status already sent above. No need to send it again. - info->set_disconnect_status(TransferMetadata::Status::kUnknown); - info->connection()->Close(); + session->set_disconnect_status(TransferMetadata::Status::kUnknown); + session->connection()->Close(); } }); } diff --git a/sharing/nearby_sharing_service_impl.h b/sharing/nearby_sharing_service_impl.h index c3faf8fe..62237ee6 100644 --- a/sharing/nearby_sharing_service_impl.h +++ b/sharing/nearby_sharing_service_impl.h @@ -88,7 +88,7 @@ class NearbyShareContactManager; namespace NearbySharingServiceUnitTests { class NearbySharingServiceImplTest_CreateShareTarget_Test; class NearbySharingServiceImplTest_RemoveIncomingPayloads_Test; -}; +}; // namespace NearbySharingServiceUnitTests // All methods should be called from the same sequence that created the service. class NearbySharingServiceImpl @@ -108,8 +108,8 @@ class NearbySharingServiceImpl public: NearbySharingServiceImpl( - std::unique_ptr service_thread, - Context* context, nearby::sharing::api::SharingPlatform& sharing_platform, + std::unique_ptr service_thread, Context* context, + nearby::sharing::api::SharingPlatform& sharing_platform, NearbySharingDecoder* decoder, std::unique_ptr nearby_connections_manager, nearby::analytics::EventLogger* event_logger = nullptr); @@ -315,33 +315,30 @@ class NearbySharingServiceImpl void OnTransferStarted(bool is_incoming); void ReceivePayloads( - IncomingShareTargetInfo& share_target_info, + IncomingShareSession& session, std::function status_codes_callback); - StatusCodes SendPayloads(ShareTargetInfo& info); + StatusCodes SendPayloads(ShareSession& session); void OnOutgoingConnection(absl::Time connect_start_time, NearbyConnection* connection, - OutgoingShareTargetInfo& info); - void SendIntroduction(OutgoingShareTargetInfo& info, + OutgoingShareSession& session); + void SendIntroduction(OutgoingShareSession& session, std::optional four_digit_token); void CreatePayloads( - OutgoingShareTargetInfo& info, - std::function callback); + OutgoingShareSession& session, + std::function callback); void OnCreatePayloads(std::vector endpoint_info, - OutgoingShareTargetInfo& info, bool success); + OutgoingShareSession& session, bool success); void Fail(int64_t share_target_id, TransferMetadata::Status status); void OnIncomingAdvertisementDecoded( - absl::string_view endpoint_id, - const IncomingShareTargetInfo& share_target_info, + absl::string_view endpoint_id, const IncomingShareSession& session, std::unique_ptr advertisement); - void OnIncomingTransferUpdate( - const IncomingShareTargetInfo& share_target_info, - const TransferMetadata& metadata); - void OnOutgoingTransferUpdate( - OutgoingShareTargetInfo& share_target_info, - const TransferMetadata& metadata); + void OnIncomingTransferUpdate(const IncomingShareSession& session, + const TransferMetadata& metadata); + void OnOutgoingTransferUpdate(OutgoingShareSession& session, + const TransferMetadata& metadata); void CloseConnection(int64_t share_target_id); void OnIncomingDecryptedCertificate( absl::string_view endpoint_id, const Advertisement& advertisement, @@ -352,16 +349,15 @@ class NearbySharingServiceImpl PairedKeyVerificationRunner::PairedKeyVerificationResult result, ::location::nearby::proto::sharing::OSType share_target_os_type); void OnOutgoingConnectionKeyVerificationDone( - int64_t share_target_id, - std::optional four_digit_token, + int64_t share_target_id, std::optional four_digit_token, PairedKeyVerificationRunner::PairedKeyVerificationResult result, ::location::nearby::proto::sharing::OSType share_target_os_type); - void ReceiveIntroduction(const IncomingShareTargetInfo& info, + void ReceiveIntroduction(const IncomingShareSession& session, std::optional four_digit_token); void OnReceivedIntroduction( int64_t share_target_id, std::optional four_digit_token, std::optional frame); - void ReceiveConnectionResponse(ShareTargetInfo& info); + void ReceiveConnectionResponse(ShareSession& session); void OnReceiveConnectionResponse( int64_t share_target_id, std::optional frame); @@ -384,32 +380,31 @@ class NearbySharingServiceImpl void Cleanup(); std::optional CreateShareTarget( - absl::string_view endpoint_id, - const Advertisement& advertisement, + absl::string_view endpoint_id, const Advertisement& advertisement, const std::optional& certificate, bool is_incoming); void OnPayloadTransferUpdate(int64_t share_target_id, TransferMetadata metadata); - void RemoveIncomingPayloads(const IncomingShareTargetInfo& share_target_info); + void RemoveIncomingPayloads(const IncomingShareSession& session); void Disconnect(int64_t share_target_id, TransferMetadata metadata); void OnDisconnectingConnectionTimeout(absl::string_view endpoint_id); - IncomingShareTargetInfo& CreateIncomingShareTargetInfo( + IncomingShareSession& CreateIncomingShareSession( const ShareTarget& share_target, absl::string_view endpoint_id, std::optional certificate); - OutgoingShareTargetInfo& CreateOutgoingShareTargetInfo( + OutgoingShareSession& CreateOutgoingShareSession( const ShareTarget& share_target, absl::string_view endpoint_id, std::optional certificate); - ShareTargetInfo* GetShareTargetInfo(int64_t share_target_id); - IncomingShareTargetInfo* GetIncomingShareTargetInfo(int64_t share_target_id); - OutgoingShareTargetInfo* GetOutgoingShareTargetInfo(int64_t share_target_id); + ShareSession* GetShareSession(int64_t share_target_id); + IncomingShareSession* GetIncomingShareSession(int64_t share_target_id); + OutgoingShareSession* GetOutgoingShareSession(int64_t share_target_id); std::optional> GetBluetoothMacAddressForShareTarget( - OutgoingShareTargetInfo& info); + OutgoingShareSession& session); - void ClearOutgoingShareTargetInfoMap(); + void ClearOutgoingShareSessionMap(); void UnregisterShareTarget(int64_t share_target_id); void OnStartAdvertisingResult(bool used_device_name, Status status); @@ -421,7 +416,7 @@ class NearbySharingServiceImpl // reference could likely be invalidated by the owner during the multistep // cancellation process. void DoCancel( - int64_t share_target_id, + int64_t share_target_id, std::function status_codes_callback, bool is_initiator_of_cancellation); @@ -534,19 +529,19 @@ class NearbySharingServiceImpl // The most recent outgoing TransferMetadata and ShareTarget. std::optional> last_outgoing_metadata_; - // A map of ShareTarget id to IncomingShareTargetInfo. This lets us know which + // A map of ShareTarget id to IncomingShareSession. This lets us know which // Nearby Connections endpoint and public certificate are related to the // incoming share target. - absl::flat_hash_map - incoming_share_target_info_map_; + absl::flat_hash_map + incoming_share_session_map_; // A map of endpoint id to ShareTarget, where each ShareTarget entry - // directly corresponds to a OutgoingShareTargetInfo entry in + // directly corresponds to a OutgoingShareSession entry in // outgoing_share_target_info_map_; absl::flat_hash_map outgoing_share_target_map_; - // A map of ShareTarget id to OutgoingShareTargetInfo. This lets us know which + // A map of ShareTarget id to OutgoingShareSession. This lets us know which // endpoint and public certificate are related to the outgoing share target. - absl::flat_hash_map - outgoing_share_target_info_map_; + absl::flat_hash_map + outgoing_share_session_map_; // For metrics. The IDs of ShareTargets that are cancelled while trying to // establish an outgoing connection. absl::flat_hash_set all_cancelled_share_target_ids_; diff --git a/sharing/nearby_sharing_service_impl_test.cc b/sharing/nearby_sharing_service_impl_test.cc index 1806eb7f..f5ffe693 100644 --- a/sharing/nearby_sharing_service_impl_test.cc +++ b/sharing/nearby_sharing_service_impl_test.cc @@ -1036,8 +1036,7 @@ class NearbySharingServiceImplTest : public testing::Test { }; PayloadInfo AcceptAndSendPayload( - MockTransferUpdateCallback& transfer_callback, - int64_t share_target_id) { + MockTransferUpdateCallback& transfer_callback, int64_t share_target_id) { PayloadInfo info = {}; fake_nearby_connections_manager_->set_send_payload_callback( [&](std::unique_ptr payload, @@ -1194,8 +1193,7 @@ class NearbySharingServiceImplTest : public testing::Test { ASSERT_TRUE(container.HasAttachments()); EXPECT_EQ(1u, container.GetFileAttachments().size()); - for (const FileAttachment& file : - container.GetFileAttachments()) { + for (const FileAttachment& file : container.GetFileAttachments()) { EXPECT_TRUE(file.file_path()); file_path = *file.file_path(); } @@ -1377,13 +1375,9 @@ class TestObserver : public NearbySharingService::Observer { bluetooth_state_ = state; } - void OnWifiStatusChanged(AdapterState state) override { - wifi_state_ = state; - } + void OnWifiStatusChanged(AdapterState state) override { wifi_state_ = state; } - void OnLanStatusChanged(AdapterState state) override { - lan_state_ = state; - } + void OnLanStatusChanged(AdapterState state) override { lan_state_ = state; } void OnShutdown() override { shutdown_called_ = true; @@ -2435,8 +2429,7 @@ TEST_F(NearbySharingServiceImplTest, UnregisterReceiveSurfaceNeverRegistered) { EXPECT_FALSE(fake_nearby_connections_manager_->IsAdvertising()); } -TEST_F(NearbySharingServiceImplTest, - IncomingConnectionClosedAfterShutdown) { +TEST_F(NearbySharingServiceImplTest, IncomingConnectionClosedAfterShutdown) { fake_nearby_connections_manager_->SetRawAuthenticationToken(kEndpointId, GetToken()); SetUpAdvertisementDecoder(GetValidV1EndpointInfo(), @@ -2474,21 +2467,19 @@ TEST_F(NearbySharingServiceImplTest, SetVisibility(DeviceVisibility::DEVICE_VISIBILITY_ALL_CONTACTS); NiceMock callback; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_TRUE(metadata.is_final_status()); - EXPECT_EQ(TransferMetadata::Status::kAwaitingRemoteAcceptanceFailed, - metadata.status()); - })); + .WillOnce(testing::Invoke([](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_TRUE(metadata.is_final_status()); + EXPECT_EQ(TransferMetadata::Status::kAwaitingRemoteAcceptanceFailed, + metadata.status()); + })); SetUpForegroundReceiveSurface(callback); EXPECT_CALL(*mock_app_info_, SetActiveFlag()); service_->OnIncomingConnection(kEndpointId, GetValidV1EndpointInfo(), &connection_); - sharing_service_task_runner_->PostTask([this]() { - connection_.Close(); - }); + sharing_service_task_runner_->PostTask([this]() { connection_.Close(); }); sharing_service_task_runner_->SyncWithTimeout(kTaskWaitTimeout); // To avoid UAF in OnIncomingTransferUpdate(). @@ -2534,21 +2525,21 @@ TEST_F(NearbySharingServiceImplTest, IncomingConnectionEmptyIntroductionFrame) { SetConnectionType(ConnectionType::kWifi); NiceMock callback; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_TRUE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), - TransferMetadata::Status::kUnsupportedAttachmentType); - EXPECT_TRUE(share_target.is_incoming); - EXPECT_TRUE(share_target.is_known); - EXPECT_FALSE(container.HasAttachments()); - EXPECT_EQ(share_target.device_name, kDeviceName); - EXPECT_EQ(share_target.type, kDeviceType); - EXPECT_TRUE(share_target.device_id); - EXPECT_NE(share_target.device_id, kEndpointId); - EXPECT_EQ(share_target.full_name, kTestMetadataFullName); - })); + .WillOnce(testing::Invoke([](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_TRUE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), + TransferMetadata::Status::kUnsupportedAttachmentType); + EXPECT_TRUE(share_target.is_incoming); + EXPECT_TRUE(share_target.is_known); + EXPECT_FALSE(container.HasAttachments()); + EXPECT_EQ(share_target.device_name, kDeviceName); + EXPECT_EQ(share_target.type, kDeviceType); + EXPECT_TRUE(share_target.device_id); + EXPECT_NE(share_target.device_id, kEndpointId); + EXPECT_EQ(share_target.full_name, kTestMetadataFullName); + })); SetUpKeyVerification(/*is_incoming=*/true, service::proto::PairedKeyResultFrame::SUCCESS); @@ -2582,23 +2573,23 @@ TEST_F(NearbySharingServiceImplTest, NiceMock callback; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_FALSE(metadata.is_final_status()); - EXPECT_EQ(TransferMetadata::Status::kAwaitingLocalConfirmation, - metadata.status()); - EXPECT_TRUE(share_target.is_incoming); - EXPECT_FALSE(share_target.is_known); - EXPECT_TRUE(container.HasAttachments()); - EXPECT_EQ(container.GetTextAttachments().size(), 3u); - EXPECT_EQ(container.GetFileAttachments().size(), 1u); - EXPECT_EQ(share_target.device_name, kDeviceName); - EXPECT_FALSE(share_target.image_url); - EXPECT_EQ(share_target.type, kDeviceType); - EXPECT_EQ(share_target.device_id, kEndpointId); - EXPECT_FALSE(share_target.full_name); - })); + .WillOnce(testing::Invoke([](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_FALSE(metadata.is_final_status()); + EXPECT_EQ(TransferMetadata::Status::kAwaitingLocalConfirmation, + metadata.status()); + EXPECT_TRUE(share_target.is_incoming); + EXPECT_FALSE(share_target.is_known); + EXPECT_TRUE(container.HasAttachments()); + EXPECT_EQ(container.GetTextAttachments().size(), 3u); + EXPECT_EQ(container.GetFileAttachments().size(), 1u); + EXPECT_EQ(share_target.device_name, kDeviceName); + EXPECT_FALSE(share_target.image_url); + EXPECT_EQ(share_target.type, kDeviceType); + EXPECT_EQ(share_target.device_id, kEndpointId); + EXPECT_FALSE(share_target.full_name); + })); SetUpKeyVerification(/*is_incoming=*/true, service::proto::PairedKeyResultFrame::SUCCESS); @@ -2640,17 +2631,15 @@ TEST_F(NearbySharingServiceImplTest, SetUpIncomingConnection(callback); EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_TRUE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), - TransferMetadata::Status::kUnexpectedDisconnection); - })); + .WillOnce(testing::Invoke([](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_TRUE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), + TransferMetadata::Status::kUnexpectedDisconnection); + })); - sharing_service_task_runner_->PostTask([this]() { - connection_.Close(); - }); + sharing_service_task_runner_->PostTask([this]() { connection_.Close(); }); sharing_service_task_runner_->SyncWithTimeout(kTaskWaitTimeout); // To avoid UAF in OnIncomingTransferUpdate(). @@ -2827,27 +2816,27 @@ TEST_F(NearbySharingServiceImplTest, NiceMock callback; absl::Notification notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke([¬ification]( - const ShareTarget& share_target, - const AttachmentContainer& container, - TransferMetadata metadata) { - EXPECT_FALSE(metadata.is_final_status()); - EXPECT_EQ(TransferMetadata::Status::kAwaitingLocalConfirmation, - metadata.status()); - EXPECT_TRUE(share_target.is_incoming); - EXPECT_TRUE(share_target.is_known); - EXPECT_TRUE(container.HasAttachments()); - EXPECT_EQ(container.GetTextAttachments().size(), 3u); - EXPECT_EQ(container.GetFileAttachments().size(), 1u); - EXPECT_EQ(share_target.device_name, kDeviceName); - EXPECT_EQ(share_target.type, kDeviceType); - EXPECT_TRUE(share_target.device_id); - EXPECT_NE(share_target.device_id, kEndpointId); - EXPECT_EQ(share_target.full_name, kTestMetadataFullName); + .WillOnce( + testing::Invoke([¬ification](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_FALSE(metadata.is_final_status()); + EXPECT_EQ(TransferMetadata::Status::kAwaitingLocalConfirmation, + metadata.status()); + EXPECT_TRUE(share_target.is_incoming); + EXPECT_TRUE(share_target.is_known); + EXPECT_TRUE(container.HasAttachments()); + EXPECT_EQ(container.GetTextAttachments().size(), 3u); + EXPECT_EQ(container.GetFileAttachments().size(), 1u); + EXPECT_EQ(share_target.device_name, kDeviceName); + EXPECT_EQ(share_target.type, kDeviceType); + EXPECT_TRUE(share_target.device_id); + EXPECT_NE(share_target.device_id, kEndpointId); + EXPECT_EQ(share_target.full_name, kTestMetadataFullName); - EXPECT_FALSE(metadata.token().has_value()); - notification.Notify(); - })); + EXPECT_FALSE(metadata.token().has_value()); + notification.Notify(); + })); SetUpKeyVerification(/*is_incoming=*/true, PairedKeyResultFrame::SUCCESS); SetUpForegroundReceiveSurface(callback); @@ -2924,13 +2913,13 @@ TEST_F(NearbySharingServiceImplTest, absl::Notification notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_FALSE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), - TransferMetadata::Status::kAwaitingRemoteAcceptance); - })); + .WillOnce(testing::Invoke([](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_FALSE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), + TransferMetadata::Status::kAwaitingRemoteAcceptance); + })); service_->Accept( share_target_id, [&](NearbySharingServiceImpl::StatusCodes status_code) { @@ -2981,18 +2970,18 @@ TEST_F(NearbySharingServiceImplTest, absl::Notification success_notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [&](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_TRUE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), - TransferMetadata::Status::kIncompletePayloads); - ASSERT_TRUE(container.HasAttachments()); - EXPECT_EQ(container.GetFileAttachments().size(), 1u); - const FileAttachment& file = container.GetFileAttachments()[0]; - EXPECT_FALSE(file.file_path()); - success_notification.Notify(); - })); + .WillOnce(testing::Invoke([&](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_TRUE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), + TransferMetadata::Status::kIncompletePayloads); + ASSERT_TRUE(container.HasAttachments()); + EXPECT_EQ(container.GetFileAttachments().size(), 1u); + const FileAttachment& file = container.GetFileAttachments()[0]; + EXPECT_FALSE(file.file_path()); + success_notification.Notify(); + })); sharing_service_task_runner_->PostTask([this]() { std::weak_ptr listener = @@ -3030,13 +3019,13 @@ TEST_F(NearbySharingServiceImplTest, AcceptValidShareTargetPayloadFailed) { absl::Notification notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_FALSE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), - TransferMetadata::Status::kAwaitingRemoteAcceptance); - })); + .WillOnce(testing::Invoke([](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_FALSE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), + TransferMetadata::Status::kAwaitingRemoteAcceptance); + })); service_->Accept( share_target_id, [&](NearbySharingServiceImpl::StatusCodes status_code) { @@ -3048,17 +3037,17 @@ TEST_F(NearbySharingServiceImplTest, AcceptValidShareTargetPayloadFailed) { absl::Notification failure_notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [&](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_TRUE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), TransferMetadata::Status::kFailed); - ASSERT_TRUE(container.HasAttachments()); - EXPECT_EQ(container.GetFileAttachments().size(), 1u); - const FileAttachment& file = container.GetFileAttachments()[0]; - EXPECT_FALSE(file.file_path()); - failure_notification.Notify(); - })); + .WillOnce(testing::Invoke([&](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_TRUE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), TransferMetadata::Status::kFailed); + ASSERT_TRUE(container.HasAttachments()); + EXPECT_EQ(container.GetFileAttachments().size(), 1u); + const FileAttachment& file = container.GetFileAttachments()[0]; + EXPECT_FALSE(file.file_path()); + failure_notification.Notify(); + })); sharing_service_task_runner_->PostTask([this]() { std::weak_ptr listener = @@ -3097,13 +3086,13 @@ TEST_F(NearbySharingServiceImplTest, AcceptValidShareTargetPayloadCancelled) { absl::Notification notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_FALSE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), - TransferMetadata::Status::kAwaitingRemoteAcceptance); - })); + .WillOnce(testing::Invoke([](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_FALSE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), + TransferMetadata::Status::kAwaitingRemoteAcceptance); + })); service_->Accept( share_target_id, [&](NearbySharingServiceImpl::StatusCodes status_code) { @@ -3115,17 +3104,17 @@ TEST_F(NearbySharingServiceImplTest, AcceptValidShareTargetPayloadCancelled) { absl::Notification failure_notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [&](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_TRUE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), TransferMetadata::Status::kCancelled); - ASSERT_TRUE(container.HasAttachments()); - EXPECT_EQ(container.GetFileAttachments().size(), 1u); - const FileAttachment& file = container.GetFileAttachments()[0]; - EXPECT_FALSE(file.file_path()); - failure_notification.Notify(); - })); + .WillOnce(testing::Invoke([&](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_TRUE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), TransferMetadata::Status::kCancelled); + ASSERT_TRUE(container.HasAttachments()); + EXPECT_EQ(container.GetFileAttachments().size(), 1u); + const FileAttachment& file = container.GetFileAttachments()[0]; + EXPECT_FALSE(file.file_path()); + failure_notification.Notify(); + })); sharing_service_task_runner_->PostTask([this]() { std::weak_ptr listener = @@ -3175,12 +3164,12 @@ TEST_F(NearbySharingServiceImplTest, RejectValidShareTarget) { absl::Notification notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_TRUE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), TransferMetadata::Status::kRejected); - })); + .WillOnce(testing::Invoke([](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_TRUE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), TransferMetadata::Status::kRejected); + })); service_->Reject( share_target_id, [&](NearbySharingServiceImpl::StatusCodes status_code) { @@ -3216,25 +3205,25 @@ TEST_F(NearbySharingServiceImplTest, NiceMock callback; absl::Notification notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [&](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_FALSE(metadata.is_final_status()); - EXPECT_EQ(metadata.status(), - TransferMetadata::Status::kAwaitingLocalConfirmation); - EXPECT_TRUE(share_target.is_incoming); - EXPECT_TRUE(share_target.is_known); - EXPECT_TRUE(container.HasAttachments()); - EXPECT_EQ(container.GetTextAttachments().size(), 3u); - EXPECT_EQ(container.GetFileAttachments().size(), 1u); - EXPECT_EQ(share_target.device_name, kDeviceName); - EXPECT_EQ(share_target.type, kDeviceType); - EXPECT_TRUE(share_target.device_id); - EXPECT_NE(share_target.device_id, kEndpointId); - EXPECT_EQ(share_target.full_name, kTestMetadataFullName); - EXPECT_EQ(metadata.token(), kFourDigitToken); - notification.Notify(); - })); + .WillOnce(testing::Invoke([&](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_FALSE(metadata.is_final_status()); + EXPECT_EQ(metadata.status(), + TransferMetadata::Status::kAwaitingLocalConfirmation); + EXPECT_TRUE(share_target.is_incoming); + EXPECT_TRUE(share_target.is_known); + EXPECT_TRUE(container.HasAttachments()); + EXPECT_EQ(container.GetTextAttachments().size(), 3u); + EXPECT_EQ(container.GetFileAttachments().size(), 1u); + EXPECT_EQ(share_target.device_name, kDeviceName); + EXPECT_EQ(share_target.type, kDeviceType); + EXPECT_TRUE(share_target.device_id); + EXPECT_NE(share_target.device_id, kEndpointId); + EXPECT_EQ(share_target.full_name, kTestMetadataFullName); + EXPECT_EQ(metadata.token(), kFourDigitToken); + notification.Notify(); + })); SetUpKeyVerification(/*is_incoming=*/true, PairedKeyResultFrame::UNABLE); SetUpForegroundReceiveSurface(callback); @@ -3269,26 +3258,26 @@ TEST_F(NearbySharingServiceImplTest, NiceMock callback; absl::Notification notification; EXPECT_CALL(callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [&](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_FALSE(metadata.is_final_status()); - EXPECT_EQ(TransferMetadata::Status::kAwaitingLocalConfirmation, - metadata.status()); - EXPECT_TRUE(share_target.is_incoming); - EXPECT_TRUE(share_target.is_known); - EXPECT_TRUE(container.HasAttachments()); - EXPECT_EQ(container.GetTextAttachments().size(), 3u); - EXPECT_EQ(container.GetFileAttachments().size(), 1u); - EXPECT_EQ(share_target.device_name, kDeviceName); - EXPECT_EQ(share_target.type, kDeviceType); - EXPECT_TRUE(share_target.device_id); - EXPECT_NE(share_target.device_id, kEndpointId); - EXPECT_EQ(share_target.full_name, kTestMetadataFullName); + .WillOnce(testing::Invoke([&](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_FALSE(metadata.is_final_status()); + EXPECT_EQ(TransferMetadata::Status::kAwaitingLocalConfirmation, + metadata.status()); + EXPECT_TRUE(share_target.is_incoming); + EXPECT_TRUE(share_target.is_known); + EXPECT_TRUE(container.HasAttachments()); + EXPECT_EQ(container.GetTextAttachments().size(), 3u); + EXPECT_EQ(container.GetFileAttachments().size(), 1u); + EXPECT_EQ(share_target.device_name, kDeviceName); + EXPECT_EQ(share_target.type, kDeviceType); + EXPECT_TRUE(share_target.device_id); + EXPECT_NE(share_target.device_id, kEndpointId); + EXPECT_EQ(share_target.full_name, kTestMetadataFullName); - EXPECT_EQ(kFourDigitToken, metadata.token()); - notification.Notify(); - })); + EXPECT_EQ(kFourDigitToken, metadata.token()); + notification.Notify(); + })); SetUpKeyVerification(/*is_incoming=*/true, PairedKeyResultFrame::UNABLE); @@ -3756,9 +3745,7 @@ TEST_F(NearbySharingServiceImplTest, SendTextSuccessClosedConnection) { fake_nearby_connections_manager_->connection_endpoint_info(kEndpointId)); // Call disconnect on the connection early before the timeout has passed. - sharing_service_task_runner_->PostTask([this]() { - connection_.Close(); - }); + sharing_service_task_runner_->PostTask([this]() { connection_.Close(); }); // Expect that we haven't called disconnect again as the endpoint is already // disconnected. @@ -3856,7 +3843,7 @@ TEST_F(NearbySharingServiceImplTest, SendWifiCredentialsSuccess) { EXPECT_CALL(*mock_app_info_, SetActiveFlag()); EXPECT_EQ(SendAttachments(target_id, CreateWifiCredentialAttachments( - "GoogleGuest", "password")), + "GoogleGuest", "password")), NearbySharingServiceImpl::StatusCodes::kOk); EXPECT_TRUE( introduction_notification.WaitForNotificationWithTimeout(kWaitTimeout)); @@ -3926,12 +3913,12 @@ TEST_F(NearbySharingServiceImplTest, CancelSenderInitiator) { absl::Notification notification; EXPECT_CALL(transfer_callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [&](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_EQ(share_target.id, target_id); - EXPECT_EQ(metadata.status(), TransferMetadata::Status::kCancelled); - })); + .WillOnce(testing::Invoke([&](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_EQ(share_target.id, target_id); + EXPECT_EQ(metadata.status(), TransferMetadata::Status::kCancelled); + })); EXPECT_FALSE( fake_nearby_connections_manager_->WasPayloadCanceled(info.payload_id)); // The initiator of the cancellation explicitly calls Cancel(). @@ -3969,13 +3956,13 @@ TEST_F(NearbySharingServiceImplTest, CancelSenderNoninitiator) { absl::Notification notification; EXPECT_CALL(transfer_callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [&](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_EQ(share_target.id, target_id); - EXPECT_EQ(metadata.status(), TransferMetadata::Status::kCancelled); - notification.Notify(); - })); + .WillOnce(testing::Invoke([&](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_EQ(share_target.id, target_id); + EXPECT_EQ(metadata.status(), TransferMetadata::Status::kCancelled); + notification.Notify(); + })); EXPECT_FALSE( fake_nearby_connections_manager_->WasPayloadCanceled(info.payload_id)); // The non-initiator of the cancellation processes a cancellation frame from @@ -4038,13 +4025,13 @@ TEST_F(NearbySharingServiceImplTest, CancelReceiverNoninitiator) { absl::Notification notification; EXPECT_CALL(transfer_callback, OnTransferUpdate(testing::_, testing::_, testing::_)) - .WillOnce(testing::Invoke( - [&](const ShareTarget& share_target, - const AttachmentContainer& container, TransferMetadata metadata) { - EXPECT_EQ(target_id, share_target.id); - EXPECT_EQ(TransferMetadata::Status::kCancelled, metadata.status()); - notification.Notify(); - })); + .WillOnce(testing::Invoke([&](const ShareTarget& share_target, + const AttachmentContainer& container, + TransferMetadata metadata) { + EXPECT_EQ(target_id, share_target.id); + EXPECT_EQ(TransferMetadata::Status::kCancelled, metadata.status()); + notification.Notify(); + })); EXPECT_FALSE( fake_nearby_connections_manager_->WasPayloadCanceled(kFilePayloadId)); // The non-initiator of the cancellation processes a cancellation frame from @@ -5105,10 +5092,10 @@ TEST_F(NearbySharingServiceImplTest, RemoveIncomingPayloads) { UnorderedElementsAre("test1.txt", "test2.txt")); ShareTarget share_target; share_target.is_incoming = true; - IncomingShareTargetInfo share_target_info( + IncomingShareSession session( "endpoint_id", share_target, - [](const IncomingShareTargetInfo&, const TransferMetadata&) {}); - service_->RemoveIncomingPayloads(share_target_info); + [](const IncomingShareSession&, const TransferMetadata&) {}); + service_->RemoveIncomingPayloads(session); EXPECT_EQ( fake_nearby_connections_manager_->GetUnknownFilePathsToDeleteForTesting() .size(), diff --git a/sharing/outgoing_share_session.cc b/sharing/outgoing_share_session.cc index 02124526..ba74cae0 100644 --- a/sharing/outgoing_share_session.cc +++ b/sharing/outgoing_share_session.cc @@ -47,27 +47,27 @@ using ::nearby::sharing::service::proto::IntroductionFrame; using ::nearby::sharing::service::proto::ProgressUpdateFrame; using ::nearby::sharing::service::proto::V1Frame; -OutgoingShareTargetInfo::OutgoingShareTargetInfo( +OutgoingShareSession::OutgoingShareSession( std::string endpoint_id, const ShareTarget& share_target, - std::function + std::function transfer_update_callback) - : ShareTargetInfo(std::move(endpoint_id), share_target), + : ShareSession(std::move(endpoint_id), share_target), transfer_update_callback_(std::move(transfer_update_callback)) {} -OutgoingShareTargetInfo::OutgoingShareTargetInfo(OutgoingShareTargetInfo&&) = +OutgoingShareSession::OutgoingShareSession(OutgoingShareSession&&) = default; -OutgoingShareTargetInfo& OutgoingShareTargetInfo::operator=( - OutgoingShareTargetInfo&&) = default; +OutgoingShareSession& OutgoingShareSession::operator=( + OutgoingShareSession&&) = default; -OutgoingShareTargetInfo::~OutgoingShareTargetInfo() = default; +OutgoingShareSession::~OutgoingShareSession() = default; -void OutgoingShareTargetInfo::InvokeTransferUpdateCallback( +void OutgoingShareSession::InvokeTransferUpdateCallback( const TransferMetadata& metadata) { transfer_update_callback_(*this, metadata); } -bool OutgoingShareTargetInfo::OnNewConnection(NearbyConnection* connection) { +bool OutgoingShareSession::OnNewConnection(NearbyConnection* connection) { if (!connection) { NL_LOG(WARNING) << __func__ << ": Failed to initiate connection to share target " @@ -85,7 +85,7 @@ bool OutgoingShareTargetInfo::OnNewConnection(NearbyConnection* connection) { return true; } -std::vector OutgoingShareTargetInfo::GetFilePaths() +std::vector OutgoingShareSession::GetFilePaths() const { std::vector file_paths; file_paths.reserve(attachment_container().GetFileAttachments().size()); @@ -98,7 +98,7 @@ std::vector OutgoingShareTargetInfo::GetFilePaths() return file_paths; } -void OutgoingShareTargetInfo::CreateTextPayloads() { +void OutgoingShareSession::CreateTextPayloads() { const std::vector attachments = attachment_container().GetTextAttachments(); if (attachments.empty()) { @@ -114,7 +114,7 @@ void OutgoingShareTargetInfo::CreateTextPayloads() { } } -void OutgoingShareTargetInfo::CreateWifiCredentialsPayloads() { +void OutgoingShareSession::CreateWifiCredentialsPayloads() { const std::vector attachments = attachment_container().GetWifiCredentialsAttachments(); if (attachments.empty()) { @@ -136,7 +136,7 @@ void OutgoingShareTargetInfo::CreateWifiCredentialsPayloads() { } } -bool OutgoingShareTargetInfo::CreateFilePayloads( +bool OutgoingShareSession::CreateFilePayloads( const std::vector& files) { AttachmentContainer& container = mutable_attachment_container(); if (files.size() != container.GetFileAttachments().size()) { @@ -162,7 +162,7 @@ bool OutgoingShareTargetInfo::CreateFilePayloads( return true; } -bool OutgoingShareTargetInfo::FillIntroductionFrame( +bool OutgoingShareSession::FillIntroductionFrame( IntroductionFrame* introduction) const { const AttachmentContainer& container = attachment_container(); if (!container.HasAttachments()) { @@ -218,7 +218,7 @@ bool OutgoingShareTargetInfo::FillIntroductionFrame( return true; } -void OutgoingShareTargetInfo::SendAllPayloads( +void OutgoingShareSession::SendAllPayloads( Context* context, NearbyConnectionsManager& connection_manager, std::function update_callback) { set_payload_tracker(std::make_unique( @@ -234,7 +234,7 @@ void OutgoingShareTargetInfo::SendAllPayloads( } } -void OutgoingShareTargetInfo::InitSendPayload( +void OutgoingShareSession::InitSendPayload( Context* context, NearbyConnectionsManager& connection_manager, std::function update_callback) { set_payload_tracker(std::make_unique( @@ -242,7 +242,7 @@ void OutgoingShareTargetInfo::InitSendPayload( attachment_payload_map(), std::move(update_callback))); } -void OutgoingShareTargetInfo::SendNextPayload( +void OutgoingShareSession::SendNextPayload( NearbyConnectionsManager& connection_manager) { std::optional payload = ExtractNextPayload(); if (payload.has_value()) { @@ -254,7 +254,7 @@ void OutgoingShareTargetInfo::SendNextPayload( } } -void OutgoingShareTargetInfo::WriteProgressUpdateFrame( +void OutgoingShareSession::WriteProgressUpdateFrame( std::optional start_transfer, std::optional progress) { NL_LOG(INFO) << __func__ << ": Writing progress update frame. start_transfer=" << (start_transfer.has_value() ? *start_transfer : false) @@ -274,7 +274,7 @@ void OutgoingShareTargetInfo::WriteProgressUpdateFrame( WriteFrame(frame); } -bool OutgoingShareTargetInfo::WriteIntroductionFrame() { +bool OutgoingShareSession::WriteIntroductionFrame() { Frame frame; frame.set_version(Frame::V1); V1Frame* v1_frame = frame.mutable_v1(); @@ -289,15 +289,15 @@ bool OutgoingShareTargetInfo::WriteIntroductionFrame() { return true; } -std::vector OutgoingShareTargetInfo::ExtractTextPayloads() { +std::vector OutgoingShareSession::ExtractTextPayloads() { return std::move(text_payloads_); } -std::vector OutgoingShareTargetInfo::ExtractFilePayloads() { +std::vector OutgoingShareSession::ExtractFilePayloads() { return std::move(file_payloads_); } -std::optional OutgoingShareTargetInfo::ExtractNextPayload() { +std::optional OutgoingShareSession::ExtractNextPayload() { if (!text_payloads_.empty()) { Payload payload = text_payloads_.back(); text_payloads_.pop_back(); diff --git a/sharing/outgoing_share_session.h b/sharing/outgoing_share_session.h index a7a67c88..dcc03097 100644 --- a/sharing/outgoing_share_session.h +++ b/sharing/outgoing_share_session.h @@ -34,17 +34,17 @@ namespace nearby::sharing { -// A description of the outgoing connection to a remote device. -class OutgoingShareTargetInfo : public ShareTargetInfo { +// Class that represents a single outgoing share session. +// This class is thread-compatible. +class OutgoingShareSession : public ShareSession { public: - OutgoingShareTargetInfo(std::string endpoint_id, - const ShareTarget& share_target, - std::function - transfer_update_callback); - OutgoingShareTargetInfo(OutgoingShareTargetInfo&&); - OutgoingShareTargetInfo& operator=(OutgoingShareTargetInfo&&); - ~OutgoingShareTargetInfo() override; + OutgoingShareSession( + std::string endpoint_id, const ShareTarget& share_target, + std::function + transfer_update_callback); + OutgoingShareSession(OutgoingShareSession&&); + OutgoingShareSession& operator=(OutgoingShareSession&&); + ~OutgoingShareSession() override; bool IsIncoming() const override { return false; } @@ -90,8 +90,8 @@ class OutgoingShareTargetInfo : public ShareTargetInfo { // Create a payload status listener to send status change to // |update_callback|. void InitSendPayload( - Context* context, NearbyConnectionsManager& connection_manager, - std::function update_callback); + Context* context, NearbyConnectionsManager& connection_manager, + std::function update_callback); // Send the next payload to NearbyConnectionManager. void SendNextPayload(NearbyConnectionsManager& connection_manager); @@ -104,7 +104,6 @@ class OutgoingShareTargetInfo : public ShareTargetInfo { void InvokeTransferUpdateCallback(const TransferMetadata& metadata) override; bool OnNewConnection(NearbyConnection* connection) override; - private: std::vector ExtractTextPayloads(); std::vector ExtractFilePayloads(); @@ -119,7 +118,7 @@ class OutgoingShareTargetInfo : public ShareTargetInfo { std::vector file_payloads_; std::vector wifi_credentials_payloads_; Status connection_layer_status_; - std::function + std::function transfer_update_callback_; }; diff --git a/sharing/outgoing_share_session_test.cc b/sharing/outgoing_share_session_test.cc index 23e81e6f..b4d39cd2 100644 --- a/sharing/outgoing_share_session_test.cc +++ b/sharing/outgoing_share_session_test.cc @@ -47,6 +47,7 @@ using ::nearby::sharing::service::proto::IntroductionFrame; using ::nearby::sharing::service::proto::ProgressUpdateFrame; using ::nearby::sharing::service::proto::V1Frame; using ::nearby::sharing::service::proto::WifiCredentials; +using ::testing::_; using ::testing::Eq; using ::testing::Invoke; using ::testing::IsEmpty; @@ -54,15 +55,14 @@ using ::testing::IsFalse; using ::testing::IsTrue; using ::testing::MockFunction; using ::testing::SizeIs; -using ::testing::_; constexpr absl::string_view kEndpointId = "ABCD"; -class OutgoingShareTargetInfoTest : public ::testing::Test { +class OutgoingShareSessionTest : public ::testing::Test { public: - OutgoingShareTargetInfoTest() - : info_(std::string(kEndpointId), share_target_, - [](OutgoingShareTargetInfo&, const TransferMetadata&) {}), + OutgoingShareSessionTest() + : session_(std::string(kEndpointId), share_target_, + [](OutgoingShareSession&, const TransferMetadata&) {}), text1_(nearby::sharing::service::proto::TextMetadata::URL, "A bit of text body", "Some text title", "text/html"), text2_(nearby::sharing::service::proto::TextMetadata::ADDRESS, @@ -77,12 +77,12 @@ class OutgoingShareTargetInfoTest : public ::testing::Test { std::vector{text1_, text2_}, std::vector{file1_}, std::vector{wifi1_}); - info_.SetAttachmentContainer(std::move(container)); + session_.SetAttachmentContainer(std::move(container)); } protected: ShareTarget share_target_; - OutgoingShareTargetInfo info_; + OutgoingShareSession session_; TextAttachment text1_; TextAttachment text2_; FileAttachment file1_; @@ -90,36 +90,36 @@ class OutgoingShareTargetInfoTest : public ::testing::Test { WifiCredentialsAttachment wifi1_; }; -TEST_F(OutgoingShareTargetInfoTest, GetFilePaths) { - OutgoingShareTargetInfo info( +TEST_F(OutgoingShareSessionTest, GetFilePaths) { + OutgoingShareSession session( std::string(kEndpointId), share_target_, - [](OutgoingShareTargetInfo&, const TransferMetadata&) {}); + [](OutgoingShareSession&, const TransferMetadata&) {}); AttachmentContainer container(std::vector{}, std::vector{file1_, file2_}, std::vector{}); - info.SetAttachmentContainer(std::move(container)); + session.SetAttachmentContainer(std::move(container)); - auto file_paths = info.GetFilePaths(); + auto file_paths = session.GetFilePaths(); ASSERT_THAT(file_paths, SizeIs(2)); EXPECT_THAT(file_paths[0], Eq(file1_.file_path())); EXPECT_THAT(file_paths[1], Eq(file2_.file_path())); } -TEST_F(OutgoingShareTargetInfoTest, CreateTextPayloadsWithNoTextAttachments) { - OutgoingShareTargetInfo info( +TEST_F(OutgoingShareSessionTest, CreateTextPayloadsWithNoTextAttachments) { + OutgoingShareSession session( std::string(kEndpointId), share_target_, - [](OutgoingShareTargetInfo&, const TransferMetadata&) {}); - info.CreateTextPayloads(); - const std::vector& payloads = info.text_payloads(); + [](OutgoingShareSession&, const TransferMetadata&) {}); + session.CreateTextPayloads(); + const std::vector& payloads = session.text_payloads(); EXPECT_THAT(payloads, IsEmpty()); } -TEST_F(OutgoingShareTargetInfoTest, CreateTextPayloads) { - info_.CreateTextPayloads(); - const std::vector& payloads = info_.text_payloads(); - auto& attachment_payload_map = info_.attachment_payload_map(); +TEST_F(OutgoingShareSessionTest, CreateTextPayloads) { + session_.CreateTextPayloads(); + const std::vector& payloads = session_.text_payloads(); + auto& attachment_payload_map = session_.attachment_payload_map(); ASSERT_THAT(payloads, SizeIs(2)); EXPECT_THAT(payloads[0].content.type, Eq(PayloadContent::Type::kBytes)); @@ -138,37 +138,37 @@ TEST_F(OutgoingShareTargetInfoTest, CreateTextPayloads) { EXPECT_THAT(attachment_payload_map.at(text2_.id()), Eq(payloads[1].id)); } -TEST_F(OutgoingShareTargetInfoTest, CreateFilePayloadsWithNoFileAttachments) { - OutgoingShareTargetInfo info( +TEST_F(OutgoingShareSessionTest, CreateFilePayloadsWithNoFileAttachments) { + OutgoingShareSession session( std::string(kEndpointId), share_target_, - [](OutgoingShareTargetInfo&, const TransferMetadata&) {}); + [](OutgoingShareSession&, const TransferMetadata&) {}); EXPECT_THAT( - info.CreateFilePayloads(std::vector()), + session.CreateFilePayloads(std::vector()), IsTrue()); - const std::vector& payloads = info.file_payloads(); + const std::vector& payloads = session.file_payloads(); EXPECT_THAT(payloads, IsEmpty()); } -TEST_F(OutgoingShareTargetInfoTest, CreateFilePayloadsWithWrongFileInfo) { +TEST_F(OutgoingShareSessionTest, CreateFilePayloadsWithWrongFileInfo) { EXPECT_THAT( - info_.CreateFilePayloads(std::vector()), + session_.CreateFilePayloads(std::vector()), IsFalse()); - const std::vector& payloads = info_.file_payloads(); + const std::vector& payloads = session_.file_payloads(); EXPECT_THAT(payloads, IsEmpty()); } -TEST_F(OutgoingShareTargetInfoTest, CreateFilePayloads) { +TEST_F(OutgoingShareSessionTest, CreateFilePayloads) { std::vector file_infos; file_infos.push_back({ .size = 12355L, .file_path = file1_.file_path().value(), }); - info_.CreateFilePayloads(file_infos); - const std::vector& payloads = info_.file_payloads(); - auto& attachment_payload_map = info_.attachment_payload_map(); + session_.CreateFilePayloads(file_infos); + const std::vector& payloads = session_.file_payloads(); + auto& attachment_payload_map = session_.attachment_payload_map(); ASSERT_THAT(payloads, SizeIs(1)); EXPECT_THAT(payloads[0].content.type, Eq(PayloadContent::Type::kFile)); @@ -182,24 +182,24 @@ TEST_F(OutgoingShareTargetInfoTest, CreateFilePayloads) { ASSERT_THAT(attachment_payload_map.contains(file1_.id()), IsTrue()); EXPECT_THAT(attachment_payload_map.at(file1_.id()), Eq(payloads[0].id)); - EXPECT_THAT(info_.attachment_container().GetFileAttachments()[0].size(), + EXPECT_THAT(session_.attachment_container().GetFileAttachments()[0].size(), Eq(12355L)); } -TEST_F(OutgoingShareTargetInfoTest, CreateWifiPayloadsWithNoWifiAttachments) { - OutgoingShareTargetInfo info( +TEST_F(OutgoingShareSessionTest, CreateWifiPayloadsWithNoWifiAttachments) { + OutgoingShareSession session( std::string(kEndpointId), share_target_, - [](OutgoingShareTargetInfo&, const TransferMetadata&) {}); - info.CreateWifiCredentialsPayloads(); - const std::vector& payloads = info.file_payloads(); + [](OutgoingShareSession&, const TransferMetadata&) {}); + session.CreateWifiCredentialsPayloads(); + const std::vector& payloads = session.file_payloads(); EXPECT_THAT(payloads, IsEmpty()); } -TEST_F(OutgoingShareTargetInfoTest, CreateWifiCredentialsPayloads) { - info_.CreateWifiCredentialsPayloads(); - const std::vector& payloads = info_.wifi_credentials_payloads(); - auto& attachment_payload_map = info_.attachment_payload_map(); +TEST_F(OutgoingShareSessionTest, CreateWifiCredentialsPayloads) { + session_.CreateWifiCredentialsPayloads(); + const std::vector& payloads = session_.wifi_credentials_payloads(); + auto& attachment_payload_map = session_.attachment_payload_map(); ASSERT_THAT(payloads, SizeIs(1)); EXPECT_THAT(payloads[0].content.type, Eq(PayloadContent::Type::kBytes)); @@ -216,23 +216,23 @@ TEST_F(OutgoingShareTargetInfoTest, CreateWifiCredentialsPayloads) { EXPECT_THAT(attachment_payload_map.at(wifi1_.id()), Eq(payloads[0].id)); } -TEST_F(OutgoingShareTargetInfoTest, WriteIntroductionFrameWithoutPayloads) { - EXPECT_THAT(info_.WriteIntroductionFrame(), IsFalse()); +TEST_F(OutgoingShareSessionTest, WriteIntroductionFrameWithoutPayloads) { + EXPECT_THAT(session_.WriteIntroductionFrame(), IsFalse()); } -TEST_F(OutgoingShareTargetInfoTest, WriteIntroductionFrameSuccess) { +TEST_F(OutgoingShareSessionTest, WriteIntroductionFrameSuccess) { FakeNearbyConnection connection; - info_.OnConnected(absl::Now(), &connection); + session_.OnConnected(absl::Now(), &connection); std::vector file_infos; file_infos.push_back({ .size = 12355L, .file_path = file1_.file_path().value(), }); - info_.CreateFilePayloads(file_infos); - info_.CreateTextPayloads(); - info_.CreateWifiCredentialsPayloads(); + session_.CreateFilePayloads(file_infos); + session_.CreateTextPayloads(); + session_.CreateWifiCredentialsPayloads(); - EXPECT_THAT(info_.WriteIntroductionFrame(), IsTrue()); + EXPECT_THAT(session_.WriteIntroductionFrame(), IsTrue()); std::vector frame_data = connection.GetWrittenData(); Frame frame; @@ -242,7 +242,7 @@ TEST_F(OutgoingShareTargetInfoTest, WriteIntroductionFrameSuccess) { ASSERT_THAT(frame.v1().type(), Eq(V1Frame::INTRODUCTION)); const IntroductionFrame& intro_frame = frame.v1().introduction(); EXPECT_THAT(intro_frame.start_transfer(), IsTrue()); - const std::vector& text_payloads = info_.text_payloads(); + const std::vector& text_payloads = session_.text_payloads(); ASSERT_THAT(intro_frame.text_metadata_size(), Eq(2)); EXPECT_THAT(intro_frame.text_metadata(0).id(), Eq(text1_.id())); EXPECT_THAT(intro_frame.text_metadata(0).text_title(), @@ -260,7 +260,7 @@ TEST_F(OutgoingShareTargetInfoTest, WriteIntroductionFrameSuccess) { EXPECT_THAT(intro_frame.text_metadata(1).payload_id(), Eq(text_payloads[1].id)); - const std::vector& file_payloads = info_.file_payloads(); + const std::vector& file_payloads = session_.file_payloads(); ASSERT_THAT(intro_frame.file_metadata_size(), Eq(1)); EXPECT_THAT(intro_frame.file_metadata(0).id(), Eq(file1_.id())); // File attachment size has been updated by CreateFilePayloads(). @@ -271,7 +271,8 @@ TEST_F(OutgoingShareTargetInfoTest, WriteIntroductionFrameSuccess) { EXPECT_THAT(intro_frame.file_metadata(0).type(), Eq(file1_.type())); EXPECT_THAT(intro_frame.file_metadata(0).mime_type(), Eq(file1_.mime_type())); - const std::vector& wifi_payloads = info_.wifi_credentials_payloads(); + const std::vector& wifi_payloads = + session_.wifi_credentials_payloads(); ASSERT_THAT(intro_frame.wifi_credentials_metadata_size(), Eq(1)); EXPECT_THAT(intro_frame.wifi_credentials_metadata(0).id(), Eq(wifi1_.id())); EXPECT_THAT(intro_frame.wifi_credentials_metadata(0).ssid(), @@ -282,15 +283,15 @@ TEST_F(OutgoingShareTargetInfoTest, WriteIntroductionFrameSuccess) { Eq(wifi_payloads[0].id)); } -TEST_F(OutgoingShareTargetInfoTest, SendAllPayloads) { +TEST_F(OutgoingShareSessionTest, SendAllPayloads) { std::vector file_infos; file_infos.push_back({ .size = 12355L, .file_path = file1_.file_path().value(), }); - info_.CreateFilePayloads(file_infos); - info_.CreateTextPayloads(); - info_.CreateWifiCredentialsPayloads(); + session_.CreateFilePayloads(file_infos); + session_.CreateTextPayloads(); + session_.CreateWifiCredentialsPayloads(); MockFunction transfer_metadata_callback; MockFunction, @@ -302,37 +303,40 @@ TEST_F(OutgoingShareTargetInfoTest, SendAllPayloads) { send_payload_callback.AsStdFunction()); EXPECT_CALL(send_payload_callback, Call(_, _)) .WillOnce(Invoke( - [this](std::unique_ptr payload, - std::weak_ptr) { - payload->id = info_.attachment_payload_map().at(file1_.id()); + [this]( + std::unique_ptr payload, + std::weak_ptr) { + payload->id = session_.attachment_payload_map().at(file1_.id()); })) .WillOnce(Invoke( - [this](std::unique_ptr payload, - std::weak_ptr) { - payload->id = info_.attachment_payload_map().at(text1_.id()); + [this]( + std::unique_ptr payload, + std::weak_ptr) { + payload->id = session_.attachment_payload_map().at(text1_.id()); })) .WillOnce(Invoke( - [this](std::unique_ptr payload, - std::weak_ptr) { - payload->id = info_.attachment_payload_map().at(text2_.id()); + [this]( + std::unique_ptr payload, + std::weak_ptr) { + payload->id = session_.attachment_payload_map().at(text2_.id()); })); - info_.SendAllPayloads(&context, connections_manager, - transfer_metadata_callback.AsStdFunction()); + session_.SendAllPayloads(&context, connections_manager, + transfer_metadata_callback.AsStdFunction()); - auto payload_listener = info_.payload_tracker().lock(); + auto payload_listener = session_.payload_tracker().lock(); EXPECT_THAT(payload_listener, IsTrue()); } -TEST_F(OutgoingShareTargetInfoTest, InitSendPayload) { +TEST_F(OutgoingShareSessionTest, InitSendPayload) { std::vector file_infos; file_infos.push_back({ .size = 12355L, .file_path = file1_.file_path().value(), }); - info_.CreateFilePayloads(file_infos); - info_.CreateTextPayloads(); - info_.CreateWifiCredentialsPayloads(); + session_.CreateFilePayloads(file_infos); + session_.CreateTextPayloads(); + session_.CreateWifiCredentialsPayloads(); MockFunction transfer_metadata_callback; MockFunction, @@ -343,22 +347,22 @@ TEST_F(OutgoingShareTargetInfoTest, InitSendPayload) { connections_manager.set_send_payload_callback( send_payload_callback.AsStdFunction()); - info_.InitSendPayload(&context, connections_manager, - transfer_metadata_callback.AsStdFunction()); + session_.InitSendPayload(&context, connections_manager, + transfer_metadata_callback.AsStdFunction()); - auto payload_listener = info_.payload_tracker().lock(); + auto payload_listener = session_.payload_tracker().lock(); EXPECT_THAT(payload_listener, IsTrue()); } -TEST_F(OutgoingShareTargetInfoTest, SendNextPayload) { +TEST_F(OutgoingShareSessionTest, SendNextPayload) { std::vector file_infos; file_infos.push_back({ .size = 12355L, .file_path = file1_.file_path().value(), }); - info_.CreateFilePayloads(file_infos); - info_.CreateTextPayloads(); - info_.CreateWifiCredentialsPayloads(); + session_.CreateFilePayloads(file_infos); + session_.CreateTextPayloads(); + session_.CreateWifiCredentialsPayloads(); MockFunction transfer_metadata_callback; MockFunction, @@ -369,39 +373,42 @@ TEST_F(OutgoingShareTargetInfoTest, SendNextPayload) { connections_manager.set_send_payload_callback( send_payload_callback.AsStdFunction()); - info_.InitSendPayload(&context, connections_manager, - transfer_metadata_callback.AsStdFunction()); + session_.InitSendPayload(&context, connections_manager, + transfer_metadata_callback.AsStdFunction()); EXPECT_CALL(send_payload_callback, Call(_, _)) .WillOnce(Invoke( - [this](std::unique_ptr payload, - std::weak_ptr) { - payload->id = info_.attachment_payload_map().at(file1_.id()); + [this]( + std::unique_ptr payload, + std::weak_ptr) { + payload->id = session_.attachment_payload_map().at(file1_.id()); })); - info_.SendNextPayload(connections_manager); + session_.SendNextPayload(connections_manager); EXPECT_CALL(send_payload_callback, Call(_, _)) .WillOnce(Invoke( - [this](std::unique_ptr payload, - std::weak_ptr) { - payload->id = info_.attachment_payload_map().at(text1_.id()); + [this]( + std::unique_ptr payload, + std::weak_ptr) { + payload->id = session_.attachment_payload_map().at(text1_.id()); })); - info_.SendNextPayload(connections_manager); + session_.SendNextPayload(connections_manager); EXPECT_CALL(send_payload_callback, Call(_, _)) .WillOnce(Invoke( - [this](std::unique_ptr payload, - std::weak_ptr) { - payload->id = info_.attachment_payload_map().at(text2_.id()); + [this]( + std::unique_ptr payload, + std::weak_ptr) { + payload->id = session_.attachment_payload_map().at(text2_.id()); })); - info_.SendNextPayload(connections_manager); + session_.SendNextPayload(connections_manager); } -TEST_F(OutgoingShareTargetInfoTest, WriteInProgressUpdateFrameSuccess) { +TEST_F(OutgoingShareSessionTest, WriteInProgressUpdateFrameSuccess) { FakeNearbyConnection connection; - info_.OnConnected(absl::Now(), &connection); + session_.OnConnected(absl::Now(), &connection); - info_.WriteProgressUpdateFrame(true, 0.5); + session_.WriteProgressUpdateFrame(true, 0.5); std::vector frame_data = connection.GetWrittenData(); Frame frame; diff --git a/sharing/share_session.cc b/sharing/share_session.cc index 02082a15..15725a3f 100644 --- a/sharing/share_session.cc +++ b/sharing/share_session.cc @@ -47,35 +47,34 @@ using ::nearby::sharing::service::proto::V1Frame; } // namespace -ShareTargetInfo::ShareTargetInfo( - std::string endpoint_id, const ShareTarget& share_target) +ShareSession::ShareSession(std::string endpoint_id, + const ShareTarget& share_target) : endpoint_id_(std::move(endpoint_id)), self_share_(share_target.for_self_share), share_target_(share_target) {} -ShareTargetInfo::ShareTargetInfo(ShareTargetInfo&&) = default; +ShareSession::ShareSession(ShareSession&&) = default; -ShareTargetInfo& ShareTargetInfo::operator=(ShareTargetInfo&&) = default; +ShareSession& ShareSession::operator=(ShareSession&&) = default; -ShareTargetInfo::~ShareTargetInfo() = default; +ShareSession::~ShareSession() = default; -void ShareTargetInfo::UpdateTransferMetadata( +void ShareSession::UpdateTransferMetadata( const TransferMetadata& transfer_metadata) { if (got_final_status_) { // If we already got a final status, we can ignore any subsequent final // statuses caused by race conditions. - NL_VLOG(1) - << __func__ << ": Transfer update decorator swallowed " - << "status update because a final status was already received: " - << share_target_.id << ": " - << TransferMetadata::StatusToString(transfer_metadata.status()); + NL_VLOG(1) << __func__ << ": Transfer update decorator swallowed " + << "status update because a final status was already received: " + << share_target_.id << ": " + << TransferMetadata::StatusToString(transfer_metadata.status()); return; } got_final_status_ = transfer_metadata.is_final_status(); InvokeTransferUpdateCallback(transfer_metadata); } -void ShareTargetInfo::set_disconnect_status( +void ShareSession::set_disconnect_status( TransferMetadata::Status disconnect_status) { disconnect_status_ = disconnect_status; if (disconnect_status_ != TransferMetadata::Status::kUnknown && @@ -85,8 +84,8 @@ void ShareTargetInfo::set_disconnect_status( } } -bool ShareTargetInfo::OnConnected(absl::Time connect_start_time, - NearbyConnection* connection) { +bool ShareSession::OnConnected(absl::Time connect_start_time, + NearbyConnection* connection) { if (!OnNewConnection(connection)) { return false; } @@ -95,7 +94,7 @@ bool ShareTargetInfo::OnConnected(absl::Time connect_start_time, return true; } -void ShareTargetInfo::RunPairedKeyVerification( +void ShareSession::RunPairedKeyVerification( Context* context, NearbySharingDecoder* decoder, OSType os_type, const PairedKeyVerificationRunner::VisibilityHistory& visibility_history, NearbyShareCertificateManager* certificate_manager, @@ -123,7 +122,7 @@ void ShareTargetInfo::RunPairedKeyVerification( key_verification_runner_->Run(std::move(callback)); } -void ShareTargetInfo::OnDisconnect() { +void ShareSession::OnDisconnect() { if (disconnect_status_ != TransferMetadata::Status::kUnknown) { UpdateTransferMetadata( TransferMetadataBuilder().set_status(disconnect_status_).build()); @@ -131,21 +130,22 @@ void ShareTargetInfo::OnDisconnect() { connection_ = nullptr; } -void ShareTargetInfo::SetAttachmentPayloadId(int64_t attachment_id, - int64_t payload_id) { +void ShareSession::SetAttachmentPayloadId(int64_t attachment_id, + int64_t payload_id) { attachment_payload_map_[attachment_id] = payload_id; } -void ShareTargetInfo::CancelPayloads( +void ShareSession::CancelPayloads( NearbyConnectionsManager& connections_manager) { for (const auto& [attachment_id, payload_id] : attachment_payload_map_) { connections_manager.Cancel(payload_id); } } -void ShareTargetInfo::WriteFrame(const Frame& frame) { +void ShareSession::WriteFrame(const Frame& frame) { if (connection_ == nullptr) { - NL_LOG(WARNING) << __func__ << ": Failed to write response frame, due to " + NL_LOG(WARNING) << __func__ + << ": Failed to write response frame, due to " "no connection established."; return; } @@ -155,7 +155,7 @@ void ShareTargetInfo::WriteFrame(const Frame& frame) { connection_->Write(std::move(data)); } -void ShareTargetInfo::WriteResponseFrame( +void ShareSession::WriteResponseFrame( ConnectionResponseFrame::Status response_status) { Frame frame; frame.set_version(Frame::V1); @@ -166,7 +166,7 @@ void ShareTargetInfo::WriteResponseFrame( WriteFrame(frame); } -void ShareTargetInfo::WriteCancelFrame() { +void ShareSession::WriteCancelFrame() { NL_LOG(INFO) << __func__ << ": Writing cancel frame."; Frame frame; diff --git a/sharing/share_session.h b/sharing/share_session.h index eed9e90a..6e73d78f 100644 --- a/sharing/share_session.h +++ b/sharing/share_session.h @@ -42,14 +42,14 @@ namespace nearby::sharing { -// Additional information about the connection to a remote device. -class ShareTargetInfo { +// Class that represents a single share session. +// This class is thread-compatible. +class ShareSession { public: - ShareTargetInfo( - std::string endpoint_id, const ShareTarget& share_target); - ShareTargetInfo(ShareTargetInfo&&); - ShareTargetInfo& operator=(ShareTargetInfo&&); - virtual ~ShareTargetInfo(); + ShareSession(std::string endpoint_id, const ShareTarget& share_target); + ShareSession(ShareSession&&); + ShareSession& operator=(ShareSession&&); + virtual ~ShareSession(); virtual bool IsIncoming() const = 0; std::string endpoint_id() const { return endpoint_id_; } @@ -132,8 +132,7 @@ class ShareTargetInfo { void CancelPayloads(NearbyConnectionsManager& connections_manager); - const absl::flat_hash_map& attachment_payload_map() - const { + const absl::flat_hash_map& attachment_payload_map() const { return attachment_payload_map_; } diff --git a/sharing/share_session_test.cc b/sharing/share_session_test.cc index 94a6df57..9147036d 100644 --- a/sharing/share_session_test.cc +++ b/sharing/share_session_test.cc @@ -40,19 +40,17 @@ namespace nearby::sharing { namespace { using ::location::nearby::proto::sharing::OSType; -using ::nearby::sharing::service::proto::Frame; using ::nearby::sharing::service::proto::ConnectionResponseFrame; +using ::nearby::sharing::service::proto::Frame; using ::nearby::sharing::service::proto::V1Frame; constexpr absl::string_view kEndpointId = "12345"; -// A test class which makes ShareTargetInfo testable since the class is -// abstract. -class TestShareTargetInfo : public ShareTargetInfo { +// A test class which makes ShareSession testable since the class is abstract. +class TestShareSession : public ShareSession { public: - TestShareTargetInfo( - std::string endpoint_id, const ShareTarget& share_target) - : ShareTargetInfo(std::move(endpoint_id), share_target), + TestShareSession(std::string endpoint_id, const ShareTarget& share_target) + : ShareSession(std::move(endpoint_id), share_target), is_incoming_(share_target.is_incoming) {} bool IsIncoming() const override { return is_incoming_; } @@ -68,12 +66,11 @@ class TestShareTargetInfo : public ShareTargetInfo { } void SetAttachmentPayloadId(int64_t attachment_id, int64_t payload_id) { - ShareTargetInfo::SetAttachmentPayloadId(attachment_id, payload_id); + ShareSession::SetAttachmentPayloadId(attachment_id, payload_id); } protected: - void InvokeTransferUpdateCallback( - const TransferMetadata& metadata) override { + void InvokeTransferUpdateCallback(const TransferMetadata& metadata) override { ++transfer_update_count_; last_transfer_metadata_ = metadata; } @@ -91,68 +88,68 @@ class TestShareTargetInfo : public ShareTargetInfo { bool on_new_connection_result_ = true; }; -TEST(ShareTargetInfoTest, UpdateTransferMetadata) { +TEST(ShareSessionTest, UpdateTransferMetadata) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); + TestShareSession session(std::string(kEndpointId), share_target); - info.UpdateTransferMetadata( + session.UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kInProgress) .build()); - info.UpdateTransferMetadata( + session.UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kInProgress) .build()); - EXPECT_EQ(info.TransferUpdateCount(), 2); + EXPECT_EQ(session.TransferUpdateCount(), 2); } -TEST(ShareTargetInfoTest, UpdateTransferMetadataAfterFinalStatus) { +TEST(ShareSessionTest, UpdateTransferMetadataAfterFinalStatus) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); + TestShareSession session(std::string(kEndpointId), share_target); - info.UpdateTransferMetadata( + session.UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kComplete) .build()); - info.UpdateTransferMetadata( + session.UpdateTransferMetadata( TransferMetadataBuilder() .set_status(TransferMetadata::Status::kInProgress) .build()); - EXPECT_EQ(info.TransferUpdateCount(), 1); + EXPECT_EQ(session.TransferUpdateCount(), 1); } -TEST(ShareTargetInfoTest, SetDisconnectStatus) { +TEST(ShareSessionTest, SetDisconnectStatus) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); + TestShareSession session(std::string(kEndpointId), share_target); - info.set_disconnect_status(TransferMetadata::Status::kCancelled); - EXPECT_EQ(info.disconnect_status(), TransferMetadata::Status::kCancelled); + session.set_disconnect_status(TransferMetadata::Status::kCancelled); + EXPECT_EQ(session.disconnect_status(), TransferMetadata::Status::kCancelled); } -TEST(ShareTargetInfoTest, OnConnectedFails) { +TEST(ShareSessionTest, OnConnectedFails) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); - info.SetOnNewConnectionResult(false); + TestShareSession session(std::string(kEndpointId), share_target); + session.SetOnNewConnectionResult(false); - EXPECT_FALSE(info.OnConnected(absl::Now(), nullptr)); + EXPECT_FALSE(session.OnConnected(absl::Now(), nullptr)); } -TEST(ShareTargetInfoTest, OnConnectedSucceeds) { +TEST(ShareSessionTest, OnConnectedSucceeds) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); + TestShareSession session(std::string(kEndpointId), share_target); FakeNearbyConnection connection; - info.SetOnNewConnectionResult(true); + session.SetOnNewConnectionResult(true); absl::Time connect_start_time = absl::Now(); FakeContext context; - EXPECT_TRUE(info.OnConnected(connect_start_time, &connection)); - EXPECT_EQ(info.connection_start_time(), connect_start_time); - EXPECT_EQ(info.connection(), &connection); + EXPECT_TRUE(session.OnConnected(connect_start_time, &connection)); + EXPECT_EQ(session.connection_start_time(), connect_start_time); + EXPECT_EQ(session.connection(), &connection); } -TEST(ShareTargetInfoTest, IncomingRunPairedKeyVerificationSuccess) { +TEST(ShareSessionTest, IncomingRunPairedKeyVerificationSuccess) { FakeContext context; NearbySharingDecoderImpl nearby_sharing_decoder; FakeNearbyShareCertificateManager certificate_manager; @@ -161,14 +158,14 @@ TEST(ShareTargetInfoTest, IncomingRunPairedKeyVerificationSuccess) { std::vector{0, 1, 2, 3, 4, 5}; ShareTarget share_target; share_target.is_incoming = true; - TestShareTargetInfo info(std::string(kEndpointId), share_target); - info.SetOnNewConnectionResult(true); + TestShareSession session(std::string(kEndpointId), share_target); + session.SetOnNewConnectionResult(true); absl::Time connect_start_time = absl::Now(); - EXPECT_TRUE(info.OnConnected(connect_start_time, &connection)); + EXPECT_TRUE(session.OnConnected(connect_start_time, &connection)); absl::Notification notification; PairedKeyVerificationRunner::PairedKeyVerificationResult verification_result; - info.RunPairedKeyVerification( + session.RunPairedKeyVerification( &context, &nearby_sharing_decoder, OSType::WINDOWS, { .visibility = proto::DeviceVisibility::DEVICE_VISIBILITY_EVERYONE, @@ -193,9 +190,8 @@ TEST(ShareTargetInfoTest, IncomingRunPairedKeyVerificationSuccess) { ->mutable_paired_key_encryption() ->set_signed_data("signed_data"); std::string in_encryption_buffer = in_encryption_frame.SerializeAsString(); - connection.AppendReadableData( - std::vector(in_encryption_buffer.begin(), - in_encryption_buffer.end())); + connection.AppendReadableData(std::vector( + in_encryption_buffer.begin(), in_encryption_buffer.end())); // Receive PairedKeyResultFrame from remote device. nearby::sharing::service::proto::Frame in_result_frame; in_result_frame.set_version(nearby::sharing::service::proto::Frame::V1); @@ -220,41 +216,41 @@ TEST(ShareTargetInfoTest, IncomingRunPairedKeyVerificationSuccess) { PairedKeyVerificationRunner::PairedKeyVerificationResult::kUnable); } -TEST(ShareTargetInfoTest, OnDisconnect) { +TEST(ShareSessionTest, OnDisconnect) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); - info.set_disconnect_status(TransferMetadata::Status::kCancelled); - EXPECT_EQ(info.disconnect_status(), TransferMetadata::Status::kCancelled); + TestShareSession session(std::string(kEndpointId), share_target); + session.set_disconnect_status(TransferMetadata::Status::kCancelled); + EXPECT_EQ(session.disconnect_status(), TransferMetadata::Status::kCancelled); - info.OnDisconnect(); + session.OnDisconnect(); - EXPECT_EQ(info.TransferUpdateCount(), 1); - ASSERT_TRUE(info.LastTransferMetadata().has_value()); - EXPECT_EQ(info.LastTransferMetadata()->status(), + EXPECT_EQ(session.TransferUpdateCount(), 1); + ASSERT_TRUE(session.LastTransferMetadata().has_value()); + EXPECT_EQ(session.LastTransferMetadata()->status(), TransferMetadata::Status::kCancelled); - EXPECT_TRUE(info.LastTransferMetadata()->is_final_status()); + EXPECT_TRUE(session.LastTransferMetadata()->is_final_status()); } -TEST(ShareTargetInfoTest, CancelPayloads) { +TEST(ShareSessionTest, CancelPayloads) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); - info.SetAttachmentPayloadId(1, 2); - info.SetAttachmentPayloadId(3, 4); + TestShareSession session(std::string(kEndpointId), share_target); + session.SetAttachmentPayloadId(1, 2); + session.SetAttachmentPayloadId(3, 4); FakeNearbyConnectionsManager connections_manager; - info.CancelPayloads(connections_manager); + session.CancelPayloads(connections_manager); EXPECT_TRUE(connections_manager.WasPayloadCanceled(2)); EXPECT_TRUE(connections_manager.WasPayloadCanceled(4)); } -TEST(ShareTargetInfoTest, WriteResponseFrame) { +TEST(ShareSessionTest, WriteResponseFrame) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); + TestShareSession session(std::string(kEndpointId), share_target); FakeNearbyConnection connection; - EXPECT_TRUE(info.OnConnected(absl::Now(), &connection)); + EXPECT_TRUE(session.OnConnected(absl::Now(), &connection)); - info.WriteResponseFrame(ConnectionResponseFrame::REJECT); + session.WriteResponseFrame(ConnectionResponseFrame::REJECT); std::vector frame_data = connection.GetWrittenData(); Frame frame; @@ -265,13 +261,13 @@ TEST(ShareTargetInfoTest, WriteResponseFrame) { ConnectionResponseFrame::REJECT); } -TEST(ShareTargetInfoTest, WriteCancelFrame) { +TEST(ShareSessionTest, WriteCancelFrame) { ShareTarget share_target; - TestShareTargetInfo info(std::string(kEndpointId), share_target); + TestShareSession session(std::string(kEndpointId), share_target); FakeNearbyConnection connection; - EXPECT_TRUE(info.OnConnected(absl::Now(), &connection)); + EXPECT_TRUE(session.OnConnected(absl::Now(), &connection)); - info.WriteCancelFrame(); + session.WriteCancelFrame(); std::vector frame_data = connection.GetWrittenData(); Frame frame;