Allow protocol relative URLs in CssLink Transformer
This commit allows the use of "protcol relative URLs" (i.e. URLs without scheme, starting with `//`), often used to serve resources automatically from https or http with third party domains. This syntax is allowed by RFC 3986. Issue: SPR-12632
This commit is contained in:
parent
bf7a9754d5
commit
028c0e8b80
|
@ -123,7 +123,8 @@ public class CssLinkResourceTransformer extends ResourceTransformerSupport {
|
|||
|
||||
private boolean hasScheme(String link) {
|
||||
int schemeIndex = link.indexOf(":");
|
||||
return schemeIndex > 0 && !link.substring(0, schemeIndex).contains("/");
|
||||
return (schemeIndex > 0 && !link.substring(0, schemeIndex).contains("/"))
|
||||
|| link.indexOf("//") == 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -99,7 +99,8 @@ public class CssLinkResourceTransformerTests {
|
|||
TransformedResource transformedResource = (TransformedResource) resource;
|
||||
|
||||
String expected = "@import url(\"http://example.org/fonts/css\");\n" +
|
||||
"body { background: url(\"file:///home/spring/image.png\") }";
|
||||
"body { background: url(\"file:///home/spring/image.png\") }\n" +
|
||||
"figure { background: url(\"//example.org/style.css\")}";
|
||||
String result = new String(transformedResource.getByteArray(), "UTF-8");
|
||||
result = StringUtils.deleteAny(result, "\r");
|
||||
assertEquals(expected, result);
|
||||
|
@ -108,6 +109,8 @@ public class CssLinkResourceTransformerTests {
|
|||
.resolveUrlPath("http://example.org/fonts/css", Arrays.asList(externalCss));
|
||||
Mockito.verify(resolverChain, Mockito.never())
|
||||
.resolveUrlPath("file:///home/spring/image.png", Arrays.asList(externalCss));
|
||||
Mockito.verify(resolverChain, Mockito.never())
|
||||
.resolveUrlPath("//example.org/style.css", Arrays.asList(externalCss));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
@import url("http://example.org/fonts/css");
|
||||
body { background: url("file:///home/spring/image.png") }
|
||||
body { background: url("file:///home/spring/image.png") }
|
||||
figure { background: url("//example.org/style.css")}
|
Loading…
Reference in New Issue