<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
const tests = [["a", ""], ["a", "filename"], ["area", ""], ["area", "filename"]];

for (const [tag, download_attr] of tests) {
  async_test(t => {
    let a = document.createElement(tag);
    a.href = "foo.html";
    a.download = download_attr;
    document.body.appendChild(a);
    navigation.onnavigate = t.step_func_done(e => {
      assert_equals(e.navigationType, "push");
      assert_true(e.cancelable);
      assert_true(e.canIntercept);
      assert_false(e.userInitiated);
      assert_false(e.hashChange);
      assert_equals(e.downloadRequest, download_attr);
      assert_equals(e.formData, null);
      assert_equals(new URL(e.destination.url).pathname,
                    "/navigation-api/navigate-event/foo.html");
      assert_false(e.destination.sameDocument);
      assert_equals(e.destination.key, "");
      assert_equals(e.destination.id, "");
      assert_equals(e.destination.index, -1);
      assert_equals(e.sourceElement, a);
      e.preventDefault();
    });
    a.click();
  }, `<${tag}> fires navigate and populates downloadRequest with '${download_attr}'`);
}
</script>
</body>
