Skip to content

Commit

Permalink
Merge branch 'main' into fledge-currency
Browse files Browse the repository at this point in the history
  • Loading branch information
Maks Orlovich committed Jul 27, 2023
2 parents 964e698 + 6179a6b commit 7e88285
Show file tree
Hide file tree
Showing 10 changed files with 2,497 additions and 648 deletions.
59 changes: 47 additions & 12 deletions FLEDGE.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions FLEDGE_browser_bidding_and_auction_API.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ This document seeks to propose an API for web pages to perform FLEDGE auctions u

#### Step 1: Get auction blob from browser

To execute an on-server FLEDGE auction, sellers begin by calling `navigator.startServerAdAuction()`:
To execute an on-server FLEDGE auction, sellers begin by calling `navigator.startServerAdAuction()` which returns a `Promise<Uint8Array>`:
```
const auctionBlob = navigator.startServerAdAuction({
const auctionBlob = await navigator.startServerAdAuction({
// ‘seller’ works the same as for runAdAuction.
'seller': 'https://www.example-ssp.com',
});
Expand Down
14 changes: 7 additions & 7 deletions FLEDGE_extended_PA_reporting.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ reportResult()/reportWin() methods using a new API available in the worklet:
```
function reportResult(auctionConfig, browserSignals) {
privateAggregation.sendHistogramReport({
privateAggregation.contributeToHistogram({
bucket: convertBuyerToBucketId(browserSignals.interestGroupOwner),
value: convertBidToReportingValue(browserSignals.bid)
});
Expand Down Expand Up @@ -80,11 +80,11 @@ The buyer can then do the following during generateBid (when the above informati
```
function generateBid(interestGroup, auctionSignals, perBuyerSignals, trustedBiddingSignals, browserSignals) {
privateAggregation.reportContributionForEvent(“reserved.win”, {
privateAggregation.contributeToHistogramOnEvent(“reserved.win”, {
bucket: getImpressionReportBucket(),
value: 1
});
privateAggregation.reportContributionForEvent("click", {
privateAggregation.contributeToHistogramOnEvent("click", {
bucket: getClickReportBuckets(), // 128-bit integer as BigInt
value: 1
});
Expand Down Expand Up @@ -118,7 +118,7 @@ The following example shows how to return the gap between an ad bid and the winn
```
function generateBid(...) {
bid = 100;
privateAggregation.reportContributionForEvent(
privateAggregation.contributeToHistogramOnEvent(
"reserved.loss",
{
bucket: 1596n, // represents a bucket for interest group x winning bid price
Expand Down Expand Up @@ -154,7 +154,7 @@ example allows the buyer to keep track of how many times their bid was rejected

```
function generateBid(...) {
privateAggregation.reportContributionForEvent(
privateAggregation.contributeToHistogramOnEvent(
"reserved.loss",
{
bucket: {
Expand All @@ -177,7 +177,7 @@ value: 1
## Reporting API informal specification

```
privateAggregation.reportContributionForEvent(eventType, contribution)
privateAggregation.contributeToHistogramOnEvent(eventType, contribution)
```

The parameters consist of:
Expand Down Expand Up @@ -225,7 +225,7 @@ by calling into a new API:
window.fence.reportEvent("click");
```

This will cause any contributions associated with a call to `reportContributionForEvent()`
This will cause any contributions associated with a call to `contributeToHistogramOnEvent()`
with an event-type of `click` to be reported/sent.

In this example, `"click"` is an event-name chosen by the auction bidder. There are a number
Expand Down
58 changes: 54 additions & 4 deletions Fenced_Frames_Ads_Reporting.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ The following summarizes the sequence of events for the buyer and seller. Distin
2. SSP will provide the sellerEventId to the auction via auctionConfig, which will be available in the reporting worklet for the SSP.
3. In reportResult(), the sellerEventId, along with any other contextual response fields relevant for reporting, will be available so that the result can be joined to the corresponding contextual query.
4. Once the winning ad is rendered in the fenced frame, the fenced frame can also communicate other events to the browser e.g. what user interaction happened. Since the fenced frames run the buyer’s scripts, the buyer can also decide what information to be volunteered to the seller via the reportEvent API.
5. The solution proposed in this document allows the seller’s reporting worklet to register a url to which data should be sent for events reported by the fenced frame.
5. The solution proposed in this document allows the seller’s reporting worklet to register a URL to which data should be sent for events reported by the fenced frame.

## Buyer (DSP) flow of events

Expand All @@ -37,7 +37,7 @@ The following summarizes the sequence of events for the buyer and seller. Distin
1. If the DSP participates in the contextual ad request, it will generate an event identifier, say buyerEventId, at contextual ad request/response time which is returned to the SSP as part of the perBuyerSignals, which the SSP in turn would specify in navigator.runAdAuction call. For DSPs that do not participate, buyerEventId could just be an ID that the worklet creates.
2. Browser will provide the buyerEventId to the reporting worklet for the DSP via reportWin() as part of the perBuyerSignals. This enables the result to be joined with the corresponding contextual query.
3. Fenced frame can also communicate other events to the browser e.g. a click happened along with click coordinates.
4. The solution proposed in this document allows the buyer’s reporting worklet to register a url in reportWin(), to which data should be sent, when events happen in the fenced frame.
4. The solution proposed in this document allows the buyer’s reporting worklet to register a URL in reportWin(), to which data should be sent, when events happen in the fenced frame.


# APIs
Expand Down Expand Up @@ -76,7 +76,7 @@ destination).`

### Example


To send a request with the POST request body `'{"clickX":"123","clickY":"456"}'` to the URL registered for `buyer` and `seller` when a user click happens:
```
window.fence.reportEvent({
'eventType': 'click',
Expand All @@ -85,6 +85,8 @@ window.fence.reportEvent({
});
```


To send a request with the POST request body `'an example string'` to the URL registered for `component-seller` when a user click happens:
```
window.fence.reportEvent({
'eventType': 'click',
Expand All @@ -93,6 +95,16 @@ window.fence.reportEvent({
});
```


To send a request with the POST request body `''` to the URL registered for `buyer` when a user click happens:
```
window.fence.reportEvent({
'eventType': 'click',
'destination':['buyer']
});
```


Note `window.fence` here is a new namespace for APIs that are only available from within a fenced frame. In the interim period when FLEDGE supports rendering the winning ad in an iframe, `window.fence` will also be available in such an iframe.

## registerAdBeacon
Expand Down Expand Up @@ -161,8 +173,46 @@ Currently, the only `eventType` that `setReportEventDataForAutomaticBeacons` all

If invoked multiple times, the latest invocation before the top-level navigation would be the one that’s honored.

`eventData` can be empty, in which case the automatic beacon will still be sent but without an event data body in the HTTP request.
`eventData` is optional, and can be empty. If `eventData` is not specified, or is empty, the automatic beacon will still be sent but without an event data body in the HTTP request.

If `setReportEventDataForAutomaticBeacons` is not invoked, the browser will not send an automatic beacon because the `destination` is unknown.

`setReportEventDataForAutomaticBeacons` can also be invoked in the click handler of an anchor tag, and will be sent on navigation:

```
<script>
function addBeaconData(element) {
const data = element.id + " was clicked.";
let beacon_event = {
eventType: "reserved.top_navigation",
eventData: data,
destination: ["buyer"],
}
window.fence.setReportEventDataForAutomaticBeacons(beacon_event);
}
</script>
<a onclick="addBeaconData(this)" id="link1" href="somesite.com" target="_blank">Click me!</a>
```

The beacon data will be in place by the time that the navigation starts. When the navigation commits, the automatic beacon will be sent out with event data set to "link1 was clicked.".

# Support for Ad Components
## Goal
When a rendered ad is composed of [multiple pieces](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#34-ads-composed-of-multiple-pieces), it is useful to detect user clicks that happened on ad components.

## Design
### Event Type and Reporting Destination
For fenced frames rendering the ad components under the top-level ad fenced frame, the `reserved.top_navigation` event type and corresponding reporting destination registered for the top-level fenced frame are reused when beacons are sent from the ad component fenced frames.

### Restricted to send `reserved.top_navigation` beacons only
* Invocation of the `reportEvent` API from an ad component fenced frame is disallowed.
* The only supported beacon to be sent from an ad component fenced frame is the `reserved.top_navigation` automatic beacon. Note this beacon is gated on a user activation (e.g. click).
* To ensure that there is no arbitrary data that can be received at the server from the component ad, the `eventData` field via `window.fence.setReportEventDataForAutomaticBeacons`, if specified, will be ignored. This ensures that information from the component ad URL is not revealed in the event report, or else it could lead to the join of two independently k-anonymous URLs (parent and component ad) at the receiving server.
* To send the beacon from a component fenced frame, `window.fence.setReportEventDataForAutomaticBeacons` must be invoked within the ad component fenced frame with `eventType` set to `'reserved.top_navigation'`. The beacon will be sent when there is a user activation (e.g. click) on the ad component fenced frame, which results in a top-level navigation.

```
window.fence.setReportEventDataForAutomaticBeacons({
'eventType': 'reserved.top_navigation',
'destination':['seller', 'buyer']
});
```
2 changes: 1 addition & 1 deletion Proposed_First_FLEDGE_OT_Details.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ The plan is for the FOT#1 to include support for multi-seller/SSP auctions. This

To make Chrome’s FLEDGE implementation function as described in this document, use a very recent version of Chrome, e.g. Chrome Canary, and pass this parameter to Chrome on the command line:

`--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,AllowURNsInIframes,BiddingAndScoringDebugReportingAPI`
`--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,AllowURNsInIframes,BiddingAndScoringDebugReportingAPI,OverridePrivacySandboxSettingsLocalTesting,PrivacySandboxAdsAPIsOverride`

#### Privacy Limitations of FOT#1

Expand Down
5 changes: 3 additions & 2 deletions Release_Notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
# FLEDGE Release Notes

## Chrome M114

## Chrome M109

* Functions that are called from Protected Audience worklets are now only accessible from inside the worklets, not from the global scope. See [#489](https://github.com/WICG/turtledove/issues/489) for more information.

## Chrome M109

* Since version 109.0.5414.16, the [`sendReports` parameter to `navigator.deprecatedURNToURL()`](https://github.com/WICG/turtledove/blob/main/Proposed_First_FLEDGE_OT_Details.md#advertisement-rendering) is respected.

Expand Down
29 changes: 23 additions & 6 deletions fledge-tester-list.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
# FLEDGE Tester List

## Ecosystem Testing of FLEDGE
## Ecosystem Use of FLEDGE

The purpose of this page is to consolidate testing information which is currently distributed across various GitHub issues, company blogs, social posts, etc.
The purpose of this page is to consolidate information which is currently distributed across various GitHub issues, company blogs, social posts, etc.
The usefulness of this page depends on testers sharing information and updates.

## Disclaimers

- Not a complete list. Testers are strongly encouraged to share their activities and insights publicly for the benefit of the broader community, but sharing is voluntary and therefore this page is not expected to reflect all testing activity.
- Not a complete list. Participants are strongly encouraged to share their activities and insights publicly for the benefit of the broader community, but sharing is voluntary and therefore this page is not expected to reflect all activity.

- Not evaluative. The purpose of this page is to consolidate links to information published by Privacy Sandbox testers. Editors will review submissions for relevance and to ensure general conformance to the guidelines above, but are not evaluating or endorsing the information provided.
- Not evaluative. The purpose of this page is to consolidate links to information published by Privacy Sandbox participants. Editors will review submissions for relevance and to ensure general conformance to the guidelines above, but are not evaluating or endorsing the information provided.

- Editors will regularly review and approve submissions that meet the guidelines below. If you believe that an error has been submitted, please create an issue in the FLEDGE repository with the words ‘[Tester List]‘ in the subject and the Editors will respond in short order.

Expand All @@ -32,17 +32,18 @@ The usefulness of this page depends on testers sharing information and updates.

1. On the FLEDGE GitHub page, navigate to the document in the main table called ‘fledge-tester-list.md’ (If you can read this sentence then you have already completed this step!)

1. Click the ‘pencil’ icon on the right side to edit the table and add your information
1. Click the ‘pencil’ icon on the right side to edit the appropriate table and add your information
1. Use the | to make sure that the information that you provide correctly shows up in each cell
1. After you select ‘Propose changes’ an editor will review and publish your updates in the coming days.

1. You can find additional details here for [editing tables in GitHub](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables).

## Table
## Table - Direct Integrations

| Company / Party | Role in testing | Est. Testing Timeframe | Link to testing plan and/or learnings | How to contact you |
| --------------- | --------------- | ---------------------- | ------------------------------------- | ------------------ |
| Criteo | DSP | | | privacy-sandbox-testing@criteo.com |
| Teads | SSP & DSP | | | privacysandbox@teads.com |
| NextRoll | DSP | | | privacysandbox@nextroll.com |
| OpenX | SSP | Limited testing in progress | | joel.meyer@openx.com |
| RTB House | DSP | Continuous testing ongoing; long term commitment. | https://blog.rtbhouse.com/whitepaper-deep-insights-from-early-fledge-experiments/ | privacysandbox@rtbhouse.com |
Expand All @@ -54,3 +55,19 @@ The usefulness of this page depends on testers sharing information and updates.
| MicroAd | SSP & DSP | | | privacysandbox@microad.co.jp |
| Neodata Group | SSP & DSP | | | privacysandbox@neodatagroup.com |
| Adlook (subsidiary of RTB House) | DSP | Continuous testing ongoing; long term commitment. | | privacysandbox@adlook.com |
| Microsoft (Xandr, MSAN) | SSP + DSP(s) | Testing | | privacy_sandbox@microsoft.com |
| Tremor International | SSP & DSP| 2023-2024 | coming soon | subhag.oak@amobee.com |
| Triplelift | SSP | Testing in progress | | prod-privacysandbox@triplelift.com |
| Seedtag | SSP & DSP| 2023-2024 | coming soon | privacysandbox@seedtag.com |

## Table - Publishers and Advertisers Interested in Testing or Early Adoption
Companies who may be interested in participating in tests and early adoption opportunities provided by ad tech companies.

| Company / Party | Role (publisher/sellside, advertiser/buyside, etc.) | Additional details about your interest (Optional) | How to contact you |
| --------------- | --------------------------------------------------- | ------------------------------------------------- | ------------------ |
| Mail Metro Media | Publisher | Transact through Google Ad Manager and Prebid fledgeForGpt module | programmatic.platforms@assocnews.co.uk |
| Vocento | Publisher | | privacysandbox@vocento.com |
| Clarin | Publisher | | mfranco@clarin.com |
| Terra Networks | Publisher | | adtech.terra.br@telefonica.com |
| OLX Brasil | Publisher | | adtech@olxbr.com |

Loading

0 comments on commit 7e88285

Please sign in to comment.