Create PairingClient.

PiperOrigin-RevId: 883360595
This commit is contained in:
Francis Tsui
2026-03-13 15:17:24 -07:00
committed by Copybara-Service
parent 25ac6a21ab
commit 03fe80f0b8
9 changed files with 229 additions and 84 deletions
+20 -2
View File
@@ -50,6 +50,7 @@ cc_library(
visibility = [
"//location/nearby/apps/better_together/windows/nearby_share:__subpackages__",
"//location/nearby/cpp/sharing:__subpackages__",
"//location/nearby/sharing/lib:__subpackages__",
"//location/nearby/sharing/sdk/quick_share_server:__pkg__",
"//location/nearby/testing/nearby_native:__subpackages__",
"//sharing:__subpackages__",
@@ -88,6 +89,7 @@ cc_library(
visibility = [
"//location/nearby/apps/better_together/windows/nearby_share:__subpackages__",
"//location/nearby/cpp/sharing:__subpackages__",
"//location/nearby/sharing/lib:__subpackages__",
"//location/nearby/sharing/sdk/quick_share_server:__pkg__",
"//location/nearby/testing/nearby_native:__subpackages__",
"//sharing:__subpackages__",
@@ -120,6 +122,7 @@ cc_library(
visibility = [
"//location/nearby/apps/better_together/windows/nearby_share:__subpackages__",
"//location/nearby/cpp/sharing:__subpackages__",
"//location/nearby/sharing/lib:__subpackages__",
"//location/nearby/sharing/sdk/quick_share_server:__pkg__",
"//location/nearby/testing/nearby_native:__subpackages__",
"//sharing:__subpackages__",
@@ -270,6 +273,9 @@ cc_library(
name = "outgoing_targets_manager",
srcs = ["outgoing_targets_manager.cc"],
hdrs = ["outgoing_targets_manager.h"],
visibility = [
"//location/nearby/sharing/lib:__subpackages__",
],
deps = [
":share_session",
":thread_timer",
@@ -353,6 +359,7 @@ cc_library(
],
visibility = [
"//location/nearby/cpp/sharing:__subpackages__",
"//location/nearby/sharing/lib:__subpackages__",
"//location/nearby/sharing/sdk/quick_share_server:__pkg__",
"//location/nearby/testing/nearby_native:__subpackages__",
"//sharing:__subpackages__",
@@ -440,22 +447,32 @@ cc_library(
":attachments",
":connection_types",
":nearby_sharing_service",
":outgoing_targets_manager",
":share_session",
":transfer_metadata",
":types",
"//internal/base",
"//internal/base:file_path",
"//internal/platform:types",
"//internal/test",
"//location/nearby/sharing/lib/rpc:fake_nearby_share_client",
"//location/nearby/sharing/lib/rpc:sharing_rpc_client",
"//location/nearby/sharing/lib/sync:sync_manager",
"//sharing/analytics",
"//sharing/certificates",
"//sharing/common:enum",
"//sharing/internal/api:platform",
"//sharing/internal/public:logging",
"//sharing/local_device_data",
"//sharing/internal/test:nearby_test",
"//sharing/proto:enums_cc_proto",
"@com_google_absl//absl/algorithm:container",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/container:flat_hash_set",
"@com_google_absl//absl/functional:any_invocable",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/synchronization",
"@com_google_absl//absl/time",
],
)
@@ -1001,10 +1018,11 @@ cc_test(
":test_support",
":transfer_metadata",
":types",
"//internal/base:file_path",
"//internal/platform/implementation:platform_impl",
"//internal/test",
"//sharing/analytics",
"//sharing/certificates",
"//sharing/certificates:test_support",
"@com_github_protobuf_matchers//protobuf-matchers",
"@com_google_absl//absl/strings:string_view",
"@com_google_googletest//:gtest_main",
+57 -30
View File
@@ -19,12 +19,17 @@
#include <memory>
#include <string>
#include "location/nearby/sharing/lib/sync/sync_manager.h"
#include "absl/functional/any_invocable.h"
#include "internal/base/observer_list.h"
#include "internal/platform/clock.h"
#include "sharing/advertisement.h"
#include "sharing/attachment_container.h"
#include "sharing/local_device_data/nearby_share_local_device_data_manager.h"
#include "sharing/certificates/nearby_share_certificate_manager.h"
#include "sharing/nearby_sharing_service.h"
#include "sharing/nearby_sharing_settings.h"
#include "sharing/outgoing_share_session.h"
#include "sharing/outgoing_targets_manager.h"
#include "sharing/share_target.h"
#include "sharing/share_target_discovered_callback.h"
#include "sharing/transfer_metadata.h"
@@ -34,6 +39,22 @@
namespace nearby {
namespace sharing {
FakeNearbySharingService::FakeNearbySharingService()
: service_thread_(&clock_, /*count=*/1),
analytics_recorder_(/*vendor_id=*/0, /*event_logger=*/nullptr),
sync_manager_(std::make_unique<SyncManager>(&identity_rpc_client_,
&preference_manager_)),
outgoing_targets_manager_(std::make_unique<OutgoingTargetsManager>(
&clock_, &service_thread_, &connections_manager_,
&analytics_recorder_,
[this](const ShareTarget& target) {
FireShareTargetDiscovered(target);
},
[this](const ShareTarget& target) { FireShareTargetUpdated(target); },
[this](const ShareTarget& target) { FireShareTargetLost(target); },
/*transfer_update_callback=*/
[](OutgoingShareSession&, const TransferMetadata&) {})) {}
void FakeNearbySharingService::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
@@ -54,7 +75,7 @@ void FakeNearbySharingService::RegisterSendSurface(
TransferUpdateCallback* transfer_callback,
ShareTargetDiscoveredCallback* discovery_callback, SendSurfaceState state,
Advertisement::BlockedVendorId blocked_vendor_id, bool disable_wifi_hotspot,
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
if (state == SendSurfaceState::kForeground) {
foreground_send_surface_map_.insert(
{transfer_callback,
@@ -73,7 +94,7 @@ void FakeNearbySharingService::RegisterSendSurface(
// Unregisters the current send surface.
void FakeNearbySharingService::UnregisterSendSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
foreground_send_surface_map_.erase(transfer_callback);
background_send_surface_map_.erase(transfer_callback);
@@ -84,7 +105,7 @@ void FakeNearbySharingService::UnregisterSendSurface(
void FakeNearbySharingService::RegisterReceiveSurface(
TransferUpdateCallback* transfer_callback, ReceiveSurfaceState state,
Advertisement::BlockedVendorId vendor_id,
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
if (state == ReceiveSurfaceState::kForeground) {
foreground_receive_transfer_callbacks_.AddObserver(transfer_callback);
} else {
@@ -97,7 +118,7 @@ void FakeNearbySharingService::RegisterReceiveSurface(
// Unregisters the current receive surface.
void FakeNearbySharingService::UnregisterReceiveSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
foreground_receive_transfer_callbacks_.RemoveObserver(transfer_callback);
background_receive_transfer_callbacks_.RemoveObserver(transfer_callback);
status_codes_callback(StatusCodes::kOk);
@@ -105,7 +126,7 @@ void FakeNearbySharingService::UnregisterReceiveSurface(
// Unregisters all foreground receive surfaces.
void FakeNearbySharingService::ClearForegroundReceiveSurfaces(
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
status_codes_callback(StatusCodes::kOk);
}
@@ -148,11 +169,6 @@ std::string FakeNearbySharingService::Dump() const { return ""; }
NearbyShareSettings* FakeNearbySharingService::GetSettings() { return nullptr; }
NearbyShareLocalDeviceDataManager*
FakeNearbySharingService::GetLocalDeviceDataManager() {
return nullptr;
}
NearbyShareContactManager* FakeNearbySharingService::GetContactManager() {
return nullptr;
}
@@ -166,6 +182,14 @@ AccountManager* FakeNearbySharingService::GetAccountManager() {
return nullptr;
}
Clock& FakeNearbySharingService::GetClock() { return clock_; }
SyncManager& FakeNearbySharingService::sync_manager() { return *sync_manager_; }
OutgoingTargetsManager& FakeNearbySharingService::outgoing_targets_manager() {
return *outgoing_targets_manager_;
}
void FakeNearbySharingService::FireHighVisibilityChangeRequested() {
for (auto& observer : observers_.GetObservers()) {
observer->OnHighVisibilityChangeRequested();
@@ -229,28 +253,31 @@ void FakeNearbySharingService::FireReceiveTransferUpdate(
// Fire discovery events.
void FakeNearbySharingService::FireShareTargetDiscovered(
SendSurfaceState state, ShareTarget share_target) {
if (state == SendSurfaceState::kForeground) {
for (auto& entry : foreground_send_surface_map_) {
entry.second.OnShareTargetDiscovered(share_target);
}
} else {
for (auto& entry : background_send_surface_map_) {
entry.second.OnShareTargetDiscovered(share_target);
}
ShareTarget share_target) {
for (auto& entry : foreground_send_surface_map_) {
entry.second.OnShareTargetDiscovered(share_target);
}
for (auto& entry : background_send_surface_map_) {
entry.second.OnShareTargetDiscovered(share_target);
}
}
void FakeNearbySharingService::FireShareTargetLost(SendSurfaceState state,
ShareTarget share_target) {
if (state == SendSurfaceState::kForeground) {
for (auto& entry : foreground_send_surface_map_) {
entry.second.OnShareTargetLost(share_target);
}
} else {
for (auto& entry : background_send_surface_map_) {
entry.second.OnShareTargetLost(share_target);
}
void FakeNearbySharingService::FireShareTargetUpdated(
ShareTarget share_target) {
for (auto& entry : foreground_send_surface_map_) {
entry.second.OnShareTargetUpdated(share_target);
}
for (auto& entry : background_send_surface_map_) {
entry.second.OnShareTargetUpdated(share_target);
}
}
void FakeNearbySharingService::FireShareTargetLost(ShareTarget share_target) {
for (auto& entry : foreground_send_surface_map_) {
entry.second.OnShareTargetLost(share_target);
}
for (auto& entry : background_send_surface_map_) {
entry.second.OnShareTargetLost(share_target);
}
}
+59 -10
View File
@@ -20,11 +20,16 @@
#include <memory>
#include <string>
#include "location/nearby/sharing/lib/rpc/sharing_rpc_client.h"
#include "absl/container/flat_hash_map.h"
#include "absl/functional/any_invocable.h"
#include "absl/time/time.h"
#include "internal/base/observer_list.h"
#include "internal/platform/clock.h"
#include "sharing/advertisement.h"
#include "sharing/attachment_container.h"
#include "sharing/local_device_data/nearby_share_local_device_data_manager.h"
#include "sharing/certificates/nearby_share_certificate_manager.h"
#include "sharing/internal/api/preference_manager.h"
#include "sharing/nearby_sharing_service.h"
#include "sharing/nearby_sharing_settings.h"
#include "sharing/share_target.h"
@@ -32,12 +37,21 @@
#include "sharing/transfer_metadata.h"
#include "sharing/transfer_update_callback.h"
#include "sharing/wrapped_share_target_discovered_callback.h"
#include "internal/test/fake_clock.h"
#include "internal/test/fake_task_runner.h"
#include "location/nearby/sharing/lib/rpc/fake_nearby_share_client.h"
#include "location/nearby/sharing/lib/sync/sync_manager.h"
#include "sharing/analytics/analytics_recorder.h"
#include "sharing/fake_nearby_connections_manager.h"
#include "sharing/internal/test/fake_preference_manager.h"
#include "sharing/outgoing_targets_manager.h"
namespace nearby {
namespace sharing {
class FakeNearbySharingService : public NearbySharingService {
public:
FakeNearbySharingService();
~FakeNearbySharingService() override = default;
void AddObserver(Observer* observer) override;
@@ -54,27 +68,27 @@ class FakeNearbySharingService : public NearbySharingService {
ShareTargetDiscoveredCallback* discovery_callback, SendSurfaceState state,
Advertisement::BlockedVendorId blocked_vendor_id,
bool disable_wifi_hotspot,
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
// Unregisters the current send surface.
void UnregisterSendSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
// Registers a receiver surface for handling payload transfer status.
void RegisterReceiveSurface(
TransferUpdateCallback* transfer_callback, ReceiveSurfaceState state,
Advertisement::BlockedVendorId vendor_id,
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
// Unregisters the current receive surface.
void UnregisterReceiveSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
// Unregisters all foreground receive surfaces.
void ClearForegroundReceiveSurfaces(
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
// Returns true if there is an ongoing file transfer.
bool IsTransferring() const override;
@@ -104,12 +118,39 @@ class FakeNearbySharingService : public NearbySharingService {
status_codes_callback) override;
std::string Dump() const override;
bool IsBluetoothPresent() const override { return true; }
bool IsBluetoothPowered() const override { return true; }
bool IsExtendedAdvertisingSupported() const override { return true; }
bool IsLanConnected() const override { return true; }
std::string GetQrCodeUrl() const override { return ""; }
void SetVisibility(
proto::DeviceVisibility visibility, absl::Duration expiration,
absl::AnyInvocable<void(StatusCodes status_code) &&> callback) override {}
void UpdateFilePathsInProgress(bool update_file_paths) override {}
NearbyShareSettings* GetSettings() override;
NearbyShareLocalDeviceDataManager* GetLocalDeviceDataManager() override;
NearbyShareContactManager* GetContactManager() override;
NearbyShareCertificateManager* GetCertificateManager() override;
AccountManager* GetAccountManager() override;
Clock& GetClock() override;
void SetAlternateServiceUuidForDiscovery(
uint16_t alternate_service_uuid) override {}
SyncManager& sync_manager() override;
OutgoingTargetsManager& outgoing_targets_manager() override;
nearby::sharing::api::IdentityRpcClient& fake_identity_rpc_client() {
return identity_rpc_client_;
}
nearby::sharing::api::PreferenceManager& fake_preference_manager() {
return preference_manager_;
}
FakeNearbyConnectionsManager& fake_nearby_connections_manager() {
return connections_manager_;
}
FakeTaskRunner& fake_task_runner() { return service_thread_; }
analytics::AnalyticsRecorder& analytics_recorder() {
return analytics_recorder_;
}
// Fake methods to support test scenarios.
@@ -130,9 +171,9 @@ class FakeNearbySharingService : public NearbySharingService {
TransferMetadata transfer_metadata);
// Fire discovery events.
void FireShareTargetDiscovered(SendSurfaceState state,
ShareTarget share_target);
void FireShareTargetLost(SendSurfaceState state, ShareTarget share_target);
void FireShareTargetDiscovered(ShareTarget share_target);
void FireShareTargetUpdated(ShareTarget share_target);
void FireShareTargetLost(ShareTarget share_target);
private:
ObserverList<Observer> observers_;
@@ -147,6 +188,14 @@ class FakeNearbySharingService : public NearbySharingService {
background_send_surface_map_;
ObserverList<TransferUpdateCallback> foreground_receive_transfer_callbacks_;
ObserverList<TransferUpdateCallback> background_receive_transfer_callbacks_;
FakeClock clock_;
FakeTaskRunner service_thread_;
FakeNearbyConnectionsManager connections_manager_;
analytics::AnalyticsRecorder analytics_recorder_;
FakePreferenceManager preference_manager_;
FakeNearbyIdentityClient identity_rpc_client_;
std::unique_ptr<SyncManager> sync_manager_;
std::unique_ptr<OutgoingTargetsManager> outgoing_targets_manager_;
};
} // namespace sharing
+9 -7
View File
@@ -20,14 +20,15 @@
#include <memory>
#include <string>
#include "location/nearby/sharing/lib/sync/sync_manager.h"
#include "absl/functional/any_invocable.h"
#include "absl/time/time.h"
#include "internal/platform/clock.h"
#include "sharing/advertisement.h"
#include "sharing/attachment_container.h"
#include "sharing/certificates/nearby_share_certificate_manager.h"
#include "sharing/local_device_data/nearby_share_local_device_data_manager.h"
#include "sharing/nearby_sharing_settings.h"
#include "sharing/outgoing_targets_manager.h"
#include "sharing/share_target_discovered_callback.h"
#include "sharing/transfer_update_callback.h"
@@ -140,28 +141,28 @@ class NearbySharingService {
ShareTargetDiscoveredCallback* discovery_callback, SendSurfaceState state,
Advertisement::BlockedVendorId blocked_vendor_id,
bool disable_wifi_hotspot,
std::function<void(StatusCodes)> status_codes_callback) = 0;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) = 0;
// Unregisters the current send surface.
virtual void UnregisterSendSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) = 0;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) = 0;
// Registers a receiver surface for handling payload transfer status, and
// advertises the vendor ID specified by |vendor_id|.
virtual void RegisterReceiveSurface(
TransferUpdateCallback* transfer_callback, ReceiveSurfaceState state,
Advertisement::BlockedVendorId vendor_id,
std::function<void(StatusCodes)> status_codes_callback) = 0;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) = 0;
// Unregisters the current receive surface.
virtual void UnregisterReceiveSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) = 0;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) = 0;
// Unregisters all foreground receive surfaces.
virtual void ClearForegroundReceiveSurfaces(
std::function<void(StatusCodes)> status_codes_callback) = 0;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) = 0;
// Returns true if there is an ongoing file transfer.
virtual bool IsTransferring() const = 0;
@@ -215,13 +216,14 @@ class NearbySharingService {
virtual void UpdateFilePathsInProgress(bool update_file_paths) = 0;
virtual NearbyShareSettings* GetSettings() = 0;
virtual NearbyShareLocalDeviceDataManager* GetLocalDeviceDataManager() = 0;
virtual NearbyShareContactManager* GetContactManager() = 0;
virtual NearbyShareCertificateManager* GetCertificateManager() = 0;
virtual AccountManager* GetAccountManager() = 0;
virtual Clock& GetClock() = 0;
virtual void SetAlternateServiceUuidForDiscovery(
uint16_t alternate_service_uuid) = 0;
virtual SyncManager& sync_manager() = 0;
virtual OutgoingTargetsManager& outgoing_targets_manager() = 0;
};
} // namespace nearby::sharing
+24 -29
View File
@@ -430,16 +430,16 @@ void NearbySharingServiceImpl::RegisterSendSurface(
TransferUpdateCallback* transfer_callback,
ShareTargetDiscoveredCallback* discovery_callback, SendSurfaceState state,
BlockedVendorId blocked_vendor_id, bool disable_wifi_hotspot,
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
RunOnNearbySharingServiceThread(
"api_register_send_surface",
[this, transfer_callback, discovery_callback, state, blocked_vendor_id,
disable_wifi_hotspot,
status_codes_callback = std::move(status_codes_callback)]() {
status_codes_callback = std::move(status_codes_callback)]() mutable {
if (state != SendSurfaceState::kForeground &&
state != SendSurfaceState::kBackground) {
LOG(ERROR) << "Invalid SendSurfaceState: " << static_cast<int>(state);
std::move(status_codes_callback)(StatusCodes::kInvalidArgument);
status_codes_callback(StatusCodes::kInvalidArgument);
return;
}
DCHECK(transfer_callback);
@@ -456,7 +456,7 @@ void NearbySharingServiceImpl::RegisterSendSurface(
background_send_surface_map_.contains(transfer_callback)) {
VLOG(1) << "RegisterSendSurface failed. Already registered for a "
"different state.";
std::move(status_codes_callback)(StatusCodes::kInvalidArgument);
status_codes_callback(StatusCodes::kInvalidArgument);
return;
}
BlockedVendorId sending_id = GetSendingVendorId();
@@ -464,7 +464,7 @@ void NearbySharingServiceImpl::RegisterSendSurface(
LOG(INFO) << "RegisterSendSurface failed. Already registered to "
"block a different vendor ID "
<< static_cast<uint32_t>(sending_id);
std::move(status_codes_callback)(StatusCodes::kInvalidArgument);
status_codes_callback(StatusCodes::kInvalidArgument);
return;
}
WrappedShareTargetDiscoveredCallback wrapped_callback(
@@ -483,8 +483,7 @@ void NearbySharingServiceImpl::RegisterSendSurface(
VLOG(1)
<< "Ignore registering (and unregistering if registered) send "
"surface because we're currently receiving files.";
std::move(status_codes_callback)(
StatusCodes::kTransferAlreadyInProgress);
status_codes_callback(StatusCodes::kTransferAlreadyInProgress);
return;
}
@@ -538,17 +537,17 @@ void NearbySharingServiceImpl::RegisterSendSurface(
<< background_send_surface_map_.size();
InvalidateSendSurfaceState();
std::move(status_codes_callback)(StatusCodes::kOk);
status_codes_callback(StatusCodes::kOk);
});
}
void NearbySharingServiceImpl::UnregisterSendSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
RunOnNearbySharingServiceThread(
"api_unregister_send_surface",
[this, transfer_callback,
status_codes_callback = std::move(status_codes_callback)]() {
status_codes_callback = std::move(status_codes_callback)]() mutable {
StatusCodes status_codes =
InternalUnregisterSendSurface(transfer_callback);
@@ -557,23 +556,23 @@ void NearbySharingServiceImpl::UnregisterSendSurface(
<< ", background_send_surface_map_:"
<< background_send_surface_map_.size();
std::move(status_codes_callback)(status_codes);
status_codes_callback(status_codes);
});
}
void NearbySharingServiceImpl::RegisterReceiveSurface(
TransferUpdateCallback* transfer_callback, ReceiveSurfaceState state,
BlockedVendorId vendor_id,
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
RunOnNearbySharingServiceThread(
"api_register_receive_surface",
[this, transfer_callback, state, vendor_id,
status_codes_callback = std::move(status_codes_callback)]() {
status_codes_callback = std::move(status_codes_callback)]() mutable {
if (state != ReceiveSurfaceState::kForeground &&
state != ReceiveSurfaceState::kBackground) {
LOG(ERROR) << "Invalid ReceiveSurfaceState: "
<< static_cast<int>(state);
std::move(status_codes_callback)(StatusCodes::kInvalidArgument);
status_codes_callback(StatusCodes::kInvalidArgument);
return;
}
DCHECK(transfer_callback);
@@ -591,14 +590,14 @@ void NearbySharingServiceImpl::RegisterReceiveSurface(
if (GetReceiveCallbacksMapFromState(state).contains(
transfer_callback)) {
VLOG(1) << "transfer callback already registered, ignoring";
std::move(status_codes_callback)(StatusCodes::kOk);
status_codes_callback(StatusCodes::kOk);
return;
}
if (foreground_receive_callbacks_map_.contains(transfer_callback) ||
background_receive_callbacks_map_.contains(transfer_callback)) {
LOG(ERROR) << ": transfer callback already registered but for a "
"different state.";
std::move(status_codes_callback)(StatusCodes::kInvalidArgument);
status_codes_callback(StatusCodes::kInvalidArgument);
return;
}
if (ShouldBlockSurfaceRegistration(vendor_id,
@@ -609,7 +608,7 @@ void NearbySharingServiceImpl::RegisterReceiveSurface(
<< static_cast<uint32_t>(vendor_id)
<< " because the current vendor_id is "
<< static_cast<uint32_t>(GetReceivingVendorId());
std::move(status_codes_callback)(StatusCodes::kInvalidArgument);
status_codes_callback(StatusCodes::kInvalidArgument);
return;
}
@@ -652,33 +651,34 @@ void NearbySharingServiceImpl::RegisterReceiveSurface(
certificate_manager_->ForceUploadPrivateCertificates();
}
InvalidateReceiveSurfaceState();
std::move(status_codes_callback)(StatusCodes::kOk);
status_codes_callback(StatusCodes::kOk);
});
}
void NearbySharingServiceImpl::UnregisterReceiveSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
RunOnNearbySharingServiceThread(
"api_unregister_receive_surface",
[this, transfer_callback,
status_codes_callback = std::move(status_codes_callback)]() {
status_codes_callback = std::move(status_codes_callback)]() mutable {
StatusCodes status_codes =
InternalUnregisterReceiveSurface(transfer_callback);
VLOG(1) << "UnregisterReceiveSurface: foreground_receive_callbacks_:"
<< foreground_receive_callbacks_map_.size()
<< ", background_receive_callbacks_:"
<< background_receive_callbacks_map_.size();
std::move(status_codes_callback)(status_codes);
status_codes_callback(status_codes);
return;
});
}
void NearbySharingServiceImpl::ClearForegroundReceiveSurfaces(
std::function<void(StatusCodes)> status_codes_callback) {
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) {
RunOnNearbySharingServiceThread(
"api_clear_foreground_receive_surfaces",
[this, status_codes_callback = std::move(status_codes_callback)]() {
[this,
status_codes_callback = std::move(status_codes_callback)]() mutable {
std::vector<TransferUpdateCallback*> fg_receivers;
for (const auto& callback : foreground_receive_callbacks_map_) {
fg_receivers.push_back(callback.first);
@@ -689,7 +689,7 @@ void NearbySharingServiceImpl::ClearForegroundReceiveSurfaces(
if (InternalUnregisterReceiveSurface(callback) != StatusCodes::kOk)
status = StatusCodes::kError;
}
std::move(status_codes_callback)(status);
status_codes_callback(status);
});
}
@@ -976,11 +976,6 @@ NearbyShareSettings* NearbySharingServiceImpl::GetSettings() {
return settings_.get();
}
NearbyShareLocalDeviceDataManager*
NearbySharingServiceImpl::GetLocalDeviceDataManager() {
return local_device_data_manager_.get();
}
NearbyShareContactManager* NearbySharingServiceImpl::GetContactManager() {
return contact_manager_.get();
}
+9 -6
View File
@@ -122,19 +122,19 @@ class NearbySharingServiceImpl
ShareTargetDiscoveredCallback* discovery_callback, SendSurfaceState state,
Advertisement::BlockedVendorId blocked_vendor_id,
bool disable_wifi_hotspot,
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
void UnregisterSendSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
void RegisterReceiveSurface(
TransferUpdateCallback* transfer_callback, ReceiveSurfaceState state,
Advertisement::BlockedVendorId vendor_id,
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
void UnregisterReceiveSurface(
TransferUpdateCallback* transfer_callback,
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
void ClearForegroundReceiveSurfaces(
std::function<void(StatusCodes)> status_codes_callback) override;
absl::AnyInvocable<void(StatusCodes)> status_codes_callback) override;
bool IsTransferring() const override;
bool IsScanning() const override;
bool IsBluetoothPresent() const override;
@@ -159,7 +159,6 @@ class NearbySharingServiceImpl
proto::DeviceVisibility visibility, absl::Duration expiration,
absl::AnyInvocable<void(StatusCodes status_code) &&> callback) override;
NearbyShareSettings* GetSettings() override;
NearbyShareLocalDeviceDataManager* GetLocalDeviceDataManager() override;
NearbyShareContactManager* GetContactManager() override;
NearbyShareCertificateManager* GetCertificateManager() override;
AccountManager* GetAccountManager() override;
@@ -168,6 +167,10 @@ class NearbySharingServiceImpl
uint16_t alternate_service_uuid) override {
alternate_service_uuid_ = alternate_service_uuid;
}
SyncManager& sync_manager() override { return sync_manager_; }
OutgoingTargetsManager& outgoing_targets_manager() override {
return outgoing_targets_manager_;
}
// NearbyConnectionsManager::IncomingConnectionListener:
void OnIncomingConnection(absl::string_view endpoint_id,
+15
View File
@@ -342,4 +342,19 @@ void OutgoingTargetsManager::ForEachShareTarget(
}
}
std::vector<std::string> OutgoingTargetsManager::GetBindingIds(
int64_t share_target_id) {
std::vector<std::string> binding_ids;
auto session_it = outgoing_share_session_map_.find(share_target_id);
if (session_it == outgoing_share_session_map_.end()) {
return {};
}
std::optional<NearbyShareDecryptedPublicCertificate> certificate =
session_it->second.certificate();
if (certificate.has_value()) {
return {certificate->binding_id()};
}
return {};
}
} // namespace nearby::sharing
+3
View File
@@ -22,6 +22,7 @@
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "absl/base/nullability.h"
#include "absl/container/flat_hash_map.h"
@@ -94,6 +95,8 @@ class OutgoingTargetsManager {
void ForEachShareTarget(
absl::AnyInvocable<void(const ShareTarget&)> callback);
std::vector<std::string> GetBindingIds(int64_t share_target_id);
private:
// If an existing target matching either endpoint_id or share_target.device_id
// is found, the existing share target id is returned.
+33
View File
@@ -27,6 +27,8 @@
#include "internal/test/fake_task_runner.h"
#include "sharing/analytics/analytics_recorder.h"
#include "sharing/attachment_container.h"
#include "sharing/certificates/nearby_share_decrypted_public_certificate.h"
#include "sharing/certificates/test_util.h"
#include "sharing/fake_nearby_connections_manager.h"
#include "sharing/nearby_connection_impl.h"
#include "sharing/nearby_connections_types.h"
@@ -781,5 +783,36 @@ TEST_F(OutgoingTargetsManagerTest, AllTargetsLostConnectedSessionsNotClosed) {
nullptr);
}
TEST_F(OutgoingTargetsManagerTest, GetBindingIds_NonExistentTarget) {
EXPECT_TRUE(outgoing_targets_manager_.GetBindingIds(1234).empty());
}
TEST_F(OutgoingTargetsManagerTest, GetBindingIds_NoCertificate) {
constexpr int kShareTargetId = 1234;
constexpr absl::string_view kEndpointId = "endpoint_id";
ShareTarget target;
target.id = kShareTargetId;
outgoing_targets_manager_.OnShareTargetDiscovered(
target, kEndpointId, /*certificate=*/std::nullopt);
EXPECT_TRUE(outgoing_targets_manager_.GetBindingIds(kShareTargetId).empty());
}
TEST_F(OutgoingTargetsManagerTest, GetBindingIds_WithCertificate) {
constexpr int kShareTargetId = 1234;
constexpr absl::string_view kEndpointId = "endpoint_id";
ShareTarget target;
target.id = kShareTargetId;
NearbyShareDecryptedPublicCertificate cert =
GetNearbyShareTestDecryptedPublicCertificate();
outgoing_targets_manager_.OnShareTargetDiscovered(target, kEndpointId, cert);
std::vector<std::string> binding_ids =
outgoing_targets_manager_.GetBindingIds(kShareTargetId);
EXPECT_THAT(binding_ids, ElementsAre(cert.binding_id()));
}
} // namespace
} // namespace nearby::sharing