<!DOCTYPE html>
<title>Test window.fence.setReportEventDataForAutomaticBeacons</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/common/dispatcher/dispatcher.js"></script>
<script src="resources/utils.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="resources/automatic-beacon-helper.js"></script>

<body>
<script>
promise_test(async(t) => {
  const fencedframe = await attachFencedFrameContext({
    generator_api: 'fledge', register_beacon: true
  });

  const beacon = {
    eventType: "reserved.top_navigation_start",
    eventData: "This is the start data",
    destination: ["buyer"],
    crossOriginExposed: true
  }

  await fencedframe.execute(async (beacon) => {
    const iframe = await attachIFrameContext({
      origin: get_host_info().HTTPS_REMOTE_ORIGIN,
      headers: [['Allow-Fenced-Frame-Automatic-Beacons', 'true']]
    });
    await setupAutomaticBeacon(iframe, [beacon],
        "resources/close.html", NavigationTrigger.ClickOnce,
        "_blank");
    return iframe.execute(() => {
      // Test that automatic beacon data is set correctly in the subframe. Data
      // that is not cross-origin exposed should not be able to be set in a
      // cross-origin subframe, even if the same frame that sets the data
      // triggers the report.
      window.fence.setReportEventDataForAutomaticBeacons({
        eventType: "reserved.top_navigation_start",
        eventData: "This should not be the data",
        destination: ["buyer"],
        crossOriginExposed: false
      });
    });
  }, [beacon]);

  await multiClick(10, 10, fencedframe.element)

  await verifyBeaconData(beacon.eventType, beacon.eventData,
      get_host_info().HTTPS_REMOTE_ORIGIN);
}, 'A cross origin subframe can set automatic beacon data.');

</script>
</body>
