diff --git a/sharing/nearby_sharing_service_impl.cc b/sharing/nearby_sharing_service_impl.cc index 1d5999c8..111e0f00 100644 --- a/sharing/nearby_sharing_service_impl.cc +++ b/sharing/nearby_sharing_service_impl.cc @@ -3912,6 +3912,7 @@ std::optional NearbySharingServiceImpl::CreateShareTarget( target.device_name = std::move(*device_name); target.is_incoming = is_incoming; target.device_id = GetDeviceId(endpoint_id, certificate); + target.vendor_id = advertisement.vendor_id(); if (certificate.has_value()) { target.for_self_share = certificate->for_self_share(); @@ -3928,6 +3929,10 @@ std::optional NearbySharingServiceImpl::CreateShareTarget( target.image_url = std::nullopt; } } + // Always prefer the certificate's vendor ID if available. + if (certificate->unencrypted_metadata().has_vendor_id()) { + target.vendor_id = certificate->unencrypted_metadata().vendor_id(); + } target.is_known = true; } ShareTargetInfo& info = GetOrCreateShareTargetInfo(target, endpoint_id); diff --git a/sharing/nearby_sharing_service_impl_test.cc b/sharing/nearby_sharing_service_impl_test.cc index 79c9ada8..0aa6e7ef 100644 --- a/sharing/nearby_sharing_service_impl_test.cc +++ b/sharing/nearby_sharing_service_impl_test.cc @@ -4457,6 +4457,7 @@ TEST_F(NearbySharingServiceImplTest, CreateShareTarget) { ASSERT_TRUE(share_target.has_value()); EXPECT_EQ(kDeviceName, share_target->device_name); EXPECT_EQ(kDeviceType, share_target->type); + EXPECT_EQ(kVendorId, share_target->vendor_id); EXPECT_FALSE(share_target->for_self_share); } diff --git a/sharing/share_target.cc b/sharing/share_target.cc index 3643c9e6..858f4c37 100644 --- a/sharing/share_target.cc +++ b/sharing/share_target.cc @@ -150,6 +150,7 @@ std::string ShareTarget::ToString() const { 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)); + fmt.push_back(absl::StrFormat("vendor_id: %d", vendor_id)); return absl::StrCat("ShareTarget<", absl::StrJoin(fmt, ", "), ">"); } diff --git a/sharing/share_target.h b/sharing/share_target.h index f6dc8e9c..2e23fb12 100644 --- a/sharing/share_target.h +++ b/sharing/share_target.h @@ -70,6 +70,8 @@ struct ShareTarget { std::optional device_id; // True if the remote device is also owned by the current user. bool for_self_share = false; + // Vendor ID of the target. This can change over the lifetime of the target. + uint8_t vendor_id = 0; }; } // namespace sharing diff --git a/sharing/share_target_test.cc b/sharing/share_target_test.cc index 4e3cb90a..e20e7950 100644 --- a/sharing/share_target_test.cc +++ b/sharing/share_target_test.cc @@ -56,13 +56,13 @@ std::vector GetTestData() { "ShareTarget"}, + "for_self_share: 0, vendor_id: 0>"}, {share_target2, "ShareTarget"}, + "for_self_share: 1, vendor_id: 0>"}, }); return *kShareTargetToStringTestData;