From 8341eed0721e4c06fac58cb7966733cef5c7a5ef Mon Sep 17 00:00:00 2001 From: Russ Hamilton Date: Mon, 9 Sep 2024 15:20:16 +0000 Subject: [PATCH 01/11] Add payload optimization --- spec.bs | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/spec.bs b/spec.bs index 2cfca488..294c0b56 100644 --- a/spec.bs +++ b/spec.bs @@ -2865,6 +2865,12 @@ partial interface Navigator { dictionary AdAuctionDataConfig { required USVString seller; required USVString coordinatorOrigin; + unsigned long requestSize; + record perBuyerConfig; +}; + +dictionary AdAuctionDataBuyerConfig { + unsigned long targetSize; }; dictionary AdAuctionData { @@ -2889,6 +2895,8 @@ A server auction interest group is a [=struct=] with the following [= from the [=interest group/ad components=] field. : browser signals :: A [=server auction browser signals=]. + : priority + :: A {{double}} A server auction browser signals is a [=struct=] with the following [=struct/items=]: @@ -2931,11 +2939,12 @@ A server auction request context is a [=struct=] with the following [
-The getInterestGroupAdAuctionData(|config|) method steps are: +The getInterestGroupAdAuctionData(|configIDL|) method steps are: 1. Let |global| be [=this=]'s [=relevant global object=]. 1. If |global|'s [=associated Document=] is not [=allowed to use=] the "[=run-ad-auction=]" [=policy-controlled feature=], then [=exception/throw=] a "{{NotAllowedError}}" {{DOMException}}. +1. Let |config| be the result of running [=parse and verify ad auction config=] on |configIDL|. 1. Let |p| be [=a new promise=]. 1. Let |queue| be the result of [=starting a new parallel queue=]. 1. [=parallel queue/enqueue steps|Enqueue the following steps=] to |queue|: @@ -2983,6 +2992,8 @@ The getInterestGroupAdAuctionData(|config|) meth :: |components| : [=server auction interest group/browser signals=] :: |browserSignals| + : [=server auction interest group/priority=] + :: |ig|'s [=interest group/priority=] 1. [=list/Append=] |serverIg| to |igMap|[|owner|]. 1. Let |result| be a new {{AdAuctionData}}. 1. Let |requestId| be the [=string representation=] of a [=version 4 UUID=]. @@ -3003,6 +3014,41 @@ The getInterestGroupAdAuctionData(|config|) meth
+
+ To parse and verify ad auction config given an {{AdAuctionDataConfig}} |configIDL|: + + 1. Let |config| be a new [=auction data config=] with the following [=struct/items=]: + : [=auction data config/seller=] + :: The result of running [=parsing an https origin=] on + |configIDL|["{{AdAuctionDataConfig/seller}}"] + : [=auction data config/coordinator=] + :: The result of running [=parsing an https origin=] on + |configIDL|["{{AdAuctionDataConfig/coordinatorOrigin}}"] + : [=auction data config/request size=] + :: |configIDL|["{{AdAuctionDataConfig/requestSize}}"] + : [=auction data config/per buyer config=] + :: The result of running [=parse per buyer auction data configs=] on + |configIDL|["{{AdAuctionDataConfig/perBuyerConfig}}"] + 1. If |config|'s [=auction data config/seller=] or [=auction data config/coordinator=] + fields are failure, then [=exception/throw=] a {{TypeError}}. + 1. Return |config|. +
+ +
+ To parse per buyer auction data configs given an + {{AdAuctionDataBuyerConfig}} |perBuyerConfigIDL|: + 1. Let |configs| be a new [=ordered map=] whose [=map/keys=] are [=origins=] + and whose [=map/values=] are [=auction data config=] + 1. [=map/For each=] |buyerIDL| → |buyerConfigIDL| of |perBuyerConfigIDL|: + 1. Let |buyerConfig| be a new [=auction data buyer config=] with the following [=struct/items=]: + : [=auction data buyer config/size=] + :: |buyerConfigIDL|["{{AdAuctionDataBuyerConfig/targetSize}}"] + 1. Let |buyer| be the result of running [=parsing an https origin=] on |buyerIDL|. + 1. If |buyer| is failure, then [=exception/throw=] a {{TypeError}}. + 1. [=map/Set=] configs[|buyer|] to |buyerConfig|. + 1. Return |configs|. +
+ # Reporting # {#reporting} ## {{InterestGroupBiddingAndScoringScriptRunnerGlobalScope/forDebuggingOnly}} ## {#for-debugging-only-header} @@ -7284,6 +7330,31 @@ for a given [=k-anonymity key=]. These records are stored in the [=user agent=]. :: The [=moment=] when the k-anonymity status in this record was last fetched. +

auction data config

+ +An auction data config is a [=struct=] with the following [=struct/items=]: + +
+ : seller + :: An [=origin=]. + The origin of the seller running the ad auction. The [=origin/scheme=] must be "`https`". + : coordinator + :: The origin of the coordinator hosting public encryption keys for the server + running the ad auction. The [=origin/scheme=] must be "`https`". + : request size + :: {{unsigned long}} or null. An optional field, containing the desired size + for the returned encrypted request blob. + : per buyer config + :: A [=map=] whose [=map/keys] are [=origins=] and [=map/values=] are [=auction data buyer config=]. +
+ +An auction data buyer config is a [=struct=] with the following [=struct/items=]: +
+ : size + :: {{unsigned long}} or null. An optional field, initially null, containing the + size of the request to allocate to this buyer. +
+ # Privacy Considerations # {#privacy-considerations} Protected Audience aims to advance the privacy of remarketing and custom audience From b71d3bf019e9ccd5623c87fe46c565d9775c62e4 Mon Sep 17 00:00:00 2001 From: Russ Hamilton Date: Mon, 9 Sep 2024 20:43:35 +0000 Subject: [PATCH 02/11] Add missing = --- spec.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.bs b/spec.bs index 294c0b56..a1042d1a 100644 --- a/spec.bs +++ b/spec.bs @@ -7345,7 +7345,7 @@ An auction data config is a [=struct=] with the following [=struct/it :: {{unsigned long}} or null. An optional field, containing the desired size for the returned encrypted request blob. : per buyer config - :: A [=map=] whose [=map/keys] are [=origins=] and [=map/values=] are [=auction data buyer config=]. + :: A [=map=] whose [=map/keys=] are [=origins=] and [=map/values=] are [=auction data buyer config=]. An auction data buyer config is a [=struct=] with the following [=struct/items=]: From 301c989cb5bea694488444d0f1c592eb2f6bb09b Mon Sep 17 00:00:00 2001 From: Russ Hamilton Date: Wed, 11 Sep 2024 19:06:52 +0000 Subject: [PATCH 03/11] Add constraint on request size --- spec.bs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec.bs b/spec.bs index a1042d1a..3e16966d 100644 --- a/spec.bs +++ b/spec.bs @@ -3031,6 +3031,14 @@ The getInterestGroupAdAuctionData(|configIDL|) m |configIDL|["{{AdAuctionDataConfig/perBuyerConfig}}"] 1. If |config|'s [=auction data config/seller=] or [=auction data config/coordinator=] fields are failure, then [=exception/throw=] a {{TypeError}}. + 1. If |config|'s [=auction data config/per buyer config=] [=map/is not empty=] + and |config|'s [=auction data config/request size=] is null: + 1. Let |request_size| equal 0. + 1. [=list/For each] |buyerConfig| of |config|'s [=auction data config/per buyer config=]'s [=map/values=]: + 1. If |buyerConfig|'s [=auction data buyer config/size=] is null, + then [=exception/throw=] a {{TypeError}}. + 1. Set |request_size| to |request_size| + |buyerConfig|'s [=auction data buyer config/size=] + 1. Set |config|'s [=auction data config/request size=] to |request_size|. 1. Return |config|. From 25b26c47ede1388eac4c14a67525b0b8d2366525 Mon Sep 17 00:00:00 2001 From: brusshamilton Date: Tue, 24 Sep 2024 13:53:39 -0400 Subject: [PATCH 04/11] Apply suggestions from code review Co-authored-by: qingxinwu <6334674+qingxinwu@users.noreply.github.com> --- spec.bs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/spec.bs b/spec.bs index 3e16966d..d264da23 100644 --- a/spec.bs +++ b/spec.bs @@ -3019,13 +3019,13 @@ The getInterestGroupAdAuctionData(|configIDL|) m 1. Let |config| be a new [=auction data config=] with the following [=struct/items=]: : [=auction data config/seller=] - :: The result of running [=parsing an https origin=] on + :: The result of running [=parse an https origin=] on |configIDL|["{{AdAuctionDataConfig/seller}}"] : [=auction data config/coordinator=] - :: The result of running [=parsing an https origin=] on + :: The result of running [=parse an https origin=] on |configIDL|["{{AdAuctionDataConfig/coordinatorOrigin}}"] : [=auction data config/request size=] - :: |configIDL|["{{AdAuctionDataConfig/requestSize}}"] + :: |configIDL|["{{AdAuctionDataConfig/requestSize}}"] if it [=map/exists=], null otherwise : [=auction data config/per buyer config=] :: The result of running [=parse per buyer auction data configs=] on |configIDL|["{{AdAuctionDataConfig/perBuyerConfig}}"] @@ -3033,12 +3033,12 @@ The getInterestGroupAdAuctionData(|configIDL|) m fields are failure, then [=exception/throw=] a {{TypeError}}. 1. If |config|'s [=auction data config/per buyer config=] [=map/is not empty=] and |config|'s [=auction data config/request size=] is null: - 1. Let |request_size| equal 0. - 1. [=list/For each] |buyerConfig| of |config|'s [=auction data config/per buyer config=]'s [=map/values=]: + 1. Let |requestSize| be 0. + 1. [=list/For each=] |buyerConfig| of |config|'s [=auction data config/per buyer config=]'s [=map/values=]: 1. If |buyerConfig|'s [=auction data buyer config/size=] is null, then [=exception/throw=] a {{TypeError}}. - 1. Set |request_size| to |request_size| + |buyerConfig|'s [=auction data buyer config/size=] - 1. Set |config|'s [=auction data config/request size=] to |request_size|. + 1. Set |requestSize| to |requestSize| + |buyerConfig|'s [=auction data buyer config/size=] + 1. Set |config|'s [=auction data config/request size=] to |requestSize|. 1. Return |config|. @@ -3046,14 +3046,14 @@ The getInterestGroupAdAuctionData(|configIDL|) m To parse per buyer auction data configs given an {{AdAuctionDataBuyerConfig}} |perBuyerConfigIDL|: 1. Let |configs| be a new [=ordered map=] whose [=map/keys=] are [=origins=] - and whose [=map/values=] are [=auction data config=] + and whose [=map/values=] are [=auction data configs=]. 1. [=map/For each=] |buyerIDL| → |buyerConfigIDL| of |perBuyerConfigIDL|: 1. Let |buyerConfig| be a new [=auction data buyer config=] with the following [=struct/items=]: : [=auction data buyer config/size=] - :: |buyerConfigIDL|["{{AdAuctionDataBuyerConfig/targetSize}}"] - 1. Let |buyer| be the result of running [=parsing an https origin=] on |buyerIDL|. + :: |buyerConfigIDL|["{{AdAuctionDataBuyerConfig/targetSize}}"] if it [=map/exists=], null otherwise. + 1. Let |buyer| be the result of running [=parse an https origin=] on |buyerIDL|. 1. If |buyer| is failure, then [=exception/throw=] a {{TypeError}}. - 1. [=map/Set=] configs[|buyer|] to |buyerConfig|. + 1. [=map/Set=] |configs|[|buyer|] to |buyerConfig|. 1. Return |configs|. From cf727dfcfb9e49e051873b4b3e70e3153fcb20b8 Mon Sep 17 00:00:00 2001 From: Russ Hamilton Date: Tue, 24 Sep 2024 18:54:28 +0000 Subject: [PATCH 05/11] Address comments --- spec.bs | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/spec.bs b/spec.bs index d264da23..3da5e8c7 100644 --- a/spec.bs +++ b/spec.bs @@ -2896,7 +2896,8 @@ A server auction interest group is a [=struct=] with the following [= : browser signals :: A [=server auction browser signals=]. : priority - :: A {{double}} + :: A {{double}}. Used to select which interest groups for a given buyer are excluded + from the serialized request due to space limitations. A server auction browser signals is a [=struct=] with the following [=struct/items=]: @@ -2944,7 +2945,7 @@ The getInterestGroupAdAuctionData(|configIDL|) m 1. Let |global| be [=this=]'s [=relevant global object=]. 1. If |global|'s [=associated Document=] is not [=allowed to use=] the "[=run-ad-auction=]" [=policy-controlled feature=], then [=exception/throw=] a "{{NotAllowedError}}" {{DOMException}}. -1. Let |config| be the result of running [=parse and verify ad auction config=] on |configIDL|. +1. Let |config| be the result of running [=parse and verify ad auction data config=] on |configIDL|. 1. Let |p| be [=a new promise=]. 1. Let |queue| be the result of [=starting a new parallel queue=]. 1. [=parallel queue/enqueue steps|Enqueue the following steps=] to |queue|: @@ -2953,6 +2954,8 @@ The getInterestGroupAdAuctionData(|configIDL|) m 1. [=list/For each=] |ig| of the [=user agent=]'s [=interest group set=]: 1. If |ig|'s [=interest group/ads=] is null or [=list/is empty=], [=iteration/continue=]. 1. Let |owner| be |ig|'s [=interest group/owner=]. + 1. If |config|["per buyer config"] [=map/is empty=] or + |config|["per buyer config"][|owner|] does not [=map/exist=], then [=iteration/continue=]. 1. If |igMap|[|owner|] does not [=map/exist=], then [=map/set=] |igMap|[|owner|] to a new [=list=]. 1. Let |ads| be a new [=list=]. 1. [=list/For each=] |ad| in |ig|'s [=interest group/ads=], [=list/append=] |ad|'s [=interest group ad/ad render ID=] to |ads|. @@ -3015,22 +3018,23 @@ The getInterestGroupAdAuctionData(|configIDL|) m
- To parse and verify ad auction config given an {{AdAuctionDataConfig}} |configIDL|: + To parse and verify ad auction data config given an {{AdAuctionDataConfig}} |configIDL|: + 1. Let |seller| be the result of running [=parse an https origin=] on + |configIDL|["{{AdAuctionDataConfig/seller}}"]. + 1. Let |coordinator| be the result of running [=parse an https origin=] on + |configIDL|["{{AdAuctionDataConfig/coordinatorOrigin}}"]. + 1. If |seller| or |coordinator| are failure, then [=exception/throw=] a {{TypeError}}. 1. Let |config| be a new [=auction data config=] with the following [=struct/items=]: : [=auction data config/seller=] - :: The result of running [=parse an https origin=] on - |configIDL|["{{AdAuctionDataConfig/seller}}"] + :: |seller| : [=auction data config/coordinator=] - :: The result of running [=parse an https origin=] on - |configIDL|["{{AdAuctionDataConfig/coordinatorOrigin}}"] + :: |coordinator| : [=auction data config/request size=] :: |configIDL|["{{AdAuctionDataConfig/requestSize}}"] if it [=map/exists=], null otherwise : [=auction data config/per buyer config=] :: The result of running [=parse per buyer auction data configs=] on |configIDL|["{{AdAuctionDataConfig/perBuyerConfig}}"] - 1. If |config|'s [=auction data config/seller=] or [=auction data config/coordinator=] - fields are failure, then [=exception/throw=] a {{TypeError}}. 1. If |config|'s [=auction data config/per buyer config=] [=map/is not empty=] and |config|'s [=auction data config/request size=] is null: 1. Let |requestSize| be 0. @@ -3048,9 +3052,10 @@ The getInterestGroupAdAuctionData(|configIDL|) m 1. Let |configs| be a new [=ordered map=] whose [=map/keys=] are [=origins=] and whose [=map/values=] are [=auction data configs=]. 1. [=map/For each=] |buyerIDL| → |buyerConfigIDL| of |perBuyerConfigIDL|: - 1. Let |buyerConfig| be a new [=auction data buyer config=] with the following [=struct/items=]: - : [=auction data buyer config/size=] - :: |buyerConfigIDL|["{{AdAuctionDataBuyerConfig/targetSize}}"] if it [=map/exists=], null otherwise. + 1. Let |buyerConfig| be a new [=auction data buyer config=] whose + [=auction data buyer config/size=] is + |buyerConfigIDL|["{{AdAuctionDataBuyerConfig/targetSize}}"] if it + [=map/exists=], null otherwise. 1. Let |buyer| be the result of running [=parse an https origin=] on |buyerIDL|. 1. If |buyer| is failure, then [=exception/throw=] a {{TypeError}}. 1. [=map/Set=] |configs|[|buyer|] to |buyerConfig|. From 39dc5eee869c4f783fc7de283590b2c1092248fc Mon Sep 17 00:00:00 2001 From: Russ Hamilton Date: Thu, 26 Sep 2024 19:44:24 +0000 Subject: [PATCH 06/11] Address comments --- spec.bs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/spec.bs b/spec.bs index 3da5e8c7..71da51c1 100644 --- a/spec.bs +++ b/spec.bs @@ -2954,8 +2954,9 @@ The getInterestGroupAdAuctionData(|configIDL|) m 1. [=list/For each=] |ig| of the [=user agent=]'s [=interest group set=]: 1. If |ig|'s [=interest group/ads=] is null or [=list/is empty=], [=iteration/continue=]. 1. Let |owner| be |ig|'s [=interest group/owner=]. - 1. If |config|["per buyer config"] [=map/is empty=] or - |config|["per buyer config"][|owner|] does not [=map/exist=], then [=iteration/continue=]. + 1. If |config|'s [=auction data config/per buyer config=] [=map/is empty=] or + |config|'s [=auction data config/per buyer config=][|owner|] does not + [=map/exist=], then [=iteration/continue=]. 1. If |igMap|[|owner|] does not [=map/exist=], then [=map/set=] |igMap|[|owner|] to a new [=list=]. 1. Let |ads| be a new [=list=]. 1. [=list/For each=] |ad| in |ig|'s [=interest group/ads=], [=list/append=] |ad|'s [=interest group ad/ad render ID=] to |ads|. @@ -3041,7 +3042,7 @@ The getInterestGroupAdAuctionData(|configIDL|) m 1. [=list/For each=] |buyerConfig| of |config|'s [=auction data config/per buyer config=]'s [=map/values=]: 1. If |buyerConfig|'s [=auction data buyer config/size=] is null, then [=exception/throw=] a {{TypeError}}. - 1. Set |requestSize| to |requestSize| + |buyerConfig|'s [=auction data buyer config/size=] + 1. Set |requestSize| to |requestSize| + |buyerConfig|'s [=auction data buyer config/size=]. 1. Set |config|'s [=auction data config/request size=] to |requestSize|. 1. Return |config|.
@@ -3052,8 +3053,8 @@ The getInterestGroupAdAuctionData(|configIDL|) m 1. Let |configs| be a new [=ordered map=] whose [=map/keys=] are [=origins=] and whose [=map/values=] are [=auction data configs=]. 1. [=map/For each=] |buyerIDL| → |buyerConfigIDL| of |perBuyerConfigIDL|: - 1. Let |buyerConfig| be a new [=auction data buyer config=] whose - [=auction data buyer config/size=] is + 1. Let |buyerConfig| be a new [=auction data buyer config=]. + 1. Set |buyerConfig|'s [=auction data buyer config/size=] to |buyerConfigIDL|["{{AdAuctionDataBuyerConfig/targetSize}}"] if it [=map/exists=], null otherwise. 1. Let |buyer| be the result of running [=parse an https origin=] on |buyerIDL|. From 85206618eb350cfc6f94b51d90e5dd59efcc8b08 Mon Sep 17 00:00:00 2001 From: Russ Hamilton Date: Fri, 27 Sep 2024 14:18:21 +0000 Subject: [PATCH 07/11] Add domintro for AdAuctionDataConfig --- spec.bs | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/spec.bs b/spec.bs index 71da51c1..e313bf74 100644 --- a/spec.bs +++ b/spec.bs @@ -2862,23 +2862,51 @@ partial interface Navigator { Promise getInterestGroupAdAuctionData(AdAuctionDataConfig config); }; +dictionary AdAuctionData { + required Uint8Array request; + required USVString requestId; +}; + + + dictionary AdAuctionDataConfig { required USVString seller; required USVString coordinatorOrigin; unsigned long requestSize; record<USVString, AdAuctionDataBuyerConfig> perBuyerConfig; }; + + +
+
{{AdAuctionDataConfig/seller}} +
The seller that will be used as the {{AuctionAdConfig/seller}} in the + following {{AuctionAdConfig}} passed to {{Window/navigator}}.{{Navigator/runAdAuction()}}. +
{{AdAuctionDataConfig/coordinatorOrigin}} +
The origin of the coordinator hosting public encryption keys for the server + running the ad auction. The [=origin/scheme=] must be "`https`". An implementation + may select which coordinators are acceptable. +
{{AdAuctionDataConfig/requestSize}} +
The desired size for the returned response. If any buyers are specified in + the per-buyer config, this will be the exact size of the returned request. + Otherwise the returned request will be at most the + {{AdAuctionDataConfig/requestSize}}. +
{{AdAuctionDataConfig/perBuyerConfig}} +
A [=map=] +
+ dictionary AdAuctionDataBuyerConfig { unsigned long targetSize; }; - -dictionary AdAuctionData { - required Uint8Array request; - required USVString requestId; -}; +
+
{{AdAuctionDataBuyerConfig/targetSize}} +
The size of the request to allocate for this buyer. Required when + {{AdAuctionDataConfig}}'s {{AdAuctionDataConfig/requestSize}} is not + specified. +
+ A server auction interest group is a [=struct=] with the following [=struct/items=]:
: name From a3c1fc1ca7128c1fe75b8a5aa82d79982f82dd2b Mon Sep 17 00:00:00 2001 From: Russ Hamilton Date: Fri, 27 Sep 2024 14:20:11 +0000 Subject: [PATCH 08/11] Fix missing description --- spec.bs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec.bs b/spec.bs index e313bf74..95c4d70f 100644 --- a/spec.bs +++ b/spec.bs @@ -2891,7 +2891,8 @@ dictionary AdAuctionDataConfig { Otherwise the returned request will be at most the {{AdAuctionDataConfig/requestSize}}.
{{AdAuctionDataConfig/perBuyerConfig}} -
A [=map=] +
A [=map=] whose [=map/keys=] are [=origins=] are the buyers that should + be included in the returned request.
From 6efdfb5b4ecc7d3e3fbce7a7df55f88a91dfdd3b Mon Sep 17 00:00:00 2001 From: "Benjamin \"Russ\" Hamilton" <brusshamilton@gmail.com> Date: Fri, 27 Sep 2024 13:51:46 -0400 Subject: [PATCH 09/11] Apply suggestions from code review Co-authored-by: qingxinwu <6334674+qingxinwu@users.noreply.github.com> --- spec.bs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/spec.bs b/spec.bs index 95c4d70f..5ee007b6 100644 --- a/spec.bs +++ b/spec.bs @@ -2886,13 +2886,12 @@ dictionary AdAuctionDataConfig { running the ad auction. The [=origin/scheme=] must be "`https`". An implementation may select which coordinators are acceptable. <dt>{{AdAuctionDataConfig/requestSize}} - <dd>The desired size for the returned response. If any buyers are specified in - the per-buyer config, this will be the exact size of the returned request. - Otherwise the returned request will be at most the + <dd>The desired size for the returned {{AdAuctionData/request}}. If any buyers are specified in + {{AdAuctionDataConfig/perBuyerConfig}}, this will be the exact size of the returned {{AdAuctionData/request}}. + Otherwise the returned {{AdAuctionData/request}}'s size will be at most the {{AdAuctionDataConfig/requestSize}}. <dt>{{AdAuctionDataConfig/perBuyerConfig}} - <dd>A [=map=] whose [=map/keys=] are [=origins=] are the buyers that should - be included in the returned request. + <dd>[=map/keys=] are [=serialization of an origin|serialized origins=] of buyers that should be included in the returned request. </dl> <xmp class="idl"> From d921d5a6152e2caccae3903a47e476217df3d174 Mon Sep 17 00:00:00 2001 From: Russ Hamilton <behamilton@google.com> Date: Fri, 27 Sep 2024 18:00:30 +0000 Subject: [PATCH 10/11] Describe values of {{AdAuctionDataConfig/perBuyerConfig}} --- spec.bs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec.bs b/spec.bs index 5ee007b6..620d3553 100644 --- a/spec.bs +++ b/spec.bs @@ -2891,7 +2891,9 @@ dictionary AdAuctionDataConfig { Otherwise the returned {{AdAuctionData/request}}'s size will be at most the {{AdAuctionDataConfig/requestSize}}. <dt>{{AdAuctionDataConfig/perBuyerConfig}} - <dd>[=map/keys=] are [=serialization of an origin|serialized origins=] of buyers that should be included in the returned request. + <dd>[=map/Keys=] are [=serialization of an origin|serialized origins=] of + buyers that should be included in the returned request. [=map/Values=] are + {{AdAuctionDataBuyerConfig}} for that buyer. </dl> <xmp class="idl"> From 22cb44aa3818a8c683fa65c11c10b16056861d4e Mon Sep 17 00:00:00 2001 From: Russ Hamilton <behamilton@google.com> Date: Fri, 27 Sep 2024 19:06:42 +0000 Subject: [PATCH 11/11] Fix filtering logic --- spec.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.bs b/spec.bs index 620d3553..2a94ac71 100644 --- a/spec.bs +++ b/spec.bs @@ -2984,7 +2984,7 @@ The <dfn for=Navigator method>getInterestGroupAdAuctionData(|configIDL|)</dfn> m 1. [=list/For each=] |ig| of the [=user agent=]'s [=interest group set=]: 1. If |ig|'s [=interest group/ads=] is null or [=list/is empty=], [=iteration/continue=]. 1. Let |owner| be |ig|'s [=interest group/owner=]. - 1. If |config|'s [=auction data config/per buyer config=] [=map/is empty=] or + 1. If |config|'s [=auction data config/per buyer config=] [=map/is not empty=] and |config|'s [=auction data config/per buyer config=][|owner|] does not [=map/exist=], then [=iteration/continue=]. 1. If |igMap|[|owner|] does not [=map/exist=], then [=map/set=] |igMap|[|owner|] to a new [=list=].