<!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';

for (const resolve_to_config of [true, false]) {
  promise_test(async () => {
    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 url2 = generateURL("/shared-storage/resources/frame2.html",
                           [ancestor_key]);

    await sharedStorage.set('key0-set-from-document', 'value0');
    await addModuleOnce(
        "/shared-storage/resources/verify-storage-entries-module.js");
    await sharedStorage.run("set-key0-operation", {keepAlive: true});

    let select_url_result = await sharedStorage.selectURL(
        "verify-storage-entries-url-selection-operation",
        [{url: url0,
          reportingMetadata: {'click':
                              "/shared-storage/resources/frame0.html"}},
         {url: url1,
          reportingMetadata:
            {'mouse interaction': "/shared-storage/resources/frame1.html",
            'click': "/shared-storage/resources/frame2.html"}}],
        {resolveToConfig: resolve_to_config, keepAlive: resolve_to_config});

    assert_true(validateSelectURLResult(select_url_result, resolve_to_config));
    attachFencedFrame(select_url_result, 'opaque-ads');

    // frame1_loaded implies that the setters and the operations were successful.
    assert_equals(await nextValueFromServer(ancestor_key), "frame1_loaded");

  }, 'verify-storage-entries-url-selection-operation selectURL() resolves to ' +
     (resolve_to_config ? 'config' : 'urn:uuid'));
}

</script>
</body>
