Move Attachments into ShareTargetInfo.

PiperOrigin-RevId: 640597022
This commit is contained in:
Francis Tsui
2024-06-05 11:48:00 -07:00
committed by Copybara-Service
parent 37e8523189
commit 3c73448dc8
19 changed files with 528 additions and 526 deletions
-2
View File
@@ -85,7 +85,6 @@ cc_library(
"//sharing:__subpackages__",
],
deps = [
":attachments",
":connection_types",
"//internal/network:url",
"//sharing/common:enum",
@@ -581,7 +580,6 @@ cc_test(
name = "share_target_test",
srcs = ["share_target_test.cc"],
deps = [
":attachments",
":types",
"//internal/network:url",
"//sharing/common:enum",
+8 -7
View File
@@ -268,8 +268,9 @@ void AnalyticsRecorder::NewEstablishConnection(
int64_t session_id,
::location::nearby::proto::sharing::EstablishConnectionStatus
connection_status,
ShareTarget share_target, int transfer_position, int concurrent_connections,
int64_t duration_millis, std::optional<std::string> referrer_package) {
const ShareTarget& share_target, int transfer_position,
int concurrent_connections, int64_t duration_millis,
std::optional<std::string> referrer_package) {
std::unique_ptr<SharingLog> sharing_log = CreateSharingLog(
EventCategory::SENDING_EVENT, EventType::ESTABLISH_CONNECTION);
@@ -429,7 +430,7 @@ void AnalyticsRecorder::NewDescribeAttachments(
}
void AnalyticsRecorder::NewDiscoverShareTarget(
ShareTarget share_target, int64_t session_id,
const ShareTarget& share_target, int64_t session_id,
int64_t latency_since_scanning_start_millis, int64_t flow_id,
std::optional<std::string> referrer_package,
int64_t latency_since_send_surface_registered_millis) {
@@ -593,7 +594,7 @@ void AnalyticsRecorder::NewDismissFastInitialization() {
}
void AnalyticsRecorder::NewReceiveIntroduction(
int64_t session_id, ShareTarget share_target,
int64_t session_id, const ShareTarget& share_target,
std::optional<std::string> referrer_package,
::location::nearby::proto::sharing::OSType share_target_os_type) {
std::unique_ptr<SharingLog> sharing_log = CreateSharingLog(
@@ -696,7 +697,7 @@ void AnalyticsRecorder::NewScanForShareTargetsStart(
}
void AnalyticsRecorder::NewSendAttachmentsEnd(
int64_t session_id, int64_t sent_bytes, ShareTarget share_target,
int64_t session_id, int64_t sent_bytes, const ShareTarget& share_target,
::location::nearby::proto::sharing::AttachmentTransmissionStatus status,
int transfer_position, int concurrent_connections, int64_t duration_millis,
std::optional<std::string> referrer_package,
@@ -759,7 +760,7 @@ void AnalyticsRecorder::NewSendFastInitialization() {
void AnalyticsRecorder::NewSendStart(int64_t session_id, int transfer_position,
int concurrent_connections,
ShareTarget share_target) {
const ShareTarget& share_target) {
std::unique_ptr<SharingLog> sharing_log =
CreateSharingLog(EventCategory::SENDING_EVENT, EventType::SEND_START);
@@ -793,7 +794,7 @@ void AnalyticsRecorder::NewSendIntroduction(
}
void AnalyticsRecorder::NewSendIntroduction(
int64_t session_id, ShareTarget share_target, int transfer_position,
int64_t session_id, const ShareTarget& share_target, int transfer_position,
int concurrent_connections,
::location::nearby::proto::sharing::OSType share_target_os_type) {
std::unique_ptr<SharingLog> sharing_log = CreateSharingLog(
+8 -7
View File
@@ -44,7 +44,7 @@ class AnalyticsRecorder {
int64_t session_id,
location::nearby::proto::sharing::EstablishConnectionStatus
connection_status,
ShareTarget share_target, int transfer_position,
const ShareTarget& share_target, int transfer_position,
int concurrent_connections, int64_t duration_millis,
std::optional<std::string> referrer_package);
@@ -74,7 +74,7 @@ class AnalyticsRecorder {
void NewDescribeAttachments(const AttachmentContainer& attachments);
void NewDiscoverShareTarget(
ShareTarget share_target, int64_t session_id,
const ShareTarget& share_target, int64_t session_id,
int64_t latency_since_scanning_start_millis, int64_t flow_id,
std::optional<std::string> referrer_package,
int64_t latency_since_send_surface_registered_millis);
@@ -105,7 +105,7 @@ class AnalyticsRecorder {
void NewDismissFastInitialization();
void NewReceiveIntroduction(
int64_t session_id, ShareTarget share_target,
int64_t session_id, const ShareTarget& share_target,
std::optional<std::string> referrer_package,
location::nearby::proto::sharing::OSType share_target_os_type);
@@ -126,7 +126,7 @@ class AnalyticsRecorder {
std::optional<std::string> referrer_package);
void NewSendAttachmentsEnd(
int64_t session_id, int64_t sent_bytes, ShareTarget share_target,
int64_t session_id, int64_t sent_bytes, const ShareTarget& share_target,
location::nearby::proto::sharing::AttachmentTransmissionStatus status,
int transfer_position, int concurrent_connections,
int64_t duration_millis, std::optional<std::string> referrer_package,
@@ -142,7 +142,8 @@ class AnalyticsRecorder {
void NewSendFastInitialization();
void NewSendStart(int64_t session_id, int transfer_position,
int concurrent_connections, ShareTarget share_target);
int concurrent_connections,
const ShareTarget& share_target);
void NewSendIntroduction(
ShareTargetType target_type, int64_t session_id,
@@ -150,8 +151,8 @@ class AnalyticsRecorder {
location::nearby::proto::sharing::OSType share_target_os_type);
void NewSendIntroduction(
int64_t session_id, ShareTarget share_target, int transfer_position,
int concurrent_connections,
int64_t session_id, const ShareTarget& share_target,
int transfer_position, int concurrent_connections,
location::nearby::proto::sharing::OSType share_target_os_type);
void NewSetVisibility(nearby::sharing::proto::DeviceVisibility src_visibility,
+16
View File
@@ -66,4 +66,20 @@ void AttachmentContainer::ClearAttachments() {
}
}
std::vector<int64_t> AttachmentContainer::GetAttachmentIds() const {
std::vector<int64_t> attachment_ids;
attachment_ids.reserve(GetAttachmentCount());
for (const auto& file : file_attachments_)
attachment_ids.push_back(file.id());
for (const auto& text : text_attachments_)
attachment_ids.push_back(text.id());
for (const auto& wifi_credentials : wifi_credentials_attachments_)
attachment_ids.push_back(wifi_credentials.id());
return attachment_ids;
}
} // namespace nearby::sharing
+3
View File
@@ -93,6 +93,9 @@ class AttachmentContainer {
// place.
void ClearAttachments();
// Returns the list of attachment IDs of attachments in this container.
std::vector<int64_t> GetAttachmentIds() const;
private:
std::vector<TextAttachment> text_attachments_;
std::vector<FileAttachment> file_attachments_;
+38 -1
View File
@@ -14,7 +14,9 @@
#include "sharing/attachment_container.h"
#include <cstdint>
#include <filesystem> // NOLINT
#include <optional>
#include <vector>
#include "gmock/gmock.h"
@@ -58,8 +60,10 @@ bool operator==(const WifiCredentialsAttachment& lhs,
namespace {
using testing::Eq;
using testing::IsEmpty;
using testing::IsFalse;
using testing::IsTrue;
using testing::SizeIs;
using testing::UnorderedElementsAre;
class AttachmentContainerTest : public ::testing::Test {
@@ -76,7 +80,7 @@ class AttachmentContainerTest : public ::testing::Test {
"text/plain",
/*batch_id=*/456547,
nearby::sharing::Attachment::SourceType::kContextMenu),
file1_(/*id=*/436346, /*size=*/100000, "someFileName", "image/jpeg",
file1_(/*id=*/436346L, /*size=*/100000, "someFileName", "image/jpeg",
nearby::sharing::service::proto::FileMetadata::IMAGE,
"/usr/local/tmp", /*batch_id=*/66657L,
nearby::sharing::Attachment::SourceType::kSelectFilesButton),
@@ -186,5 +190,38 @@ TEST_F(AttachmentContainerTest, HasAttachments) {
EXPECT_THAT(container.HasAttachments(), IsTrue());
}
TEST_F(AttachmentContainerTest, ClearAttachments) {
AttachmentContainer container(std::vector<TextAttachment>{text1_, text2_},
std::vector<FileAttachment>{file1_},
std::vector<WifiCredentialsAttachment>{wifi1_});
container.ClearAttachments();
ASSERT_THAT(container.GetTextAttachments(), SizeIs(2));
EXPECT_THAT(container.GetTextAttachments()[0].text_body(), IsEmpty());
EXPECT_THAT(container.GetTextAttachments()[1].text_body(), IsEmpty());
ASSERT_THAT(container.GetFileAttachments(), SizeIs(1));
EXPECT_THAT(container.GetFileAttachments()[0].file_path(), Eq(std::nullopt));
ASSERT_THAT(container.GetWifiCredentialsAttachments(), SizeIs(1));
EXPECT_THAT(container.GetWifiCredentialsAttachments()[0].password(),
IsEmpty());
EXPECT_THAT(container.GetWifiCredentialsAttachments()[0].is_hidden(),
IsFalse());
}
TEST_F(AttachmentContainerTest, GetAttachmentIds) {
AttachmentContainer container(std::vector<TextAttachment>{text1_, text2_},
std::vector<FileAttachment>{file1_},
std::vector<WifiCredentialsAttachment>{wifi1_});
std::vector<int64_t> attachment_ids = container.GetAttachmentIds();
EXPECT_THAT(attachment_ids, SizeIs(4));
EXPECT_THAT(attachment_ids,
UnorderedElementsAre(text1_.id(), text2_.id(), file1_.id(),
wifi1_.id()));
}
} // namespace
} // namespace nearby::sharing
+8 -3
View File
@@ -27,10 +27,10 @@ namespace sharing {
IncomingShareTargetInfo::IncomingShareTargetInfo(
std::string endpoint_id, const ShareTarget& share_target,
std::function<void(const ShareTarget&, const TransferMetadata&)>
std::function<void(const IncomingShareTargetInfo&, const TransferMetadata&)>
transfer_update_callback)
: ShareTargetInfo(std::move(endpoint_id), share_target,
std::move(transfer_update_callback)) {}
: ShareTargetInfo(std::move(endpoint_id), share_target),
transfer_update_callback_(std::move(transfer_update_callback)) {}
IncomingShareTargetInfo::IncomingShareTargetInfo(IncomingShareTargetInfo&&) =
default;
@@ -40,5 +40,10 @@ IncomingShareTargetInfo& IncomingShareTargetInfo::operator=(
IncomingShareTargetInfo::~IncomingShareTargetInfo() = default;
void IncomingShareTargetInfo::InvokeTransferUpdateCallback(
const TransferMetadata& metadata) {
transfer_update_callback_(*this, metadata);
}
} // namespace sharing
} // namespace nearby
+12 -4
View File
@@ -26,15 +26,23 @@ namespace sharing {
class IncomingShareTargetInfo : public ShareTargetInfo {
public:
IncomingShareTargetInfo(
std::string endpoint_id, const ShareTarget& share_target,
std::function<void(const ShareTarget&, const TransferMetadata&)>
transfer_update_callback);
IncomingShareTargetInfo(std::string endpoint_id,
const ShareTarget& share_target,
std::function<void(const IncomingShareTargetInfo&,
const TransferMetadata&)>
transfer_update_callback);
IncomingShareTargetInfo(IncomingShareTargetInfo&&);
IncomingShareTargetInfo& operator=(IncomingShareTargetInfo&&);
~IncomingShareTargetInfo() override;
bool IsIncoming() const override { return true; }
protected:
void InvokeTransferUpdateCallback(const TransferMetadata& metadata) override;
private:
std::function<void(const IncomingShareTargetInfo&, const TransferMetadata&)>
transfer_update_callback_;
};
} // namespace sharing
File diff suppressed because it is too large Load Diff
+33 -31
View File
@@ -24,7 +24,7 @@
#include <optional>
#include <queue>
#include <string>
#include <utility>
#include <tuple>
#include <vector>
#include "absl/base/attributes.h"
@@ -323,25 +323,25 @@ class NearbySharingServiceImpl
void OnTransferStarted(bool is_incoming);
void ReceivePayloads(
ShareTarget share_target,
ShareTargetInfo& share_target_info,
std::function<void(StatusCodes status_codes)> status_codes_callback);
StatusCodes SendPayloads(const ShareTarget& share_target);
StatusCodes SendPayloads(ShareTargetInfo& info);
void OnPayloadPathsRegistered(
const ShareTarget& share_target,
ShareTargetInfo& info,
std::function<void(StatusCodes status_codes)> status_codes_callback);
void OnOutgoingConnection(const ShareTarget& share_target,
absl::Time connect_start_time,
NearbyConnection* connection);
void SendIntroduction(const ShareTarget& share_target,
void OnOutgoingConnection(absl::Time connect_start_time,
NearbyConnection* connection,
OutgoingShareTargetInfo& info);
void SendIntroduction(OutgoingShareTargetInfo& info,
std::optional<std::string> four_digit_token);
void CreatePayloads(OutgoingShareTargetInfo& info,
std::function<void(ShareTarget, bool)> callback);
std::function<void(int64_t, bool)> callback);
void OnCreatePayloads(std::vector<uint8_t> endpoint_info,
ShareTarget share_target, bool success);
void OnOpenFiles(ShareTarget share_target,
std::function<void(ShareTarget, bool)> callback,
int64_t share_target_id, bool success);
void OnOpenFiles(int64_t share_target_id,
std::function<void(int64_t, bool)> callback,
std::vector<NearbyFileHandler::FileInfo> files);
std::vector<Payload> CreateTextPayloads(
const std::vector<TextAttachment>& attachments);
@@ -360,10 +360,12 @@ class NearbySharingServiceImpl
void OnIncomingAdvertisementDecoded(
absl::string_view endpoint_id, int64_t placeholder_share_target_id,
std::unique_ptr<Advertisement> advertisement);
void OnIncomingTransferUpdate(const ShareTarget& share_target,
const TransferMetadata& metadata);
void OnOutgoingTransferUpdate(const ShareTarget& share_target,
const TransferMetadata& metadata);
void OnIncomingTransferUpdate(
const IncomingShareTargetInfo& share_target_info,
const TransferMetadata& metadata);
void OnOutgoingTransferUpdate(
OutgoingShareTargetInfo& share_target_info,
const TransferMetadata& metadata);
void CloseConnection(int64_t share_target_id);
void OnIncomingDecryptedCertificate(
absl::string_view endpoint_id, const Advertisement& advertisement,
@@ -376,31 +378,31 @@ class NearbySharingServiceImpl
::location::nearby::proto::sharing::OSType)>
callback);
void OnIncomingConnectionKeyVerificationDone(
ShareTarget share_target, std::optional<std::string> four_digit_token,
int64_t share_target_id, std::optional<std::string> four_digit_token,
PairedKeyVerificationRunner::PairedKeyVerificationResult result,
::location::nearby::proto::sharing::OSType share_target_os_type);
void OnOutgoingConnectionKeyVerificationDone(
const ShareTarget& share_target,
int64_t share_target_id,
std::optional<std::string> four_digit_token,
PairedKeyVerificationRunner::PairedKeyVerificationResult result,
::location::nearby::proto::sharing::OSType share_target_os_type);
void ReceiveIntroduction(ShareTarget share_target,
void ReceiveIntroduction(const IncomingShareTargetInfo& info,
std::optional<std::string> four_digit_token);
void OnReceivedIntroduction(
ShareTarget share_target, std::optional<std::string> four_digit_token,
int64_t share_target_id, std::optional<std::string> four_digit_token,
std::optional<nearby::sharing::service::proto::V1Frame> frame);
void ReceiveConnectionResponse(ShareTarget share_target);
void ReceiveConnectionResponse(ShareTargetInfo& info);
void OnReceiveConnectionResponse(
ShareTarget share_target,
int64_t share_target_id,
std::optional<nearby::sharing::service::proto::V1Frame> frame);
void OnStorageCheckCompleted(ShareTarget share_target,
void OnStorageCheckCompleted(int64_t share_target_id,
std::optional<std::string> four_digit_token,
bool is_out_of_storage);
void OnFrameRead(
ShareTarget share_target,
int64_t share_target_id,
std::optional<nearby::sharing::service::proto::V1Frame> frame);
void HandleProgressUpdateFrame(
const ShareTarget& share_target,
int64_t share_target_id,
const nearby::sharing::service::proto::ProgressUpdateFrame&
progress_update_frame);
@@ -419,8 +421,8 @@ class NearbySharingServiceImpl
void OnPayloadTransferUpdate(int64_t share_target_id,
TransferMetadata metadata);
bool OnIncomingPayloadsComplete(ShareTarget& share_target);
void RemoveIncomingPayloads(ShareTarget share_target);
bool OnIncomingPayloadsComplete(int64_t share_target_id);
void RemoveIncomingPayloads(const IncomingShareTargetInfo& share_target_info);
void Disconnect(int64_t share_target_id, TransferMetadata metadata);
void OnDisconnectingConnectionTimeout(absl::string_view endpoint_id);
@@ -485,7 +487,7 @@ class NearbySharingServiceImpl
absl::AnyInvocable<void()> task);
// Returns a 1-based position.It is used by group share feature.
int GetConnectedShareTargetPos(const ShareTarget& target);
int GetConnectedShareTargetPos();
// Returns the share target count. It is used by group share feature.
int GetConnectedShareTargetCount();
@@ -497,7 +499,7 @@ class NearbySharingServiceImpl
TransportType GetTransportType(const AttachmentContainer& container) const;
// Update file path for the file attachment.
void UpdateFilePath(ShareTarget& share_target);
void UpdateFilePath(AttachmentContainer& container);
// Returns true if Shutdown() has been called.
bool IsShuttingDown();
@@ -554,10 +556,10 @@ class NearbySharingServiceImpl
// Registers the most recent TransferMetadata and ShareTarget used for
// transitioning notifications between foreground surfaces and background
// surfaces. Empty if no metadata is available.
std::optional<std::pair<ShareTarget, TransferMetadata>>
std::optional<std::tuple<ShareTarget, AttachmentContainer, TransferMetadata>>
last_incoming_metadata_;
// The most recent outgoing TransferMetadata and ShareTarget.
std::optional<std::pair<ShareTarget, TransferMetadata>>
std::optional<std::tuple<ShareTarget, AttachmentContainer, TransferMetadata>>
last_outgoing_metadata_;
// A map of ShareTarget id to IncomingShareTargetInfo. This lets us know which
// Nearby Connections endpoint and public certificate are related to the
+12 -11
View File
@@ -64,6 +64,7 @@
#include "sharing/fast_initiation/nearby_fast_initiation_impl.h"
#include "sharing/file_attachment.h"
#include "sharing/flags/generated/nearby_sharing_feature_flags.h"
#include "sharing/incoming_share_target_info.h"
#include "sharing/internal/api/mock_app_info.h"
#include "sharing/internal/api/mock_sharing_platform.h"
#include "sharing/internal/api/preference_manager.h"
@@ -1715,7 +1716,6 @@ TEST_F(NearbySharingServiceImplTest,
.WillOnce([&](ShareTarget share_target) {
EXPECT_FALSE(share_target.is_incoming);
EXPECT_TRUE(share_target.is_known);
EXPECT_FALSE(share_target.attachment_container.HasAttachments());
EXPECT_EQ(share_target.device_name, kDeviceName);
EXPECT_EQ(share_target.type, kDeviceType);
EXPECT_TRUE(share_target.device_id);
@@ -1769,7 +1769,6 @@ TEST_F(NearbySharingServiceImplTest, RegisterSendSurfaceEmptyCertificate) {
.WillOnce([](ShareTarget share_target) {
EXPECT_FALSE(share_target.is_incoming);
EXPECT_FALSE(share_target.is_known);
EXPECT_FALSE(share_target.attachment_container.HasAttachments());
EXPECT_EQ(share_target.device_name, kDeviceName);
EXPECT_FALSE(share_target.image_url);
EXPECT_EQ(share_target.type, kDeviceType);
@@ -4490,17 +4489,16 @@ TEST_F(NearbySharingServiceImplTest, RetryDiscoveredEndpointsDownloadLimit) {
TEST_F(NearbySharingServiceImplTest, OpenSharedTarget) {
ShareTarget share_target;
share_target.attachment_container.AddTextAttachment(
auto container = std::make_unique<AttachmentContainer>();
container->AddTextAttachment(
TextAttachment(TextMetadata::TEXT, "body", "title", "mime"));
NearbySharingService::StatusCodes result;
absl::Notification notification;
service_->Open(
share_target,
std::make_unique<AttachmentContainer>(share_target.attachment_container),
[&](NearbySharingService::StatusCodes status_code) {
result = status_code;
notification.Notify();
});
service_->Open(share_target, std::move(container),
[&](NearbySharingService::StatusCodes status_code) {
result = status_code;
notification.Notify();
});
ASSERT_TRUE(notification.WaitForNotificationWithTimeout(kWaitTimeout));
EXPECT_EQ(result, NearbySharingService::StatusCodes::kOk);
@@ -5040,7 +5038,10 @@ TEST_F(NearbySharingServiceImplTest, RemoveIncomingPayloads) {
UnorderedElementsAre("test1.txt", "test2.txt"));
ShareTarget share_target;
share_target.is_incoming = true;
service_->RemoveIncomingPayloads(share_target);
IncomingShareTargetInfo share_target_info(
"endpoint_id", share_target,
[](const IncomingShareTargetInfo&, const TransferMetadata&) {});
service_->RemoveIncomingPayloads(share_target_info);
EXPECT_EQ(
fake_nearby_connections_manager_->GetUnknownFilePathsToDeleteForTesting()
.size(),
+8 -3
View File
@@ -30,10 +30,10 @@ namespace sharing {
OutgoingShareTargetInfo::OutgoingShareTargetInfo(
std::string endpoint_id, const ShareTarget& share_target,
std::function<void(const ShareTarget&, const TransferMetadata&)>
std::function<void(OutgoingShareTargetInfo&, const TransferMetadata&)>
transfer_update_callback)
: ShareTargetInfo(std::move(endpoint_id), share_target,
std::move(transfer_update_callback)) {}
: ShareTargetInfo(std::move(endpoint_id), share_target),
transfer_update_callback_(std::move(transfer_update_callback)) {}
OutgoingShareTargetInfo::OutgoingShareTargetInfo(OutgoingShareTargetInfo&&) =
default;
@@ -43,6 +43,11 @@ OutgoingShareTargetInfo& OutgoingShareTargetInfo::operator=(
OutgoingShareTargetInfo::~OutgoingShareTargetInfo() = default;
void OutgoingShareTargetInfo::InvokeTransferUpdateCallback(
const TransferMetadata& metadata) {
transfer_update_callback_(*this, metadata);
}
std::vector<Payload> OutgoingShareTargetInfo::ExtractTextPayloads() {
return std::move(text_payloads_);
}
+10 -4
View File
@@ -32,10 +32,11 @@ namespace sharing {
// A description of the outgoing connection to a remote device.
class OutgoingShareTargetInfo : public ShareTargetInfo {
public:
OutgoingShareTargetInfo(
std::string endpoint_id, const ShareTarget& share_target,
std::function<void(const ShareTarget&, const TransferMetadata&)>
transfer_update_callback);
OutgoingShareTargetInfo(std::string endpoint_id,
const ShareTarget& share_target,
std::function<void(OutgoingShareTargetInfo&,
const TransferMetadata&)>
transfer_update_callback);
OutgoingShareTargetInfo(OutgoingShareTargetInfo&&);
OutgoingShareTargetInfo& operator=(OutgoingShareTargetInfo&&);
~OutgoingShareTargetInfo() override;
@@ -81,12 +82,17 @@ class OutgoingShareTargetInfo : public ShareTargetInfo {
std::vector<Payload> ExtractWifiCredentialsPayloads();
std::optional<Payload> ExtractNextPayload();
protected:
void InvokeTransferUpdateCallback(const TransferMetadata& metadata) override;
private:
std::optional<std::string> obfuscated_gaia_id_;
std::vector<Payload> text_payloads_;
std::vector<Payload> file_payloads_;
std::vector<Payload> wifi_credentials_payloads_;
Status connection_layer_status_;
std::function<void(OutgoingShareTargetInfo&, const TransferMetadata&)>
transfer_update_callback_;
};
} // namespace sharing
-41
View File
@@ -16,7 +16,6 @@
#include <cinttypes>
#include <cstdint>
#include <memory>
#include <optional>
#include <string>
#include <utility>
@@ -26,11 +25,7 @@
#include "absl/strings/str_format.h"
#include "absl/strings/str_join.h"
#include "internal/network/url.h"
#include "sharing/attachment.h"
#include "sharing/common/nearby_share_enums.h"
#include "sharing/file_attachment.h"
#include "sharing/text_attachment.h"
#include "sharing/wifi_credentials_attachment.h"
namespace nearby {
namespace sharing {
@@ -45,17 +40,11 @@ ShareTarget::ShareTarget() { id = ++kLastGeneratedId; }
ShareTarget::ShareTarget(
std::string device_name, Url image_url, ShareTargetType type,
std::vector<TextAttachment> text_attachments,
std::vector<FileAttachment> file_attachments,
std::vector<WifiCredentialsAttachment> wifi_credentials_attachments,
bool is_incoming, std::optional<std::string> full_name, bool is_known,
std::optional<std::string> device_id, bool for_self_share)
: device_name(std::move(device_name)),
image_url(std::move(image_url)),
type(type),
attachment_container(std::move(text_attachments),
std::move(file_attachments),
std::move(wifi_credentials_attachments)),
is_incoming(is_incoming),
full_name(std::move(full_name)),
is_known(is_known),
@@ -74,27 +63,6 @@ ShareTarget& ShareTarget::operator=(ShareTarget&&) = default;
ShareTarget::~ShareTarget() = default;
std::vector<int64_t> ShareTarget::GetAttachmentIds() const {
std::vector<int64_t> attachment_ids;
attachment_ids.reserve(attachment_container.GetAttachmentCount());
for (const auto& file : attachment_container.GetFileAttachments())
attachment_ids.push_back(file.id());
for (const auto& text : attachment_container.GetTextAttachments())
attachment_ids.push_back(text.id());
for (const auto& wifi_credentials :
attachment_container.GetWifiCredentialsAttachments())
attachment_ids.push_back(wifi_credentials.id());
return attachment_ids;
}
int64_t ShareTarget::GetTotalAttachmentsSize() const {
return attachment_container.GetTotalAttachmentsSize();
}
std::string ShareTarget::ToString() const {
std::vector<std::string> fmt;
@@ -109,15 +77,6 @@ std::string ShareTarget::ToString() const {
if (device_id) {
fmt.push_back(absl::StrFormat("device_id: %s", *device_id));
}
fmt.push_back(
absl::StrFormat("file_attachments_size: %d",
attachment_container.GetFileAttachments().size()));
fmt.push_back(
absl::StrFormat("text_attachments_size: %d",
attachment_container.GetTextAttachments().size()));
fmt.push_back(absl::StrFormat(
"wifi_credentials_attachments_size: %d",
attachment_container.GetWifiCredentialsAttachments().size()));
fmt.push_back(absl::StrFormat("is_known: %d", is_known));
fmt.push_back(absl::StrFormat("is_incoming: %d", is_incoming));
fmt.push_back(absl::StrFormat("for_self_share: %d", for_self_share));
+1 -11
View File
@@ -18,14 +18,9 @@
#include <cstdint>
#include <optional>
#include <string>
#include <vector>
#include "internal/network/url.h"
#include "sharing/attachment_container.h"
#include "sharing/common/nearby_share_enums.h"
#include "sharing/file_attachment.h"
#include "sharing/text_attachment.h"
#include "sharing/wifi_credentials_attachment.h"
namespace nearby {
namespace sharing {
@@ -36,9 +31,7 @@ struct ShareTarget {
ShareTarget();
ShareTarget(
std::string device_name, ::nearby::network::Url image_url,
ShareTargetType type, std::vector<TextAttachment> text_attachments,
std::vector<FileAttachment> file_attachments,
std::vector<WifiCredentialsAttachment> wifi_credentials_attachments,
ShareTargetType type,
bool is_incoming, std::optional<std::string> full_name, bool is_known,
std::optional<std::string> device_id, bool for_self_share);
ShareTarget(const ShareTarget&);
@@ -47,8 +40,6 @@ struct ShareTarget {
ShareTarget& operator=(ShareTarget&&);
~ShareTarget();
std::vector<int64_t> GetAttachmentIds() const;
int64_t GetTotalAttachmentsSize() const;
std::string ToString() const;
int64_t id;
@@ -56,7 +47,6 @@ struct ShareTarget {
// Uri that points to an image of the ShareTarget, if one exists.
std::optional<::nearby::network::Url> image_url;
ShareTargetType type = ShareTargetType::kUnknown;
AttachmentContainer attachment_container;
bool is_incoming = false;
std::optional<std::string> full_name;
// True if the local device has the PublicCertificate this target is
+13 -25
View File
@@ -14,7 +14,6 @@
#include "sharing/share_target_info.h"
#include <functional>
#include <string>
#include <utility>
@@ -27,13 +26,10 @@ namespace nearby {
namespace sharing {
ShareTargetInfo::ShareTargetInfo(
std::string endpoint_id, const ShareTarget& share_target,
std::function<void(const ShareTarget&, const TransferMetadata&)>
transfer_update_callback)
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),
transfer_update_callback_(std::move(transfer_update_callback)) {}
share_target_(share_target) {}
ShareTargetInfo::ShareTargetInfo(ShareTargetInfo&&) = default;
@@ -41,28 +37,20 @@ ShareTargetInfo& ShareTargetInfo::operator=(ShareTargetInfo&&) = default;
ShareTargetInfo::~ShareTargetInfo() = default;
void ShareTargetInfo::set_share_target(const ShareTarget& share_target) {
NL_DCHECK(share_target.id == share_target_.id);
NL_DCHECK(share_target.for_self_share == share_target_.for_self_share);
share_target_ = share_target;
}
void ShareTargetInfo::UpdateTransferMetadata(
const TransferMetadata& transfer_metadata) {
if (transfer_update_callback_) {
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());
return;
}
got_final_status_ = transfer_metadata.is_final_status();
transfer_update_callback_(share_target_, 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());
return;
}
got_final_status_ = transfer_metadata.is_final_status();
InvokeTransferUpdateCallback(transfer_metadata);
}
void ShareTargetInfo::set_disconnect_status(
+24 -13
View File
@@ -16,7 +16,6 @@
#define THIRD_PARTY_NEARBY_SHARING_SHARE_TARGET_INFO_H_
#include <cstdint>
#include <functional>
#include <memory>
#include <optional>
#include <string>
@@ -24,6 +23,7 @@
#include "absl/time/time.h"
#include "proto/sharing_enums.pb.h"
#include "sharing/attachment_container.h"
#include "sharing/certificates/nearby_share_decrypted_public_certificate.h"
#include "sharing/incoming_frames_reader.h"
#include "sharing/nearby_connection.h"
@@ -40,9 +40,7 @@ namespace sharing {
class ShareTargetInfo {
public:
ShareTargetInfo(
std::string endpoint_id, const ShareTarget& share_target,
std::function<void(const ShareTarget&, const TransferMetadata&)>
transfer_update_callback);
std::string endpoint_id, const ShareTarget& share_target);
ShareTargetInfo(ShareTargetInfo&&);
ShareTargetInfo& operator=(ShareTargetInfo&&);
virtual ~ShareTargetInfo();
@@ -87,7 +85,7 @@ class ShareTargetInfo {
}
std::weak_ptr<NearbyConnectionsManager::PayloadStatusListener>
payload_tracker() {
payload_tracker() const {
return payload_tracker_->GetWeakPtr();
}
@@ -95,11 +93,11 @@ class ShareTargetInfo {
payload_tracker_ = std::move(payload_tracker);
}
int64_t session_id() { return session_id_; }
int64_t session_id() const { return session_id_; }
void set_session_id(int64_t session_id) { session_id_ = session_id; }
std::optional<absl::Time> connection_start_time() {
std::optional<absl::Time> connection_start_time() const {
return connection_start_time_;
}
@@ -108,7 +106,9 @@ class ShareTargetInfo {
connection_start_time_ = connection_start_time;
}
::location::nearby::proto::sharing::OSType os_type() { return os_type_; }
::location::nearby::proto::sharing::OSType os_type() const {
return os_type_;
}
void set_os_type(::location::nearby::proto::sharing::OSType os_type) {
os_type_ = os_type;
@@ -116,9 +116,7 @@ class ShareTargetInfo {
bool self_share() const { return self_share_; }
void set_share_target(const ShareTarget& share_target);
ShareTarget share_target() const { return share_target_; }
const ShareTarget& share_target() const { return share_target_; }
// Sets the status to send in the TransferMetadataUpdate on connection
// disconnect. If |status| is kUnknown, then no TransferMetadataUpdate will be
@@ -130,6 +128,20 @@ class ShareTargetInfo {
}
void OnDisconnect();
void SetAttachmentContainer(AttachmentContainer container) {
attachment_container_ = std::move(container);
}
const AttachmentContainer& attachment_container() const {
return attachment_container_;
}
AttachmentContainer& mutable_attachment_container() {
return attachment_container_;
}
protected:
virtual void InvokeTransferUpdateCallback(
const TransferMetadata& metadata) = 0;
private:
std::string endpoint_id_;
@@ -146,12 +158,11 @@ class ShareTargetInfo {
bool self_share_ = false;
ShareTarget share_target_;
bool got_final_status_ = false;
std::function<void(const ShareTarget&, const TransferMetadata&)>
transfer_update_callback_;
// The status sent in the TransferMetadataUpdate on connection disconnect.
// If status is kUnknown, then no TransferMetadataUpdate will be sent.
TransferMetadata::Status disconnect_status_ =
TransferMetadata::Status::kUnknown;
AttachmentContainer attachment_container_;
};
} // namespace sharing
+34 -40
View File
@@ -14,12 +14,10 @@
#include "sharing/share_target_info.h"
#include <functional>
#include <optional>
#include <string>
#include <utility>
#include "gmock/gmock.h"
#include "protobuf-matchers/protocol-buffer-matchers.h"
#include "gtest/gtest.h"
#include "absl/strings/string_view.h"
#include "sharing/share_target.h"
@@ -28,38 +26,42 @@
namespace nearby::sharing {
namespace {
using testing::_;
using testing::Eq;
using testing::Invoke;
using testing::IsTrue;
using testing::MockFunction;
constexpr absl::string_view kEndpointId = "12345";
// A test class which makes ShareTargetInfo testable since the class is
// abstract.
class TestShareTargetInfo : public ShareTargetInfo {
public:
TestShareTargetInfo(
std::string endpoint_id, const ShareTarget& share_target,
std::function<void(const ShareTarget&, const TransferMetadata&)>
transfer_update_callback)
: ShareTargetInfo(std::move(endpoint_id), share_target,
std::move(transfer_update_callback)),
std::string endpoint_id, const ShareTarget& share_target)
: ShareTargetInfo(std::move(endpoint_id), share_target),
is_incoming_(share_target.is_incoming) {}
bool IsIncoming() const override { return is_incoming_; }
int TransferUpdateCount() { return transfer_update_count_; }
std::optional<TransferMetadata> LastTransferMetadata() {
return last_transfer_metadata_;
}
protected:
void InvokeTransferUpdateCallback(
const TransferMetadata& metadata) override {
++transfer_update_count_;
last_transfer_metadata_ = metadata;
}
private:
const bool is_incoming_;
int transfer_update_count_ = 0;
std::optional<TransferMetadata> last_transfer_metadata_;
};
TEST(ShareTargetInfoTest, UpdateTransferMetadata) {
MockFunction<void(const ShareTarget&, const TransferMetadata&)>
update_callback;
ShareTarget share_target;
TestShareTargetInfo info(std::string(kEndpointId), share_target,
update_callback.AsStdFunction());
EXPECT_CALL(update_callback, Call(_, _)).Times(2);
TestShareTargetInfo info(std::string(kEndpointId), share_target);
info.UpdateTransferMetadata(
TransferMetadataBuilder()
@@ -69,16 +71,13 @@ TEST(ShareTargetInfoTest, UpdateTransferMetadata) {
TransferMetadataBuilder()
.set_status(TransferMetadata::Status::kInProgress)
.build());
EXPECT_EQ(info.TransferUpdateCount(), 2);
}
TEST(ShareTargetInfoTest, UpdateTransferMetadataAfterFinalStatus) {
MockFunction<void(const ShareTarget&, const TransferMetadata&)>
update_callback;
ShareTarget share_target;
TestShareTargetInfo info(std::string(kEndpointId), share_target,
update_callback.AsStdFunction());
EXPECT_CALL(update_callback, Call(_, _));
TestShareTargetInfo info(std::string(kEndpointId), share_target);
info.UpdateTransferMetadata(
TransferMetadataBuilder()
@@ -88,36 +87,31 @@ TEST(ShareTargetInfoTest, UpdateTransferMetadataAfterFinalStatus) {
TransferMetadataBuilder()
.set_status(TransferMetadata::Status::kInProgress)
.build());
EXPECT_EQ(info.TransferUpdateCount(), 1);
}
TEST(ShareTargetInfoTest, SetDisconnectStatus) {
MockFunction<void(const ShareTarget&, const TransferMetadata&)>
update_callback;
ShareTarget share_target;
TestShareTargetInfo info(std::string(kEndpointId), share_target,
update_callback.AsStdFunction());
TestShareTargetInfo info(std::string(kEndpointId), share_target);
info.set_disconnect_status(TransferMetadata::Status::kCancelled);
EXPECT_EQ(info.disconnect_status(), TransferMetadata::Status::kCancelled);
}
TEST(ShareTargetInfoTest, OnDisconnect) {
MockFunction<void(const ShareTarget&, const TransferMetadata&)>
update_callback;
ShareTarget share_target;
TestShareTargetInfo info(std::string(kEndpointId), share_target,
update_callback.AsStdFunction());
TestShareTargetInfo info(std::string(kEndpointId), share_target);
info.set_disconnect_status(TransferMetadata::Status::kCancelled);
EXPECT_EQ(info.disconnect_status(), TransferMetadata::Status::kCancelled);
EXPECT_CALL(update_callback, Call(_, _))
.WillOnce(Invoke([](const ShareTarget& share_target,
const TransferMetadata& transfer_metadata) {
EXPECT_THAT(transfer_metadata.status(),
Eq(TransferMetadata::Status::kCancelled));
EXPECT_THAT(transfer_metadata.is_final_status(), IsTrue());
}));
info.OnDisconnect();
EXPECT_EQ(info.TransferUpdateCount(), 1);
ASSERT_TRUE(info.LastTransferMetadata().has_value());
EXPECT_EQ(info.LastTransferMetadata()->status(),
TransferMetadata::Status::kCancelled);
EXPECT_TRUE(info.LastTransferMetadata()->is_final_status());
}
} // namespace
+2 -12
View File
@@ -20,9 +20,6 @@
#include "gtest/gtest.h"
#include "internal/network/url.h"
#include "sharing/common/nearby_share_enums.h"
#include "sharing/file_attachment.h"
#include "sharing/text_attachment.h"
#include "sharing/wifi_credentials_attachment.h"
namespace nearby {
namespace sharing {
@@ -38,9 +35,6 @@ std::vector<ShareTargetToStringTestData> GetTestData() {
ShareTarget share_target2{"test_name",
::nearby::network::Url(),
ShareTargetType::kPhone,
std::vector<TextAttachment>(),
std::vector<FileAttachment>(),
std::vector<WifiCredentialsAttachment>(),
/* is_incoming */ true,
"test_full_name",
/* is_known */ false,
@@ -53,16 +47,12 @@ std::vector<ShareTargetToStringTestData> GetTestData() {
ShareTargetToStringTestData>* kShareTargetToStringTestData =
new std::vector<ShareTargetToStringTestData>({
{share_target1,
"ShareTarget<id: 1, device_name: , "
"file_attachments_size: 0, text_attachments_size: 0, "
"wifi_credentials_attachments_size: 0, is_known: 0, is_incoming: 0, "
"ShareTarget<id: 1, device_name: , is_known: 0, is_incoming: 0, "
"for_self_share: 0, vendor_id: 0>"},
{share_target2,
"ShareTarget<id: 2, device_name: test_name, full_name: "
"test_full_name, image_url: ://:0, device_id: test_device_id, "
"file_attachments_size: 0, text_attachments_size: 0, "
"wifi_credentials_attachments_size: 0, is_known: 0, is_incoming: 1, "
"for_self_share: 1, vendor_id: 0>"},
"is_known: 0, is_incoming: 1, for_self_share: 1, vendor_id: 0>"},
});
return *kShareTargetToStringTestData;