diff --git a/AGGREGATE.md b/AGGREGATE.md index 77d92e5a1..cbb6fc0bc 100644 --- a/AGGREGATE.md +++ b/AGGREGATE.md @@ -505,6 +505,9 @@ As the trigger context ID in the aggregatable report explicitly reveals the association between the report and the trigger, these reports can be sent immediately without delay. +When a trigger context ID is provided, the aggregatable report will not count +towards the limit of aggregatable reports per source, nor be limited by it. + Note: This is an [alternative](https://github.com/WICG/attribution-reporting-api/blob/main/report_verification.md#could-we-just-tag-reports-with-a-trigger_id-instead-of-using-anonymous-tokens) considered for [report verification](https://github.com/WICG/attribution-reporting-api/blob/main/report_verification.md), and achieves all of the higher priority [security goals](https://github.com/WICG/attribution-reporting-api/blob/main/report_verification.md#security-goals). diff --git a/index.bs b/index.bs index 74875eff6..1a1aac60c 100644 --- a/index.bs +++ b/index.bs @@ -4274,7 +4274,7 @@ To trigger aggregatable attribution given an [=attribution trigger=] 1. If the result of running [=check if attribution should be blocked by rate limits=] with |trigger|, |sourceToAttribute|, and |rateLimitRecord| is not null, return it. -1. If |sourceToAttribute|'s [=attribution source/number of aggregatable attribution reports=] value is equal to [=max aggregatable reports per source=][0], then: +1. If |sourceToAttribute|'s [=attribution source/number of aggregatable attribution reports=] value is equal to [=max aggregatable reports per source=][0] and |trigger|'s [=attribution trigger/trigger context ID=] is null, then: 1. Return the [=triggering result=] ("[=triggering status/dropped=]", ("[=trigger debug data type/trigger-aggregate-excessive-reports=]", null)). 1. If the result of running [=check if an attribution source can create aggregatable contributions=] @@ -4287,14 +4287,14 @@ To trigger aggregatable attribution given an [=attribution trigger=] 1. Return the [=triggering result=] ("[=triggering status/dropped=]", ("[=trigger debug data type/trigger-aggregate-insufficient-named-budget=]", null)). 1. [=set/Append=] |report| to the [=aggregatable attribution report cache=]. -1. Increment |sourceToAttribute|'s [=attribution source/number of aggregatable attribution reports=] value by 1. +1. If |trigger|'s [=attribution trigger/trigger context ID=] is null, increment |sourceToAttribute|'s [=attribution source/number of aggregatable attribution reports=] value by 1. 1. Decrement |sourceToAttribute|'s [=attribution source/remaining aggregatable attribution budget=] value by |report|'s [=aggregatable attribution report/required aggregatable budget=]. 1. If |matchedBudgetName| is not null and |sourceToAttribute|'s [=attribution source/remaining named budgets=][|matchedBudgetName|] [=map/exists=]: 1. Decrement |sourceToAttribute|'s [=attribution source/remaining named budgets=][|matchedBudgetName|] value by |report|'s [=aggregatable attribution report/required aggregatable budget=]. 1. If |matchedDedupKey| is not null, [=list/append=] it to |sourceToAttribute|'s [=attribution source/aggregatable dedup keys=]. -1. [=set/Append=] |rateLimitRecord| to the [=attribution rate-limit cache=]. +1. If |trigger|'s [=attribution trigger/trigger context ID=] is null, [=set/append=] |rateLimitRecord| to the [=attribution rate-limit cache=]. 1. Run [=generate null attribution reports=] with |trigger| and |report|. 1. If the result of [=checking if attribution debugging can be enabled=] with |report|'s [=aggregatable attribution report/attribution debug info=] is true,