promise_test(() => {
  // Don't load generated-mime-types.json as none of them are navigable
  return fetch("resources/mime-types.json").then(res => res.json().then(runTests));
}, "Loading data…");

function isByteCompatible(str) {
  for(let i = 0; i < str.length; i++) {
    const charCode = str.charCodeAt(i);
    // See https://fetch.spec.whatwg.org/#concept-header-value
    if(charCode > 0xFF) {
      return "incompatible";
    } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) {
      return "header-value-incompatible";
    }
  }
  return "compatible";
}

function encodeForURL(str) {
  let output = "";
  for(let i = 0; i < str.length; i++) {
    const char = str.charCodeAt(i);
    if(char > 0xFF) {
      throw new Error("We cannot deal with input that is not latin1");
    } else  {
      output += "%" + char.toString(16).padStart(2, "0");
    }
  }
  return output;
}

function runTests(tests) {
  tests.forEach(val => {
    if(typeof val === "string" || val.navigable === undefined || val.encoding === undefined || isByteCompatible(val.input) !== "compatible") {
      return;
    }
    const mime = val.input;
    async_test(t => {
      const frame = document.createElement("iframe"),
            expectedEncoding = val.encoding === null ? "UTF-8" : val.encoding;
      t.add_cleanup(() => frame.remove());
      frame.onload = t.step_func(() => {
        if(frame.contentWindow.location.href === "about:blank") {
          return;
        }
        // Edge fails all these tests due to not using the correct encoding label.
        assert_equals(frame.contentDocument.characterSet, expectedEncoding);
        t.done();
      });
      frame.src = "resources/mime-charset.py?type=" + encodeForURL(mime);
      document.body.appendChild(frame);
    }, mime);
  });
}
