Skip to content

Commit

Permalink
[shared storage] Implement interestGroup()
Browse files Browse the repository at this point in the history
Add interestGroups() to the shared storage worklet, to return the
Protected Audience interest groups associated with the
shared storage origin's owner, with some additional metadata.

Implement this behind a runtime feature, which is implicitly
controlled by a Finch flag.

Explainer PR: WICG/shared-storage#180

Spec PR(s):
1) WICG/turtledove#1299
2) WICG/shared-storage#203

Bug: 367992703
Binary-Size: Size increase is unavoidable.
Fuchsia-Binary-Size: Size increase is unavoidable.
Change-Id: I5fc5767fa53a91f021d64a871a6dd9cb88f4431c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5696046
Reviewed-by: Daniel Cheng <[email protected]>
Commit-Queue: Yao Xiao <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1369483}
  • Loading branch information
yaoxiachromium authored and chromium-wpt-export-bot committed Oct 16, 2024
1 parent 2af17a8 commit ae2d83e
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
41 changes: 41 additions & 0 deletions shared-storage/interest-groups.tentative.https.sub.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/shared-storage/resources/util.js"></script>
<script src="/fenced-frame/resources/utils.js"></script>

<body>
<script>
'use strict';

promise_test(async t => {
const ig = {
owner: window.location.origin,
name: 'default name',
lifetimeMs: 100000
};

await navigator.joinAdInterestGroup(ig);
await sharedStorage.worklet.addModule('resources/simple-module.js');

const ancestor_key = token();
let url0 = generateURL("/shared-storage/resources/frame0.html",
[ancestor_key]);
let url1 = generateURL("/shared-storage/resources/frame1.html",
[ancestor_key]);

let select_url_result = await sharedStorage.selectURL(
"verify-interest-groups", [{url: url0}, {url: url1}],
{data: {'expectedOwner': ig.owner, 'expectedName': ig.name},
resolveToConfig: true});
assert_true(validateSelectURLResult(select_url_result, true));
attachFencedFrame(select_url_result, 'opaque-ads');
const result = await nextValueFromServer(ancestor_key);

// This indicates that `interestGroups()` returns expected result.
assert_equals(result, "frame1_loaded");
}, 'Basic test for `interestGroups()` in the shared storage worklet');

</script>
</body>
27 changes: 27 additions & 0 deletions shared-storage/resources/simple-module.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,35 @@ class VerifyKeyNotFound {
}
}

class VerifyInterestGroups {
async run(urls, data) {
if (data &&
data.hasOwnProperty('expectedOwner') &&
data.hasOwnProperty('expectedName')) {

const groups = await interestGroups();

if (groups.length !== 1) {
return -1;
}

if (groups[0]["owner"] !== data['expectedOwner']) {
return -1;
}

if (groups[0]["name"] !== data['expectedName']) {
return -1;
}

return 1;
}
return -1;
}
}

register('test-url-selection-operation', TestURLSelectionOperation);
register('increment-global-variable-and-return-original-value-operation',
IncrementGlobalVariableAndReturnOriginalValueOperation);
register('verify-key-value', VerifyKeyValue);
register('verify-key-not-found', VerifyKeyNotFound);
register('verify-interest-groups', VerifyInterestGroups);

0 comments on commit ae2d83e

Please sign in to comment.