зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1608489
- Add relative semantics for baseURL r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D65373 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
8fe2efa8d6
Коммит
8e777fed4b
|
@ -106,14 +106,19 @@ already_AddRefed<StyleSheet> StyleSheet::Constructor(
|
|||
MakeRefPtr<StyleSheet>(css::SheetParsingMode::eAuthorSheetFeatures,
|
||||
CORSMode::CORS_NONE, dom::SRIMetadata());
|
||||
|
||||
RefPtr<nsIURI> baseURI = nullptr;
|
||||
// baseURL not yet in the spec. Implemented based on the following discussion:
|
||||
// https://github.com/WICG/construct-stylesheets/issues/95#issuecomment-594217180
|
||||
RefPtr<nsIURI> baseURI;
|
||||
if (!aOptions.mBaseURL.WasPassed()) {
|
||||
baseURI = constructorDocument->GetBaseURI();
|
||||
} else if (NS_FAILED(NS_NewURI(getter_AddRefs(baseURI),
|
||||
aOptions.mBaseURL.Value()))) {
|
||||
aRv.ThrowNotAllowedError(
|
||||
"Constructed style sheets must have a valid base url");
|
||||
return nullptr;
|
||||
} else {
|
||||
nsresult rv = NS_NewURI(getter_AddRefs(baseURI), aOptions.mBaseURL.Value(),
|
||||
nullptr, constructorDocument->GetBaseURI());
|
||||
if (NS_FAILED(rv)) {
|
||||
aRv.ThrowNotAllowedError(
|
||||
"Constructed style sheets must have a valid base URL");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
nsIURI* sheetURI = constructorDocument->GetDocumentURI();
|
||||
|
|
|
@ -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 @@ test(() => {
|
|||
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 @@ test(() => {
|
|||
}, "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>
|
||||
|
|
Загрузка…
Ссылка в новой задаче