Skip to content

Commit 32d26a5

Browse files
committed
[spec] Make bikeshed check references to Private Aggregation API
Currently, all references to the private-aggregation-api spec are declared in the "anchors" block. According to the bikeshed docs, this is how you link to dfns in specs that aren't part in the autolinking database[1]. As a result, bikeshed hasn't actually been checking our references, nor has it always been generating the correct links[2]. Private Aggregation spec is already in the database[3], so I think we can promote these to actual references. This commit makes the necessary adjustments to the "link-defaults" block. With this change, invalid references to the Private Aggregation spec are now compilation errors. [1]: https://speced.github.io/bikeshed/#custom-dfns [2]: For instance, clicking "context ID" in step 10 of "obtain the pre-specified report parameters" links to a non-existent anchor on the Private Aggregation spec. [3]: https://github.com/tobie/specref/blob/3569d1ecfa298461f3de0586ed2d13ffb000fa29/refs/browser-specs.json#L1179
1 parent 6df142d commit 32d26a5

File tree

1 file changed

+27
-34
lines changed

1 file changed

+27
-34
lines changed

spec.bs

+27-34
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,36 @@ spec:webidl;
2626
text:an exception was thrown
2727
spec:html;
2828
type:dfn;
29+
for: /
30+
text: allowed to use
2931
for:realm; text:global object
3032
for:WorkerGlobalScope; text:module map
3133
for:navigable; text:top-level traversable
3234
spec:fenced-frame;
3335
type:dfn;
3436
for:fencedframetype; text:fenced frame reporter
3537
for:browsing context; text:fenced frame config instance
38+
spec:private-aggregation-api
39+
type:dfn
40+
for:/
41+
text: aggregation coordinator
42+
text: batching scope
43+
text: debug scope
44+
text: private-aggregation
45+
text: default filtering id max bytes
46+
text: determine if a report should be sent deterministically
47+
text: get batching scope steps
48+
text: get debug scope steps
49+
text: pre-specified report parameters
50+
for: pre-specified report parameters
51+
text: context id
52+
text: filtering id max bytes
53+
text: max contributions
54+
text: scoping details
55+
text: serialize an aggregatable report
56+
text: valid filtering id max bytes range
57+
for: PrivateAggregation
58+
text: allowed to use
3659
</pre>
3760

3861
<pre class="anchors">
@@ -124,36 +147,6 @@ spec: permissions-policy; urlPrefix: https://www.w3.org/TR/permissions-policy/
124147
spec: attestation; urlPrefix: https://github.com/privacysandbox/attestation
125148
type: dfn
126149
text: enrolled
127-
spec: private-aggregation-api; urlPrefix: https://patcg-individual-drafts.github.io/private-aggregation-api/
128-
type: dfn
129-
text: Private Aggregation; url:
130-
text: get the privateAggregation
131-
text: determine if an origin is an aggregation coordinator
132-
text: pre-specified report parameters
133-
for: pre-specified report parameters
134-
text: context ID
135-
text: filtering ID max bytes
136-
text: batching scope
137-
text: debug scope
138-
text: process contributions for a batching scope
139-
text: set the aggregation coordinator for a batching scope
140-
text: determine if a report should be sent deterministically
141-
text: mark a debug scope complete
142-
text: set the pre-specified report parameters for a batching scope
143-
text: aggregation coordinator
144-
text: default filtering id max bytes
145-
text: valid filtering id max bytes range
146-
text: context id
147-
text: scoping details
148-
for: scoping details
149-
text: get batching scope steps
150-
text: get debug scope steps
151-
text: private-aggregation
152-
for: PrivateAggregation
153-
text: allowed to use
154-
text: scoping details; url: #privateaggregation-scoping-details
155-
type: interface
156-
text: PrivateAggregation
157150
spec: protected-audience; urlPrefix: https://wicg.github.io/turtledove/
158151
type: dfn
159152
text: get storage interest groups for owner
@@ -224,7 +217,7 @@ Introduction {#intro}
224217

225218
In order to prevent cross-site user tracking, browsers are partitioning all forms of storage by [=top-level traversable=] site; see [=Client-Side Storage Partitioning=]. But, there are many [=legitimate use cases=] currently relying on unpartitioned storage.
226219

227-
This document introduces a new storage API that is intentionally not partitioned by [=top-level traversable=] site (though still partitioned by context origin), in order to serve a number of the use cases needing unpartitioned storage. To limit cross-site reidentification of users, data in Shared Storage may only be read in a restricted environment, called a worklet, and any output from the worklet is in the form of a [=fenced frame=] or a [=Private Aggregation=] report. Over time, there may be additional output gates included in the standard.
220+
This document introduces a new storage API that is intentionally not partitioned by [=top-level traversable=] site (though still partitioned by context origin), in order to serve a number of the use cases needing unpartitioned storage. To limit cross-site reidentification of users, data in Shared Storage may only be read in a restricted environment, called a worklet, and any output from the worklet is in the form of a [=fenced frame=] or a [=serialize an aggregatable report|Private Aggregation report=]. Over time, there may be additional output gates included in the standard.
228221

229222
<div class="example">
230223
`a.example` randomly assigns users to groups in a way that is consistent cross-site.
@@ -267,7 +260,7 @@ This document introduces a new storage API that is intentionally not partitioned
267260

268261
The {{SharedStorageWorklet}} Interface {#worklet}
269262
=================================================
270-
The {{SharedStorageWorklet}} object allows developers to supply [=module scripts=] to process [=Shared Storage=] data and then output the result through one or more of the output gates. Currently there are two output gates, the [=Private Aggregation=] output gate and the {{SharedStorageWorklet/selectURL()|URL-selection}} output gate.
263+
The {{SharedStorageWorklet}} object allows developers to supply [=module scripts=] to process [=Shared Storage=] data and then output the result through one or more of the output gates. Currently there are two output gates, the <code>{{privateAggregation}}.{{PrivateAggregation/contributeToHistogram()}}</code> output gate and the {{SharedStorageWorklet/selectURL()|URL-selection}} output gate.
271264

272265
<xmp class='idl'>
273266
typedef (USVString or FencedFrameConfig) SharedStorageResponse;
@@ -580,7 +573,7 @@ Moreover, each {{SharedStorageWorklet}}'s [=global scopes|list of global scopes=
580573
|contextId| is not null, return a new {{DOMException}} with name
581574
"`DataError`".
582575
1. Return a new [=pre-specified report parameters=] with the items:
583-
: <a spec="private-aggregation-api" for="pre-specified report parameters">context ID</a>
576+
: [=pre-specified report parameters/context ID=]
584577
:: |contextId|
585578
: [=pre-specified report parameters/filtering ID max bytes=]
586579
:: |filteringIdMaxBytes|
@@ -2400,4 +2393,4 @@ Privacy Considerations {#privacy}
24002393

24012394
In particular, an embedder can select a [=/URL=] from a short list of [=/URL=]s based on data in their shared storage and then display the result in a [=fenced frame=]. The embedder will not be able to know which [=/URL=] was chosen except through specific mechanisms that will be better-mitigated in the longer term. Currently, a few bits of entropy can leak each time that the user clicks on the [=fenced frame=] to initiate a [=top-level traversable=] [=navigate|navigation=] and/or the [=fenced frame=] calls the {{reportEvent()}} API.
24022395

2403-
An embedder is also able to send aggregatable reports via the [=Private Aggregation=] API, which adds noise in order to achieve differential privacy, uses a time delay to send reports, imposes limits on the number of reports sent, and processes the reports into aggregate data so that individual privacy is protected.
2396+
An embedder is also able to send aggregatable reports via {{privateAggregation}}, which adds noise in order to achieve differential privacy, uses a time delay to send reports, imposes limits on the number of reports sent, and processes the reports into aggregate data so that individual privacy is protected.

0 commit comments

Comments
 (0)