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

<body>
<script>
promise_test(async(t) => {
  const fencedframe = await attachFencedFrameContext(
      {generator_api: 'fledge'});
  await fencedframe.execute(() => {
    let event = {
      eventType: "reserved.top_navigation",
      eventData: "a".repeat(64000),
      destination: ["buyer"],
    }
    window.fence.setReportEventDataForAutomaticBeacons(event);
  });
}, 'setReportEventDataForAutomaticBeacons works at the size limit');

promise_test(async(t) => {
  const fencedframe = await attachFencedFrameContext(
      {generator_api: 'fledge'});
  await fencedframe.execute(() => {
    let event = {
      eventType: "reserved.top_navigation",
      eventData: "a".repeat(64001),
      destination: ["buyer"],
    }
    assert_throws_dom("SecurityError", () => {
      window.fence.setReportEventDataForAutomaticBeacons(event);
    });
  });
}, 'setReportEventDataForAutomaticBeacons fails over the size limit');

promise_test(async(t) => {
  const fencedframe = await attachFencedFrameContext(
      {generator_api: 'fledge'});
  await fencedframe.execute(() => {
    let event = {
      eventType: "reserved.top_navigation",
      eventData: "a".repeat(32),
      destination: ["invalid"],
    }
    assert_throws_js(TypeError, () => {
      window.fence.setReportEventDataForAutomaticBeacons(event);
    });
  });
}, 'setReportEventDataForAutomaticBeacons fails for invalid destination');
</script>
</body>
