blob: bad2fa5f172d34d86d55b21bad03af70886689cf [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(
`Tests that URLs are linked to and completed correctly. Bugs 51663, 53171, 62643, 72373, 79905\n`);
await TestRunner.loadModule('elements_test_runner');
await TestRunner.showPanel('elements');
await TestRunner.loadHTML(`
<div id="local"></div>
<iframe src="../styles/resources/styles-url-linkify-iframe.html"></iframe>
`);
await TestRunner.addStylesheetTag('../styles/resources/styles-url-linkify.css');
function completeURL(baseURL, href) {
TestRunner.addResult(Common.ParsedURL.completeURL(baseURL, href));
}
TestRunner.addResult('URLs completed:');
completeURL('http://example.com', '/');
completeURL('http://example.com', 'moo');
completeURL('http://example.com/', 'https://secure.com/moo');
completeURL('https://example.com/foo', '//secure.com/moo');
completeURL('http://example.com/foo/zoo', '/moo');
completeURL('http://example.com/foo/zoo/', 'moo');
completeURL('http://example.com/foo/zoo', 'boo/moo');
completeURL('http://example.com/foo', 'moo');
completeURL('http://example.com/foo', '?a=b');
completeURL('http://example.com/foo', '?a=/b');
completeURL('http://example.com/?c=/d#anchor', '?a=/b');
completeURL('http://example.com/foo?c=d', '?a=b');
completeURL('http://example.com/foo?c=d#anchor', '?a=/b');
completeURL('http://example.com/foo?c=/d/e', '?a=b');
completeURL('http://example.com/foo?c=/d/e', 'cat.jpeg');
completeURL('http://example.com/foo#anchor', 'cat.jpeg');
completeURL('http://example.com/', '/foo?bar=http://otherexample.com');
const dataURL =
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAABCAgMAAACeOuh7AAAABGdBTUEAAK/INwWK6QAAAAlQTFRF////AAAA////fu+PTwAAAAF0Uk5TAEDm2GYAAACHSURBVDjLxdLbDYAgDAVQGELn0R3oEHYf2KGdUqtE46OFRCP3oyTng1xCnWsaD5JRRtCkQ2YmkBkHRXqWJBn0j0TICbrsWVoWhRShCdcGyZCtHxMaUnVPRZ9KSbmBJdsX2vJVnwqRD0Rb4rpzgIbE/AI5NTnWAMvy5l0dXrfuLh5OCe5BmmYGXhTUxlQ5xJ8AAAAASUVORK5CYII=';
const blobURL = 'blob:http://example.com/f91b7b00-00-0000-0000-3b7c87055d7a';
completeURL('https://example.com/foo', dataURL);
completeURL('http://example.com/foo', 'javascript:alert(\'foo\');');
completeURL('http://example.com/foo', blobURL);
completeURL('', blobURL);
function dumpHref(dumpLinkClass) {
var hrefNode;
var valueChildNodes =
ElementsTestRunner.firstMatchedStyleSection().propertiesTreeOutline.firstChild().valueElement.childNodes;
for (var i = 0; i < valueChildNodes.length; ++i) {
if (valueChildNodes[i].href) {
hrefNode = valueChildNodes[i];
break;
}
}
if (!hrefNode) {
TestRunner.addResult('href property not found');
return;
}
var styleClass = '';
if (dumpLinkClass) {
if (hrefNode.classList.contains('devtools-link'))
styleClass += 'devtools-link ';
}
var href = hrefNode.href;
var segments = href.split('/');
var output = [];
for (var i = segments.length - 1, minSegment = i - 3; i >= 0 && i >= minSegment; --i)
output.unshift(segments[i]);
TestRunner.addResult(styleClass + output.join('/'));
}
ElementsTestRunner.selectNodeAndWaitForStyles('local', step1);
function step1() {
TestRunner.addResult('Link for a URI from CSS document:');
dumpHref(true);
ElementsTestRunner.selectNodeAndWaitForStyles('iframed', step2);
}
function step2() {
TestRunner.addResult('Link for a URI from iframe inline stylesheet:');
dumpHref();
TestRunner.completeTest();
}
})();