Fenced frames: Add reporting to custom destination urls [1/N]

This CL adds the API surface for custom destination urls in reportEvent.

Later CLs will send this information to the browser and send reporting
beacons based on it.

https://github.com/WICG/turtledove/issues/477

Change-Id: If901ceb39f759a2911e1781d91caf133874ac389
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4711374
Reviewed-by: Dominic Farolino <dom@chromium.org>
Reviewed-by: Shivani Sharma <shivanisha@chromium.org>
Commit-Queue: Garrett Tanzer <gtanzer@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1175044}
diff --git a/fenced-frame/fence-report-event-destination-url.https.html b/fenced-frame/fence-report-event-destination-url.https.html
new file mode 100644
index 0000000..6c0bdd8
--- /dev/null
+++ b/fenced-frame/fence-report-event-destination-url.https.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<title>Test window.fence.reportEvent destination URL.</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(() => {
+    // The destinationURL must be a valid URL.
+    let event = {destinationURL: "foobarbaz"};
+    assert_throws_js(TypeError, () => {window.fence.reportEvent(event);});
+
+    // The destinationURL must be an https URL.
+    event.destinationURL = "http://3pat.com";
+    assert_throws_js(TypeError, () => {window.fence.reportEvent(event);});
+
+    event.destinationURL = "https://3pat.com";
+    window.fence.reportEvent(event);
+
+    // `eventType` isn't allowed.
+    event.eventType = 'click';
+    assert_throws_js(TypeError, () => {window.fence.reportEvent(event);});
+    event.eventType = undefined;
+
+    // `eventData` isn't allowed.
+    event.eventData = 'payload';
+    assert_throws_js(TypeError, () => {window.fence.reportEvent(event);});
+    event.eventData = undefined;
+
+    // `destination` isn't allowed.
+    event.destination = ['buyer'];
+    assert_throws_js(TypeError, () => {window.fence.reportEvent(event);});
+    event.destination = undefined;
+  });
+}, 'window.fence.reportEvent destinationURL');
+</script>
+</body>