diff --git a/spec.bs b/spec.bs
index deb92df0d..1b8e714ed 100644
--- a/spec.bs
+++ b/spec.bs
@@ -291,11 +291,11 @@ This is detectable because it can change the set of fields that are read from th
and its [=origin/scheme=] is "`https`".
1. Let |interestGroup| be a new [=interest group=].
1. Validate the given |group| and set |interestGroup|'s fields accordingly.
- 1. Set |interestGroup|'s [=interest group/expiry=] to the [=current wall time=] plus
+ 1. Set |interestGroup|'s [=interest group/expiry=] to the [=current coarsened wall time=] plus
|group|["{{AuctionAdInterestGroup/lifetimeMs}}"] milliseconds.
- 1. Set |interestGroup|'s [=interest group/next update after=] to the [=current wall time=] plus 24
- hours.
- 1. Set |interestGroup|'s [=interest group/last updated=] to the [=current wall time=].
+ 1. Set |interestGroup|'s [=interest group/next update after=] to the [=current coarsened wall
+ time=] plus 24 hours.
+ 1. Set |interestGroup|'s [=interest group/last updated=] to the [=current coarsened wall time=].
1. Set |interestGroup|'s [=interest group/owner=] to the result of [=parsing an https origin=] on
|group|["{{GenerateBidInterestGroup/owner}}"].
1. If |interestGroup|'s [=interest group/owner=] is failure, then [=exception/throw=] a {{TypeError}}.
@@ -489,7 +489,7 @@ This is detectable because it can change the set of fields that are read from th
the currently stored one from the browser.
1. Set |interestGroup|'s [=interest group/joining origin=] to [=this=]'s
[=relevant settings object=]'s [=environment/top-level origin=].
- 1. Set |interestGroup|'s [=interest group/join time=] to the [=current wall time=].
+ 1. Set |interestGroup|'s [=interest group/join time=] to the [=current coarsened wall time=].
1. If the most recent entry in |interestGroup|'s [=interest group/join counts=] corresponds to
the current day in UTC, increment its count. If not, [=list/insert=] a new [=tuple=]
the time set to the current UTC day and a count of 1.
@@ -532,7 +532,7 @@ To perform storage maintenance:
It's sorted based on their [=map/values=] ([=interest group/expiry=]) in descending order, in
order to remove [=interest groups=] of [=interest group/owners=] expiring soonest first.
-1. Let |now| be the [=current wall time=].
+1. Let |now| be the [=current coarsened wall time=].
1. [=list/For each=] |ig| of the [=user agent=]'s [=interest group set=]:
1. Let |owner| be |ig|'s [=interest group/owner=].
1. If |ig|'s [=interest group/expiry=] is before |now|, then [=list/remove=] |ig| from the
@@ -1646,7 +1646,7 @@ To validate and convert auction ad config given an {{AuctionAdConfig}
whose [=interest group/owner=] is |ig|'s [=interest group/owner=] and whose
[=interest group/name=] is |ig|'s [=interest group/name=], return if none found.
1. Let |win| be a new [=previous win=].
- 1. Set |win|'s [=previous win/time=] to the [=current wall time=].
+ 1. Set |win|'s [=previous win/time=] to the [=current coarsened wall time=].
1. Let |ad| be a new [=interest group ad=] with the following [=struct/items=]:
: [=interest group ad/render url=]
:: |bid|'s [=generated bid/bid ad=]'s [=interest group ad/render url=]
@@ -1757,8 +1757,8 @@ following steps. They return a failure if failing to fetch the script or wasm, o
|ig|.
1. Set |browserSignals|["{{BiddingBrowserSignals/joinCount}}"] to the sum of |ig|'s
[=interest group/join counts=] for all days within the last 30 days.
- 1. Set |browserSignals|["{{BiddingBrowserSignals/recency}}"] to the [=current wall time=]
- minus |ig|'s [=interest group/join time=], in milliseconds.
+ 1. Set |browserSignals|["{{BiddingBrowserSignals/recency}}"] to the [=current coarsened wall
+ time=] minus |ig|'s [=interest group/join time=], in milliseconds.
1. [=map/Set=] |browserSignals|["{{BiddingBrowserSignals/bidCount}}"] to the sum of |ig|'s
[=interest group/bid counts=] for all days within the last 30 days.
1. [=map/Set=] |browserSignals|["{{BiddingBrowserSignals/adComponentsLimit}}"] to 40.
@@ -1825,7 +1825,7 @@ and a [=real time reporting contributions map=] |realTimeContributionsMap|:
1. Let |settings| be |global|'s [=relevant settings object=].
1. Let |topLevelOrigin| be |settings|'s [=environment/top-level origin=].
1. Let |seller| be |auctionConfig|'s [=auction config/seller=].
-1. Let |auctionStartTime| be the [=current wall time=].
+1. Let |auctionStartTime| be the [=current coarsened wall time=].
1. Let |decisionLogicFetcher| be the result of [=creating a new script fetcher=] with
|auctionConfig|'s [=auction config/decision logic url=] and |settings|.
1. Let |trustedScoringSignalsBatcher| be the result of [=creating a trusted scoring signals
@@ -3170,9 +3170,9 @@ a [=list=] of [=interest groups=] |bidIgs|, and a [=reporting context map=]
[=interest group/owner=] is |igId|'s [=interest group/owner=] and [=interest group/name=] is |igId|'s
[=interest group/name=]. [=iteration/Continue=] if none found.
1. If |updateIfOlderThan| is less than 10 mintues, set it to 10 minutes.
- 1. If [=current wall time=] − |ig|'s [=interest group/last updated=] ≥
+ 1. If [=current coarsened wall time=] − |ig|'s [=interest group/last updated=] ≥
|updateIfOlderThan|, set |ig|'s [=interest group/next update after=] to the
- [=current wall time=] + |updateIfOlderThan|.
+ [=current coarsened wall time=] + |updateIfOlderThan|.
1. Return |winningBidInfo|.
@@ -3322,7 +3322,7 @@ A server auction browser signals is a [=struct=] with the following [
:: A count of the number of joins for this interest group in the last 30 days.
Calculated by summing the [=interest group/join counts=].
: recency ms
- :: A [=duration=], in milliseconds, representing the [=current wall time=] at
+ :: A [=duration=], in milliseconds, representing the [=current coarsened wall time=] at
the time this object was constructed minus the corresponding [=interest group=]'s
[=interest group/join time=], in milliseconds.
: previous wins
@@ -3332,7 +3332,7 @@ A server auction browser signals is a [=struct=] with the following [
A server auction previous win is a [=struct=] with the following [=struct/items=]:
: time delta
- :: A [=duration=], in milliseconds, representing the [=current wall time=] at
+ :: A [=duration=], in milliseconds, representing the [=current coarsened wall time=] at
the time this object was constructed minus the corresponding [=previous win=]'s [=previous win/time=], in seconds.
: ad render ID
:: A [=string=] containing the [=interest group ad/ad render ID=] for the ad represented by this entry.
@@ -3443,7 +3443,7 @@ The getInterestGroupAdAuctionData(|configIDL|) m
1. Set |config|'s [=auction data config/encryption key=] to |key|.
1. Set |config|'s [=auction data config/encryption key id=] to |keyId|.
1. Let |igMap| be a new [=map=] whose [=map/keys=] are [=origins=] and [=map/values=] are [=lists=].
- 1. Let |startTime| be a [=moment=] equal to the [=current wall time=].
+ 1. Let |startTime| be a [=moment=] equal to the [=current coarsened wall time=].
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=].
@@ -3473,7 +3473,8 @@ The getInterestGroupAdAuctionData(|configIDL|) m
: [=server auction browser signals/join count=]
:: the sum of |ig|'s [=interest group/join counts=] with a join day within the last 30 days
: [=server auction browser signals/recency ms=]
- :: the [=current wall time=] minus |ig|'s [=interest group/join time=] in millseconds
+ :: the [=current coarsened wall time=] minus |ig|'s [=interest group/join time=] in
+ millseconds
: [=server auction browser signals/previous wins=]
:: |prevWins|
1. Let |serverIg| be a new [=server auction interest group=] with the following [=struct/items=]:
@@ -3797,11 +3798,11 @@ and [=map/values=] are [=moments=] at which the cool down for the origin key exp
To is debugging only in cooldown or lockout given an [=origin=] |origin|:
- 1. If [=user agent=]'s [=debug report lockout until=] is not null, and [=current wall time=] is
- less than [=user agent=]'s [=debug report lockout until=], return true.
+ 1. If [=user agent=]'s [=debug report lockout until=] is not null, and [=current coarsened wall
+ time=] is less than [=user agent=]'s [=debug report lockout until=], return true.
1. If [=user agent=]'s [=debug report cooldown=] is null, then return false.
- 1. If [=user agent=]'s [=debug report cooldown=][|origin|] [=map/exists=] and [=current wall time=]
- is less than [=user agent=]'s [=debug report cooldown=][|origin|], then return true.
+ 1. If [=user agent=]'s [=debug report cooldown=][|origin|] [=map/exists=] and [=current coarsened
+ wall time=] is less than [=user agent=]'s [=debug report cooldown=][|origin|], then return true.
1. Return false.
@@ -3813,15 +3814,15 @@ and [=map/values=] are [=moments=] at which the cool down for the origin key exp
chosen with a probability equal to [=sampling rate=].
1. If |sampleRand| is 0:
1. Set |canSendAfterSampled| to true.
- 1. Set [=user agent=]'s [=debug report lockout until=] to [=current wall time=] plus
+ 1. Set [=user agent=]'s [=debug report lockout until=] to [=current coarsened wall time=] plus
[=lockout period=].
1. Let |cooldownRand| be a random {{long}} ≥ 0 and < 10, which corresponds to
[=long cooldown rate=].
1. Let |cooldownPeriod| be [=long cooldown period=] if |cooldownRand| is 0,
[=short cooldown period=] otherwise.
- 1. Set [=user agent=]'s [=debug report cooldown=][|origin|] to [=current wall time=] plus
- |cooldownPeriod|.
+ 1. Set [=user agent=]'s [=debug report cooldown=][|origin|] to [=current coarsened wall time=]
+ plus |cooldownPeriod|.
1. Return |canSendAfterSampled|.
@@ -4473,7 +4474,7 @@ dictionary StorageInterestGroup : AuctionAdInterestGroup {
To get storage interest groups for owner given an [=origin=] |owner|:
1. Let |resultIgs| be an empty [=list=].
- 1. Let |now| be a [=moment=] equal to the [=current wall time=].
+ 1. Let |now| be a [=moment=] equal to the [=current coarsened wall time=].
1. [=list/For each=] |ig| of [=user agent=]'s [=interest group set=]:
1. If |ig|'s [=interest group/owner=] does not equal |owner|, then [=iteration/continue=].
1. Let |resultIg| be an empty {{StorageInterestGroup}} dictionary.
@@ -5049,7 +5050,8 @@ from querying the server during an auction.
To query k-anonymity cache given a [=SHA-256=] |hashCode|:
1. If the [=user agent=]'s [=k-anonymity cache=] does not [=map/contain=] |hashCode|, then return false.
1. Let |record| be the [=user agent=]'s [=k-anonymity cache=][|hashCode|].
- 1. If the difference between [=current wall time=] and |record|'s [=k-anonymity record/timestamp=] is more than 7 days then return false.
+ 1. If the difference between [=current coarsened wall time=] and |record|'s [=k-anonymity
+ record/timestamp=] is more than 7 days then return false.
1. Return |record|'s [=k-anonymity record/is k-anonymous=].
@@ -5151,7 +5153,7 @@ from querying the server during an auction.
To update k-anonymity cache for key given a [=SHA-256=] |hashCode|:
1. [=Assert=] that these steps are running [=in parallel=].
1. Let |record| be a new [=k-anonymity record=].
- 1. Set |record|'s [=k-anonymity record/timestamp=] field to the [=current wall time=].
+ 1. Set |record|'s [=k-anonymity record/timestamp=] field to the [=current coarsened wall time=].
1. Set |record|'s [=k-anonymity record/is k-anonymous=] field to the result of executing [=query k-anonymity count=] for |hashCode|.
1. [=map/Set=] |record|[|hashCode|] to |record|.
@@ -6219,7 +6221,7 @@ navigating to another page. Some implementations, such as Chromium, have chosen
1. [=list/For each=] |owner| of |owners|:
1. [=list/For each=] |originalInterestGroup| of the [=user agent=]'s [=interest group set=] whose
[=interest group/owner=] is |owner| and [=interest group/next update after=] is before
- the [=current wall time=] and whose [=interest group/update url=] is not null:
+ the [=current coarsened wall time=] and whose [=interest group/update url=] is not null:
Note: Implementations can consider loading only a portion of these interest groups
at a time to avoid issuing too many requests at once.
@@ -6501,8 +6503,9 @@ navigating to another page. Some implementations, such as Chromium, have chosen
* |ig|'s [=interest group/ads=] is not null, and |ig|'s [=interest group/additional bid key=]
is not null;
* |ig|'s [=interest group/estimated size=] is greater than 1048576 bytes.
- 1. Set |ig|'s [=interest group/next update after=] to the [=current wall time=] plus 24 hours.
- 1. Set |ig|'s [=interest group/last updated=] to the [=current wall time=].
+ 1. Set |ig|'s [=interest group/next update after=] to the [=current coarsened wall time=] plus
+ 24 hours.
+ 1. Set |ig|'s [=interest group/last updated=] to the [=current coarsened wall time=].
1. [=list/Replace=] the [=interest group=] that has |ig|'s [=interest group/owner=] and
[=interest group/name=] in the [=user agent=]'s [=interest group set=] with |ig|.
1. Abort update: We jump here if some part of the
@@ -6525,10 +6528,10 @@ To process updateIfOlderThanMs given an [=origin=] |buyer|, and an [=
1. Let |ig| be the [=interest group=] of the [=user agent=]'s [=interest group set=] whose
[=interest group/owner=] is |buyer| and whose [=interest group/name=] is |igName|, or null if
[=interest group set=] does not have such an interest group.
- 1. If |ig| is not null and the [=current wall time=] − |ig|'s
+ 1. If |ig| is not null and the [=current coarsened wall time=] − |ig|'s
[=interest group/last updated=] ≥ |updateIfOlderThan|:
1. Set |ig|'s [=interest group/next update after=] to
- [=current wall time=] + |updateIfOlderThan|.
+ [=current coarsened wall time=] + |updateIfOlderThan|.
1. [=list/Replace=] the [=interest group=] that has |ig|'s [=interest group/owner=] and
[=interest group/name=] in the [=user agent=]'s [=interest group set=] with |ig|.