<!DOCTYPE html>
<title>CSSStyleSheet baseURL</title>
<link rel="author" title="Erik Nordin" href="mailto:enordin@mozilla.com">
<link rel="help" href="https://github.com/WICG/construct-stylesheets/issues/95#issuecomment-593545252">
<div id="target"></div>
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<script>

function currentLocation() {
  const sections = location.href.split("/")
  sections.pop();
  return sections.join("/");
}

test(() => {
  const span = document.createElement("span");
  target.appendChild(span);
  span.attachShadow({ mode: "open" })
  const shadowDiv = document.createElement("div");
  span.shadowRoot.appendChild(shadowDiv);

  const fileName = "example.png"
  const baseURL = `${location.origin}/custom/path/`;
  const fullURL = `${baseURL}${fileName}`;

  const sheet = new CSSStyleSheet({ baseURL });
  span.shadowRoot.adoptedStyleSheets = [sheet];

  sheet.replaceSync(`* { background-image: url("${fileName}"); }`);
  const styleFromRelative = getComputedStyle(shadowDiv).backgroundImage;

  sheet.replaceSync(`* { background-image: url("${fullURL}"); }`);
  const styleFromFull = getComputedStyle(shadowDiv).backgroundImage;

  assert_equals(styleFromRelative, styleFromFull);
}, "Constructing sheet with custom base URL ueses that URL for CSS rules");

test(() => {
  const span = document.createElement("span");
  target.appendChild(span);
  span.attachShadow({ mode: "open" })
  const shadowDiv = document.createElement("div");
  span.shadowRoot.appendChild(shadowDiv);

  const fileName = "example.png"
  const baseURL = "custom/path/";
  const fullURL = `${currentLocation()}/${baseURL}${fileName}`;

  const sheet = new CSSStyleSheet({ baseURL });
  span.shadowRoot.adoptedStyleSheets = [sheet];

  sheet.replaceSync(`* { background-image: url("${fileName}"); }`);
  const styleFromRelative = getComputedStyle(shadowDiv).backgroundImage;

  sheet.replaceSync(`* { background-image: url("${fullURL}"); }`);
  const styleFromFull = getComputedStyle(shadowDiv).backgroundImage;

  assert_equals(styleFromRelative, styleFromFull);
}, "Constructing sheet with relative URL adds to the constructor document's base URL");

test(() => {
  assert_throws_dom("NotAllowedError", () => { new CSSStyleSheet({ baseURL: "chrome://"}) });
}, "Constructing sheet with invalid base URL throws a NotAllowedError");

</script>
