Add relative semantics for baseURL

Differential Revision: https://phabricator.services.mozilla.com/D65373

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1608489
gecko-commit: 2c65e495a53e71f45e00ec219a409a8bffb5bee7
gecko-integration-branch: autoland
gecko-reviewers: emilio
diff --git a/css/cssom/CSSStyleSheet-constructable-baseURL.tentative.html b/css/cssom/CSSStyleSheet-constructable-baseURL.tentative.html
index bd4159a..b43ed61 100644
--- a/css/cssom/CSSStyleSheet-constructable-baseURL.tentative.html
+++ b/css/cssom/CSSStyleSheet-constructable-baseURL.tentative.html
@@ -7,10 +7,10 @@
 <script src='/resources/testharnessreport.js'></script>
 <script>
 
-function currentPath() {
-  const pathParts = location.href.split("/")
-  pathParts.pop();
-  return pathParts.join("/");
+function currentLocation() {
+  const sections = location.href.split("/")
+  sections.pop();
+  return sections.join("/");
 }
 
 test(() => {
@@ -24,7 +24,7 @@
   const baseURL = `${location.origin}/custom/path/`;
   const fullURL = `${baseURL}${fileName}`;
 
-  const sheet = new CSSStyleSheet({ baseURL: baseURL });
+  const sheet = new CSSStyleSheet({ baseURL });
   span.shadowRoot.adoptedStyleSheets = [sheet];
 
   sheet.replaceSync(`* { background-image: url("${fileName}"); }`);
@@ -37,7 +37,30 @@
 }, "Constructing sheet with custom base URL ueses that URL for CSS rules");
 
 test(() => {
-  assert_throws_dom("NotAllowedError", () => { new CSSStyleSheet({ baseURL: "::::"}) });
+  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>