summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/cssom/CSSStyleSheet-constructable-baseURL.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/cssom/CSSStyleSheet-constructable-baseURL.html')
-rw-r--r--testing/web-platform/tests/css/cssom/CSSStyleSheet-constructable-baseURL.html66
1 files changed, 66 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/cssom/CSSStyleSheet-constructable-baseURL.html b/testing/web-platform/tests/css/cssom/CSSStyleSheet-constructable-baseURL.html
new file mode 100644
index 0000000000..d0f0f828b0
--- /dev/null
+++ b/testing/web-platform/tests/css/cssom/CSSStyleSheet-constructable-baseURL.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<title>CSSStyleSheet baseURL</title>
+<link rel="author" title="Erik Nordin" href="mailto:enordin@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/cssom-1/#dom-cssstylesheetinit-baseurl">
+<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: "https://test:test/"}) });
+}, "Constructing sheet with invalid base URL throws a NotAllowedError");
+
+</script>