diff --git a/sharing/BUILD b/sharing/BUILD index 567b9948..d03c3f5a 100644 --- a/sharing/BUILD +++ b/sharing/BUILD @@ -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", diff --git a/sharing/fake_nearby_sharing_service.cc b/sharing/fake_nearby_sharing_service.cc index 2fcb7932..42538323 100644 --- a/sharing/fake_nearby_sharing_service.cc +++ b/sharing/fake_nearby_sharing_service.cc @@ -19,12 +19,17 @@ #include #include +#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(&identity_rpc_client_, + &preference_manager_)), + outgoing_targets_manager_(std::make_unique( + &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 status_codes_callback) { + absl::AnyInvocable 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 status_codes_callback) { + absl::AnyInvocable 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 status_codes_callback) { + absl::AnyInvocable 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 status_codes_callback) { + absl::AnyInvocable 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 status_codes_callback) { + absl::AnyInvocable 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); } } diff --git a/sharing/fake_nearby_sharing_service.h b/sharing/fake_nearby_sharing_service.h index 9aaf0376..2b56e41c 100644 --- a/sharing/fake_nearby_sharing_service.h +++ b/sharing/fake_nearby_sharing_service.h @@ -20,11 +20,16 @@ #include #include +#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 status_codes_callback) override; + absl::AnyInvocable status_codes_callback) override; // Unregisters the current send surface. void UnregisterSendSurface( TransferUpdateCallback* transfer_callback, - std::function status_codes_callback) override; + absl::AnyInvocable 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 status_codes_callback) override; + absl::AnyInvocable status_codes_callback) override; // Unregisters the current receive surface. void UnregisterReceiveSurface( TransferUpdateCallback* transfer_callback, - std::function status_codes_callback) override; + absl::AnyInvocable status_codes_callback) override; // Unregisters all foreground receive surfaces. void ClearForegroundReceiveSurfaces( - std::function status_codes_callback) override; + absl::AnyInvocable 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 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 observers_; @@ -147,6 +188,14 @@ class FakeNearbySharingService : public NearbySharingService { background_send_surface_map_; ObserverList foreground_receive_transfer_callbacks_; ObserverList 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 sync_manager_; + std::unique_ptr outgoing_targets_manager_; }; } // namespace sharing diff --git a/sharing/nearby_sharing_service.h b/sharing/nearby_sharing_service.h index f664367c..6460f3b8 100644 --- a/sharing/nearby_sharing_service.h +++ b/sharing/nearby_sharing_service.h @@ -20,14 +20,15 @@ #include #include +#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 status_codes_callback) = 0; + absl::AnyInvocable status_codes_callback) = 0; // Unregisters the current send surface. virtual void UnregisterSendSurface( TransferUpdateCallback* transfer_callback, - std::function status_codes_callback) = 0; + absl::AnyInvocable 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 status_codes_callback) = 0; + absl::AnyInvocable status_codes_callback) = 0; // Unregisters the current receive surface. virtual void UnregisterReceiveSurface( TransferUpdateCallback* transfer_callback, - std::function status_codes_callback) = 0; + absl::AnyInvocable status_codes_callback) = 0; // Unregisters all foreground receive surfaces. virtual void ClearForegroundReceiveSurfaces( - std::function status_codes_callback) = 0; + absl::AnyInvocable 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 diff --git a/sharing/nearby_sharing_service_impl.cc b/sharing/nearby_sharing_service_impl.cc index 5a59f2e8..caaa3c05 100644 --- a/sharing/nearby_sharing_service_impl.cc +++ b/sharing/nearby_sharing_service_impl.cc @@ -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 status_codes_callback) { + absl::AnyInvocable 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(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(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 status_codes_callback) { + absl::AnyInvocable 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 status_codes_callback) { + absl::AnyInvocable 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(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(vendor_id) << " because the current vendor_id is " << static_cast(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 status_codes_callback) { + absl::AnyInvocable 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 status_codes_callback) { + absl::AnyInvocable 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 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(); } diff --git a/sharing/nearby_sharing_service_impl.h b/sharing/nearby_sharing_service_impl.h index fc3eeae8..1e082a7b 100644 --- a/sharing/nearby_sharing_service_impl.h +++ b/sharing/nearby_sharing_service_impl.h @@ -122,19 +122,19 @@ class NearbySharingServiceImpl ShareTargetDiscoveredCallback* discovery_callback, SendSurfaceState state, Advertisement::BlockedVendorId blocked_vendor_id, bool disable_wifi_hotspot, - std::function status_codes_callback) override; + absl::AnyInvocable status_codes_callback) override; void UnregisterSendSurface( TransferUpdateCallback* transfer_callback, - std::function status_codes_callback) override; + absl::AnyInvocable status_codes_callback) override; void RegisterReceiveSurface( TransferUpdateCallback* transfer_callback, ReceiveSurfaceState state, Advertisement::BlockedVendorId vendor_id, - std::function status_codes_callback) override; + absl::AnyInvocable status_codes_callback) override; void UnregisterReceiveSurface( TransferUpdateCallback* transfer_callback, - std::function status_codes_callback) override; + absl::AnyInvocable status_codes_callback) override; void ClearForegroundReceiveSurfaces( - std::function status_codes_callback) override; + absl::AnyInvocable 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 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, diff --git a/sharing/outgoing_targets_manager.cc b/sharing/outgoing_targets_manager.cc index 86087baa..eeb490d4 100644 --- a/sharing/outgoing_targets_manager.cc +++ b/sharing/outgoing_targets_manager.cc @@ -342,4 +342,19 @@ void OutgoingTargetsManager::ForEachShareTarget( } } +std::vector OutgoingTargetsManager::GetBindingIds( + int64_t share_target_id) { + std::vector binding_ids; + auto session_it = outgoing_share_session_map_.find(share_target_id); + if (session_it == outgoing_share_session_map_.end()) { + return {}; + } + std::optional certificate = + session_it->second.certificate(); + if (certificate.has_value()) { + return {certificate->binding_id()}; + } + return {}; +} + } // namespace nearby::sharing diff --git a/sharing/outgoing_targets_manager.h b/sharing/outgoing_targets_manager.h index 6917f0e4..7da8d2b4 100644 --- a/sharing/outgoing_targets_manager.h +++ b/sharing/outgoing_targets_manager.h @@ -22,6 +22,7 @@ #include #include #include +#include #include "absl/base/nullability.h" #include "absl/container/flat_hash_map.h" @@ -94,6 +95,8 @@ class OutgoingTargetsManager { void ForEachShareTarget( absl::AnyInvocable callback); + std::vector 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. diff --git a/sharing/outgoing_targets_manager_test.cc b/sharing/outgoing_targets_manager_test.cc index 60965259..e6f696eb 100644 --- a/sharing/outgoing_targets_manager_test.cc +++ b/sharing/outgoing_targets_manager_test.cc @@ -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 binding_ids = + outgoing_targets_manager_.GetBindingIds(kShareTargetId); + EXPECT_THAT(binding_ids, ElementsAre(cert.binding_id())); +} + } // namespace } // namespace nearby::sharing