diff --git a/spec.bs b/spec.bs index 7eb26cbe6..0f50cf25d 100644 --- a/spec.bs +++ b/spec.bs @@ -2917,7 +2917,7 @@ and a [=global object=] |global|: to |winner|'s [=generated bid/selected buyer and seller reporting ID=]. 1. If |igAd|'s [=interest group ad/buyer and seller reporting ID=] is not null, [=map/set=] |browserSignals|["{{ReportingBrowserSignals/buyerAndSellerReportingId}}"] to it. - 1. Otherwise, if the result of running [=query reporting ID k-anonymity count=] with |winner|'s + 1. Otherwise, if the result of running [=query reporting ID k-anonymity count=] with |winner|'s [=generated bid/interest group=], |igAd|, and null is true: 1. If |igAd|'s [=interest group ad/buyer and seller reporting ID=] is not null, [=map/set=] |browserSignals|["{{ReportingBrowserSignals/buyerAndSellerReportingId}}"] to it. @@ -3468,6 +3468,13 @@ A server auction response is a [=struct=] that contains auction resul : selected buyer and seller reporting id :: Null or a [=string=], initially null. When not null, this will be verified with the winning bid's [=generated bid/ad=]'s [=interest group ad/selectable buyer and seller reporting IDs=]. + : winner join candidates + :: Null or [=server auction join candidates=]. When not null, contains the + k-anonymity hashes corresponding to the winning bid and indicates which + k-anonymity hashes were used for k-anonymity enforcement on the server. + : ghost winner + :: Null or [=server auction ghost winner=]. When not null, contains information + about the non-k-anonymous winner of a server auction. : error :: Null or [=string=]. When not null, contains an error message from the auction executed on the trusted auction server. May be used to provide @@ -3485,6 +3492,57 @@ A server auction response is a [=struct=] that contains auction resul :: A [=map=] whose [=map/keys=] are [=origins=] and whose [=map/values=] are [=lists=] of [=urls=]. +server auction join candidates is a [=struct=] with the following [=struct/items=]: +
+ : ad render url hash + :: A [=SHA-256=] hash of the [=k-anonymity key=] for the ad in the winning bid, + as calculated using [=compute the key hash of ad=]. + : ad component render url hashes + :: A [=list=] of [=SHA-256=] hashes for each of the ad components in the + winning bid, as calculated using [=compute the key hash of component ad=]. + : reporting id hash + :: A [=SHA-256=] hash of the [=k-anonymity key=] for the reporting ID in the + winning bid, as calculated using [=compute the key hash of reporting ID=]. +
+ +server auction ghost winner is a [=struct=] with the following [=struct/items=]: +
+ : candidates + :: [=server auction join candidates=] associated with this winner. + : interest group owner + :: An [=origin=]. The non-k-anonymous winning bid's interest group [=interest group/owner=]. + : interest group name + :: A [=string=]. The non-k-anonymous winning bid's interest group [=interest group/name=]. + : ghost winner bid info + :: Null or a [=server auction ghost winner bid info=]. Contains information needed for + ghost winners in component auctions. +
+ +A server auction ghost winner bid info is a [=struct=] with the following [=struct/items=]: +
+ : ad render url + :: [=URL=]. The [=leading bid info/leading non-k-anon-enforced bid=]'s [=generated bid/ad descriptor=]'s [=ad descriptor/url=] from the + auction. + : ad components + :: A [=list=] of [=URLs=]. A list of the non-k-anonymous winning bid's + [=generated bid/ad component descriptors=]'s [=ad descriptor/urls=] from the + auction. + : modified_bid + :: [=bid with currency=]. Contains the non-k-anonymous winning bid's [=generated bid/modified bid=] + when not null, otherwise the non-k-anonymous winning bid's [=generated bid/bid=]. + : ad metadata + :: Null or a JSON [=string=]. Contains the component auction's non-k-anonymous winning bid's [=generated bid/ad=]. + : buyer reporting id + :: Null or a [=string=]. When not null, this will be verified with the non-k-anonymous winning bid's + [=generated bid/ad=]'s [=interest group ad/buyer reporting ID=]. + : buyer and seller reporting id + :: Null or a [=string=]. When not null, this will be verified with the non-k-anonymous winning bid's + [=generated bid/ad=]'s [=interest group ad/buyer and seller reporting ID=]. + : selected buyer and seller reporting id + :: Null or a [=string=], initially null. When not null, this will be verified with the non-k-anonymous winning bid's + [=generated bid/ad=]'s [=interest group ad/selectable buyer and seller reporting IDs=]. +
+ A server auction reporting info is a [=struct=] with the following [=struct/items=]:
: reporting url @@ -4921,7 +4979,7 @@ dictionary StorageInterestGroup : AuctionAdInterestGroup { is a one-time canonical [=string=] representation of a [=version 4 UUID=] that is uniquely associated with a single call to {{Window/navigator}}.{{Navigator/runAdAuction()}}. For multi-seller auctions, a distinct auction nonce can be uniquely associated with each of the -{{AuctionAdConfig/componentAuctions}}. The auction nonce(s) will need to be passed back in via a +{{AuctionAdConfig/componentAuctions}}. The auction nonce(s) will need to be passed back in via a subsequent call to {{Window/navigator}}.{{Navigator/runAdAuction()}} via the {{AuctionAdConfig}}. This is currently only needed for [=auctions=] that use [=additional bids=], in which the auction nonce is combined with a [=signed additional bid with metadata/seller nonce=] to construct a bid @@ -5401,17 +5459,17 @@ from querying the server during an auction. 1. If [=query k-anonymity cache=] for |adHashCode| returns true: 1. If |igAd|'s [=interest group ad/selectable buyer and seller reporting IDs=] is not null: 1. Let |kAnonRestrictedSelectableReportingIds| be a new empty [=list=] of [=string=]s. - 1. [=list/For each=] |selectableReportingId| in |igAd|'s + 1. [=list/For each=] |selectableReportingId| in |igAd|'s [=interest group ad/selectable buyer and seller reporting IDs=]: 1. Let |reportingHashCode| be the result of [=query reporting ID k-anonymity count=] - given |ig|, |igAd|, and |selectableReportingId|. + given |ig|, |igAd|, and |selectableReportingId|. 1. If [=query k-anonymity cache=] for |reportingHashCode| returns true, then [=list/append=] |selectableReportingId| to |kAnonRestrictedSelectableReportingIds|. 1. Set |igAd|'s [=interest group ad/selectable buyer and seller reporting IDs=] to |kAnonRestrictedSelectableReportingIds|. 1. [=list/Append=] |igAd| to |kAnonRestrictedIG|'s [=interest group/ads=]. 1. If |ig|'s [=interest group/ad components=] is not null: - 1. Set |kAnonRestrictedIG|'s [=interest group/ad components=] to an empty [=list=] of + 1. Set |kAnonRestrictedIG|'s [=interest group/ad components=] to an empty [=list=] of [=interest group ad=]. 1. [=list/For each=] |igAdComponent| of |ig|'s [=interest group/ad components=]: 1. Let |adComponentHashCode| be the result of running [=compute the key hash of component ad=] given |ig| and @@ -5476,11 +5534,11 @@ from querying the server during an auction. * "SelectedBuyerAndSellerReportId" * |middle| * The result of [=compute the key part for one of multiple reporting ids=] given |selectedReportingId| - * The result of [=compute the key part for one of multiple reporting ids=] given |igAd|'s + * The result of [=compute the key part for one of multiple reporting ids=] given |igAd|'s [=interest group ad/buyer and seller reporting ID=] * The result of [=compute the key part for one of multiple reporting ids=] given |igAd|'s [=interest group ad/buyer reporting ID=] - 1. Otherwise: + 1. Otherwise: 1. If |igAd|'s [=interest group ad/buyer and seller reporting ID=] is not null, set |keyString| to be the [=string/concatenation=] of the following strings separated with U+000A (LF): * "BuyerAndSellerReportId" @@ -7474,7 +7532,7 @@ The following algorithm will be added to the [[FETCH#fetching]] section: 1. Let |bidWithMetadata|'s [=signed additional bid with metadata/signed additional bid=] be |parts|[2]. 1. [=list/Append=] |bidWithMetadata| to |storedAdditionalBidsHeaders|[|auctionNonce|]. - 1. Otherwise, if |parts|'s [=list/size=] is 2: + 1. Otherwise, if |parts|'s [=list/size=] is 2: 1. Let |auctionNonce| be |parts|[0]. 1. If |auctionNonce|'s [=string/length=] is not 36, then [=iteration/continue=]. 1. Let |bidWithMetadata|'s [=signed additional bid with metadata/signed additional bid=] be @@ -7652,12 +7710,12 @@ dictionary ReportingBrowserSignals { and that value was [=query reporting ID k-anonymity count|jointly k-anonymous=] combined with interest group owner, bidding script URL, [=ad creative=] URL, and null. * Set if the wining bid had a [=generated bid/selected buyer and seller reporting ID=] and the - winning ad had a [=interest group ad/buyer and seller reporting ID=] set in its listing in the + winning ad had a [=interest group ad/buyer and seller reporting ID=] set in its listing in the interest group, and that value was [=query reporting ID k-anonymity count|jointly k-anonymous=] combined with interest group owner, bidding script URL, [=ad creative=] URL, the and winning bid's [=generated bid/selected buyer and seller reporting ID=].
{{ReportingBrowserSignals/selectedBuyerAndSellerReportingId}} -
A selected reporting id returned by "`generateBid()`". +
A selected reporting id returned by "`generateBid()`". Set if the winning bid had a [=generated bid/selected buyer and seller reporting ID=] set, and that value was [=query reporting ID k-anonymity count|jointly k-anonymous=] combined with [=interest group ad/buyer and seller reporting ID=], interest group owner, @@ -7726,7 +7784,7 @@ enum KAnonStatus { "passedAndEnforced", "passedNotEnforced", "belowThreshold", " and that value was [=query reporting ID k-anonymity count|jointly k-anonymous=] combined with interest group owner, bidding script URL, [=ad creative=] URL, and null. * Set if the wining bid had a [=generated bid/selected buyer and seller reporting ID=] and the - winning ad had a [=interest group ad/buyer reporting ID=] set in its listing in the + winning ad had a [=interest group ad/buyer reporting ID=] set in its listing in the interest group, and that value was [=query reporting ID k-anonymity count|jointly k-anonymous=] combined with interest group owner, bidding script URL, [=ad creative=] URL, [=interest group ad/buyer and seller reporting ID=], and @@ -7909,9 +7967,9 @@ An interest group ad is a [=struct=] with the following [=struct/item : buyer and seller reporting ID :: Null or a [=string=]. Will be passed in place of interest group name or [=interest group ad/buyer reporting ID=], or alongside the - [=generated bid/selected buyer and seller reporting ID=], to [=report win=] and - [=report result=], subject to [=k-anonymity=] checks. Also passed alongside - [=generated bid/selected buyer and seller reporting ID=] to `scoreAd()` if + [=generated bid/selected buyer and seller reporting ID=], to [=report win=] and + [=report result=], subject to [=k-anonymity=] checks. Also passed alongside + [=generated bid/selected buyer and seller reporting ID=] to `scoreAd()` if [=generated bid/selected buyer and seller reporting ID=] is present. Only meaningful in [=interest group/ads=], but ignored in [=interest group/ad components=]. : selectable buyer and seller reporting IDs @@ -8846,11 +8904,11 @@ result of [=evaluating a bidding script=], or an [=additional bid=] provided by in the auction. Must be null if the interest group making this bid has a null [=interest group/ad components=] field. : selected buyer and seller reporting ID - :: Null or [=string=]. The selected reporting id from the + :: Null or [=string=]. The selected reporting id from the [=interest group ad/selectable buyer and seller reporting IDs=] within the [=generated bid/interest group=]. If present, this will be: * Passed alongside [=interest group ad/buyer reporting ID=] and - [=interest group ad/buyer and seller reporting ID=] to [=report win=] + [=interest group ad/buyer and seller reporting ID=] to [=report win=] subject to [=k-anonymity=] checks. * Passed alongside [=interest group ad/buyer and seller reporting ID=] to [=report result=] subject to [=k-anonymity=] checks. @@ -8927,13 +8985,13 @@ To adjust bid list based on k-anonymity given a [=list=] of [=generat 1. [=Apply any component ads target to a bid=] given |bidCopy|. 1. [=list/Append=] |bidCopy| to |bidsToScore| 1. Let |selectedReportingId| be a [=string=]-or-null that is set to null. - 1. If |generatedBid|'s [=generated bid/selected buyer and seller reporting ID=] is not null, set + 1. If |generatedBid|'s [=generated bid/selected buyer and seller reporting ID=] is not null, set |selectedReportingId| to it. 1. Let |igAd| be the [=interest group ad=] from |generatedBid|'s [=generated bid/interest group=]'s [=interest group/ads=] whose [=interest group ad/render url=] is |generatedBid|'s [=generated bid/ad descriptor=]'s [=ad descriptor/url=]. 1. Let |isBidKAnon| be the result of [=query generated bid k-anonymity count=] given |generatedBid|. - 1. If |isBidKAnon| is true and running [=query reporting ID k-anonymity count=] with |generatedBid|'s + 1. If |isBidKAnon| is true and running [=query reporting ID k-anonymity count=] with |generatedBid|'s [=generated bid/interest group=], |igAd|, |selectedReportingId| is true: 1. [=list/Append=] |generatedBid| to |bidsToScore|.