diff --git a/index.bs b/index.bs
index 315a4f08d0..63d1b06b4d 100644
--- a/index.bs
+++ b/index.bs
@@ -789,7 +789,7 @@ An attribution scopes is a [=struct=] with the following items:
An attribution source is a [=struct=] with the following items:
-: source identifier
+: internal ID
:: A [=string=].
: source origin
:: A [=suitable origin=].
@@ -1008,7 +1008,9 @@ An attribution report is a [=struct=] with the following items:
:: A [=suitable origin=].
: report time
:: A [=moment=].
-: report ID
+: external ID
+:: A UUID formatted as a [=string=].
+: internal ID
:: A [=string=].
@@ -1040,8 +1042,8 @@ An event-level report is an [=attribution report=] with the following additional
:: A 64-bit integer.
: trigger time
:: A [=moment=].
-: source identifier
-:: A string.
+: source ID
+:: A [=string=].
: attribution destinations
:: A [=set=] of [=sites=].
: attribution debug info
@@ -1090,7 +1092,7 @@ An aggregatable attribution report is an [=aggregatable report=] with
:: A positive integer.
: attribution debug info
:: An [=attribution debug info=].
-: source identifier
+: source ID
:: Null or a [=string=].
@@ -1123,9 +1125,9 @@ An attribution rate-limit record is a [=struct=] with the following i
: expiry time
:: Null or a [=moment=].
: entity ID
-:: Null for [=obtain a fake report|fake reports=] or an [=event-level report=]'s [=event-level report/report ID=] or an
- [=aggregatable attribution report=]'s [=aggregatable attribution report/report ID=] or an
- [=attribution source=]'s [=attribution source/source identifier=].
+:: Null for [=obtain a fake report|fake reports=] or an [=event-level report=]'s [=event-level report/internal ID=] or an
+ [=aggregatable attribution report=]'s [=aggregatable attribution report/internal ID=] or an
+ [=attribution source=]'s [=attribution source/internal ID=].
: deactivated for unexpired destination limit (default false)
:: A [=boolean=].
: destination limit priority (default null)
@@ -2268,8 +2270,10 @@ an [=aggregation coordinator=] |aggregationCoordinator|, and a [=moment=] |now|:
:: |effectiveDestination|
: [=aggregatable debug report/report time=]
:: |now|
- : [=aggregatable debug report/report ID=]
+ : [=aggregatable debug report/external ID=]
:: The result of [=generating a random UUID=]
+ : [=aggregatable debug report/internal ID=]
+ :: A new unique [=string=]
: [=aggregatable debug report/contributions=]
:: |contributions|
: [=aggregatable debug report/aggregation coordinator=]
@@ -2799,7 +2803,7 @@ To parse source-registration JSON given a [=byte sequence=]
1. If [=automation local testing mode=] is true, set |epsilon| to `∞`.
1. Let |source| be a new [=attribution source=] struct whose items are:
- : [=attribution source/source identifier=]
+ : [=attribution source/internal ID=]
:: A new unique [=string=]
: [=attribution source/source origin=]
:: |sourceOrigin|
@@ -2907,17 +2911,17 @@ given an [=attribution source=] |source|, run the following steps:
1. Return whether |destinations|'s [=set/size=] is greater than [=max destinations per source reporting site per day=].
To delete sources for unexpired destination limit given a [=set=] of
-[=attribution source/source identifiers=] |sourcesToDelete| and a [=moment=] |now|:
+[=attribution source/internal IDs=] |sourcesToDelete| and a [=moment=] |now|:
1. If |sourcesToDelete| [=set/is empty=], return.
1. [=set/iterate|For each=] [=attribution source=] |source| of the [=attribution source cache=]:
1. [=set/Remove=] |source| from the [=attribution source cache=] if |sourcesToDelete|
- [=set/contains=] |source|'s [=attribution source/source identifier=].
+ [=set/contains=] |source|'s [=attribution source/internal ID=].
1. Let |deletedEventLevelReports| be a new [=set=].
1. [=set/iterate|For each=] [=event-level report=] |report| of the [=event-level report cache=]:
- 1. If |sourcesToDelete| [=set/contains=] |report|'s [=event-level report/source identifier=]
+ 1. If |sourcesToDelete| [=set/contains=] |report|'s [=event-level report/source ID=]
and |report|'s [=event-level report/trigger time=] is greater than or equal to |now|:
- 1. [=set/Append=] |report|'s [=event-level report/report ID=] to |deletedEventLevelReports|.
+ 1. [=set/Append=] |report|'s [=event-level report/internal ID=] to |deletedEventLevelReports|.
1. [=set/Remove=] |report| from the [=event-level report cache=].
Note: Leaking browsing history of destinations deactivated for unexpired
@@ -2929,8 +2933,8 @@ To delete sources for unexpired destination limit given a [=set=] of
1. Let |deletedAggregatableReports| be a new [=set=].
1. [=set/iterate|For each=] [=aggregatable attribution report=] |report| of the [=aggregatable attribution report cache=]:
- 1. If |report|'s [=aggregatable attribution report/source identifier=] is not null and |sourcesToDelete| [=set/contains=] |report|'s [=aggregatable attribution report/source identifier=]:
- 1. [=set/Append=] |report|'s [=aggregatable attribution report/report ID=] to |deletedAggregatableReports|.
+ 1. If |report|'s [=aggregatable attribution report/source ID=] is not null and |sourcesToDelete| [=set/contains=] |report|'s [=aggregatable attribution report/source ID=]:
+ 1. [=set/Append=] |report|'s [=aggregatable attribution report/internal ID=] to |deletedAggregatableReports|.
1. [=set/Remove=] |report| from the [=aggregatable attribution report cache=].
1. [=set/iterate|For each=] [=attribution rate-limit record=] |record| of the [=attribution rate-limit cache=]:
1. If |record|'s [=attribution rate-limit record/scope=] is:
@@ -2956,7 +2960,7 @@ A destination limit record is a [=struct=] with the following items:
:: A 64-bit integer.
: time
:: A [=moment=]
-: source identifier
+: source ID
:: A [=string=].
@@ -2980,7 +2984,7 @@ To get sources to delete for the unexpired destination limit given an
:: |record|'s [=attribution rate-limit record/destination limit priority=]
: [=destination limit record/time=]
:: |record|'s [=attribution rate-limit record/time=]
- : [=destination limit record/source identifier=]
+ : [=destination limit record/source ID=]
:: |record|'s [=attribution rate-limit record/entity ID=]
1. [=list/Append=] |destinationRecord| to |destinationRecords|.
@@ -2993,8 +2997,8 @@ To get sources to delete for the unexpired destination limit given an
:: |source|'s [=attribution source/destination limit priority=]
: [=destination limit record/time=]
:: |source|'s [=attribution source/source time=]
- : [=destination limit record/source identifier=]
- :: |record|'s [=attribution source/source identifier=]
+ : [=destination limit record/source ID=]
+ :: |record|'s [=attribution source/internal ID=]
1. [=list/Append=] |destinationRecord| to |destinationRecords|.
1. [=list/sort in descending order|Sort=] |destinationRecords| in descending order, with |a| less than |b| if the following steps return true:
@@ -3014,7 +3018,7 @@ To get sources to delete for the unexpired destination limit given an
1. If |newDestinations|'s [=set/size=] is less than the user agent's [=max destinations covered by unexpired sources=],
[=set/append=] |destination| to |newDestinations|.
1. Otherwise, if |newDestinations| does not [=set/contain=] |destination|:
- 1. [=set/Append=] |record|'s [=destination limit record/source identifier=] to |sourcesToDelete|.
+ 1. [=set/Append=] |record|'s [=destination limit record/source ID=] to |sourcesToDelete|.
1. Return |sourcesToDelete|.
To check if an [=attribution source=] should be blocked by reporting-origin per site limit given an [=attribution source=] |source|:
@@ -3177,12 +3181,12 @@ To find sources with common destinations and reporting origin given a
1. [=list/Append=] |source| to |matchingSources|.
1. Return |matchingSources|.
-To remove associated event-level reports and rate-limit records given an [=attribution source/source identifier=] |sourceId| and a [=moment=] |minTriggerTime|:
+To remove associated event-level reports and rate-limit records given an [=attribution source/internal ID=] |sourceId| and a [=moment=] |minTriggerTime|:
1. [=set/iterate|For each=] [=event-level report=] |report| of the [=event-level report cache=]:
- 1. If |report|'s [=event-level report/source identifier=] is not equal to |sourceId|, [=iteration/continue=].
+ 1. If |report|'s [=event-level report/source ID=] is not equal to |sourceId|, [=iteration/continue=].
1. If |report|'s [=event-level report/trigger time=] is less than |minTriggerTime|, [=iteration/continue=].
1. [=set/Remove=] |report| from the [=event-level report cache=].
- 1. [=list/Remove=] all [=attribution rate-limit records=] |entry| from the [=attribution rate-limit cache=] where |entry|'s [=attribution rate-limit record/entity ID=] is equal to |report|'s [=event-level report/report ID=].
+ 1. [=list/Remove=] all [=attribution rate-limit records=] |entry| from the [=attribution rate-limit cache=] where |entry|'s [=attribution rate-limit record/entity ID=] is equal to |report|'s [=event-level report/internal ID=].
To remove sources with unselected attribution scopes for destination given a [=site=] |destination| and an [=attribution source=] |pendingSource|:
1. Let |scopeRecords| be a new [=list=].
@@ -3202,7 +3206,7 @@ To remove sources with unselected attribution scopes for destination
1. If |selectedScopes|'s [=set/size=] is less than |pendingSource|'s [=attribution source/attribution scopes=]'s [=attribution scopes/limit=], [=set/append=] |record|[0] to |selectedScopes|.
1. Otherwise, if |selectedScopes| does not [=set/contain=] |record|[0], [=set/append=] |record|[1] to |sourcesToRemove|.
1. [=set/iterate|For each=] |source| of the |sourcesToRemove|:
- 1. [=Remove associated event-level reports and rate-limit records=] with |source|'s [=attribution source/source identifier=] and |pendingSource|'s [=attribution source/source time=].
+ 1. [=Remove associated event-level reports and rate-limit records=] with |source|'s [=attribution source/internal ID=] and |pendingSource|'s [=attribution source/source time=].
1. [=set/Remove=] |source| from the [=attribution source cache=].
To remove sources with unselected attribution scopes given an [=attribution source=] |pendingSource|:
@@ -3226,7 +3230,7 @@ To remove or update sources for attribution scopes given an [=attribu
1. If |existingScopes| is null or |existingScopes|'s [=attribution scopes/max event states=]
is not equal to |pendingScopes|'s [=attribution scopes/max event states=] or
|existingScopes|'s [=attribution scopes/limit=] is less than |pendingScopes|'s [=attribution scopes/limit=]:
- 1. [=Remove associated event-level reports and rate-limit records=] with |source|'s [=attribution source/source identifier=] and |pendingSource|'s [=attribution source/source time=].
+ 1. [=Remove associated event-level reports and rate-limit records=] with |source|'s [=attribution source/internal ID=] and |pendingSource|'s [=attribution source/source time=].
1. [=set/Remove=] |source| from the [=attribution source cache=].
1. [=Remove sources with unselected attribution scopes=] with |pendingSource|.
@@ -3291,7 +3295,7 @@ To process an attribution source given an [=attribution source=] |sou
1. Return.
1. Let |sourcesToDeleteForDestinationLimit| be the result of running [=get sources to delete for the unexpired destination limit=]
with |source|.
-1. If |sourcesToDeleteForDestinationLimit| [=set/contains=] |source|'s [=attribution source/source identifier=]:
+1. If |sourcesToDeleteForDestinationLimit| [=set/contains=] |source|'s [=attribution source/internal ID=]:
1. Run [=obtain and deliver debug reports on source registration=] with
"[=source debug data type/source-destination-limit=]
" and |source|.
1. Return.
@@ -3322,7 +3326,7 @@ To process an attribution source given an [=attribution source=] |sou
: [=attribution rate-limit record/expiry time=]
:: |source|'s [=attribution source/expiry time=]
: [=attribution rate-limit record/entity ID=]
- :: |source|'s [=attribution source/source identifier=]
+ :: |source|'s [=attribution source/internal ID=]
: [=attribution rate-limit record/destination limit priority=]
:: |source|'s [=attribution source/destination limit priority=]
1. If the result of running [=should processing be blocked by reporting-origin limit=] with
@@ -3972,7 +3976,7 @@ To maybe replace event-level report given an [=attribution source=]
|sourceToAttribute|'s [=attribution source/max number of event-level reports=].
1. If |sourceToAttribute|'s [=attribution source/number of event-level reports=] is less than
|sourceToAttribute|'s [=attribution source/max number of event-level reports=], return "[=event-level-report-replacement result/add-new-report=]
".
-1. Let |matchingReports| be a new [=list=] whose elements are all the elements in the [=event-level report cache=] whose [=event-level report/report time=] and [=event-level report/source identifier=] are equal to |report|'s, [=list/sorted in ascending order=] using [=event-level report/is lower-priority than=].
+1. Let |matchingReports| be a new [=list=] whose elements are all the elements in the [=event-level report cache=] whose [=event-level report/report time=] and [=event-level report/source ID=] are equal to |report|'s, [=list/sorted in ascending order=] using [=event-level report/is lower-priority than=].
1. If |matchingReports| [=list/is empty=]:
1. Set |sourceToAttribute|'s [=attribution source/event-level attributable=] value to false.
1. Return "[=event-level-report-replacement result/drop-new-report-none-to-replace=]
".
@@ -3984,7 +3988,7 @@ To maybe replace event-level report given an [=attribution source=]
1. [=set/Remove=] |lowestPriorityReport| from the [=event-level report cache=].
1. Decrement |sourceToAttribute|'s [=attribution source/number of event-level reports=] value by 1.
1. Let |rateLimitRecord| be the element from [=attribution rate-limit cache=] whose
- [=attribution rate-limit record/entity ID=] is equal to |lowestPriorityReport|'s [=event-level report/report ID=]
+ [=attribution rate-limit record/entity ID=] is equal to |lowestPriorityReport|'s [=event-level report/internal ID=]
and [=attribution rate-limit record/scope=] is equal to "[=rate-limit scope/event-attribution=]
".
1. [=Assert=]: |rateLimitRecord| is not null.
@@ -4079,7 +4083,7 @@ To trigger event-level attribution given an [=attribution trigger=] |
: [=attribution rate-limit record/expiry time=]
:: null
: [=attribution rate-limit record/entity ID=]
- :: |report|'s [=event-level report/report ID=]
+ :: |report|'s [=event-level report/internal ID=]
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. Let |numMatchingReports| be the number of entries in the [=event-level report cache=] whose
@@ -4391,10 +4395,12 @@ a 64-bit integer priority |priority|, and a [=trigger spec map=] [=map/entry=]
:: |priority|.
: [=event-level report/trigger time=]
:: |triggerTime|.
- : [=event-level report/source identifier=]
- :: |source|'s [=attribution source/source identifier=].
- : [=event-level report/report ID=]
+ : [=event-level report/source ID=]
+ :: |source|'s [=attribution source/internal ID=].
+ : [=event-level report/external ID=]
:: The result of [=generating a random UUID=].
+ : [=event-level report/internal ID=]
+ :: A new unique [=string=]
: [=event-level report/attribution debug info=]
:: (|source|'s [=attribution source/debug key=], |triggerDebugKey|).
1. Return |report|.
@@ -4421,8 +4427,10 @@ an [=attribution trigger=] |trigger|:
:: |source|'s [=attribution source/source time=].
: [=aggregatable attribution report/report time=]
:: |reportTime|.
- : [=aggregatable attribution report/report ID=]
+ : [=aggregatable attribution report/external ID=]
:: The result of [=generating a random UUID=].
+ : [=aggregatable attribution report/internal ID=]
+ : A new unique [=string=]
: [=aggregatable attribution report/attribution debug info=]
:: (|source|'s [=attribution source/debug key=], |trigger|'s [=attribution trigger/debug key=]).
: [=aggregatable attribution report/contributions=]
@@ -4435,8 +4443,8 @@ an [=attribution trigger=] |trigger|:
:: |trigger|'s [=attribution trigger/trigger context ID=]
: [=aggregatable attribution report/filtering ID max bytes=]
:: |trigger|'s [=attribution trigger/aggregatable filtering ID max bytes=]
- : [=aggregatable attribution report/source identifier=]
- :: |source|'s [=attribution source/source identifier=].
+ : [=aggregatable attribution report/source ID=]
+ :: |source|'s [=attribution source/internal ID=].
1. Return |report|.
Generating randomized null attribution reports
@@ -4454,8 +4462,10 @@ To obtain a null attribution report given an [=attribution trigger=]
:: |sourceTime|
: [=aggregatable attribution report/report time=]
:: |reportTime|
- : [=aggregatable attribution report/report ID=]
+ : [=aggregatable attribution report/external ID=]
:: The result of [=generating a random UUID=]
+ : [=aggregatable attribution report/internal ID=]
+ : A new unique [=string=]
: [=aggregatable attribution report/attribution debug info=]
:: (null, |trigger|'s [=attribution trigger/debug key=])
: [=aggregatable attribution report/contributions=]
@@ -4470,7 +4480,7 @@ To obtain a null attribution report given an [=attribution trigger=]
:: |trigger|'s [=attribution trigger/trigger context ID=]
: [=aggregatable attribution report/filtering ID max bytes=]
:: |trigger|'s [=attribution trigger/aggregatable filtering ID max bytes=]
- : [=aggregatable attribution report/source identifier=]
+ : [=aggregatable attribution report/source ID=]
:: Null
1. Return |report|.
@@ -4613,7 +4623,7 @@ of running the following steps:
: "`attribution_destination`"
:: |report|'s [=aggregatable report/effective attribution destination=], serialized
: "`report_id`"
- :: |report|'s [=aggregatable report/report ID=]
+ :: |report|'s [=aggregatable report/external ID=]
Note: The inclusion of "`report_id`" in the shared info is intended to allow the report recipient
to perform deduplication and prevent double counting, in the event that the user agent retries
@@ -4755,7 +4765,7 @@ To obtain an event-level report body given an [=attribution report=]
: "`trigger_data`"
:: |report|'s [=event-level report/trigger data=], [=serialize an integer|serialized=]
: "`report_id`"
- :: |report|'s [=event-level report/report ID=]
+ :: |report|'s [=event-level report/external ID=]
Note: The inclusion of "`report_id`" in the report body is intended to allow the report recipient
to perform deduplication and prevent double counting, in the event that the user agent retries