mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
ede8c44ef2
This excludes dom/, otherwise the file size is too large for phabricator to handle. This is an autogenerated commit to handle scripts loading mochitest harness files, in the simple case where the script src is on the same line as the tag. This was generated with https://bug1544322.bmoattachments.org/attachment.cgi?id=9058170 using the `--part 2` argument. Differential Revision: https://phabricator.services.mozilla.com/D27456 --HG-- extra : moz-landing-system : lando
248 lines
7.6 KiB
HTML
248 lines
7.6 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=782453
|
|
-->
|
|
<head>
|
|
<title>Test for User Agent Overrides</title>
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<body>
|
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=782453">Mozilla Bug 782453</a>
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none"></div>
|
|
<pre id="test">
|
|
<script class="testbody" type="text/javascript">
|
|
|
|
const PREF_OVERRIDES_ENABLED = "general.useragent.site_specific_overrides";
|
|
const PREF_OVERRIDES_BRANCH = "general.useragent.override.";
|
|
|
|
const DEFAULT_UA = navigator.userAgent;
|
|
|
|
const UA_WHOLE_OVERRIDE = "DummyUserAgent";
|
|
const UA_WHOLE_EXPECTED = UA_WHOLE_OVERRIDE;
|
|
|
|
const UA_PARTIAL_FROM = "\\wozilla"; // /\wozilla
|
|
const UA_PARTIAL_SEP = "#";
|
|
const UA_PARTIAL_TO = UA_WHOLE_OVERRIDE;
|
|
const UA_PARTIAL_OVERRIDE = UA_PARTIAL_FROM + UA_PARTIAL_SEP + UA_PARTIAL_TO;
|
|
const UA_PARTIAL_EXPECTED = DEFAULT_UA.replace(new RegExp(UA_PARTIAL_FROM, 'g'), UA_PARTIAL_TO);
|
|
|
|
const UA_PARTIAL_FROM2 = "[0-9]+";
|
|
const UA_PARTIAL_TO2 = "number";
|
|
const UA_PARTIAL_OVERRIDE2 = UA_PARTIAL_FROM2 + UA_PARTIAL_SEP + UA_PARTIAL_TO2;
|
|
const UA_PARTIAL_EXPECTED2 = DEFAULT_UA.replace(new RegExp(UA_PARTIAL_FROM2, 'g'), UA_PARTIAL_TO2);
|
|
|
|
function testUAIFrame(host, expected, sameQ, message, testNavQ, navSameQ, navMessage, callback) {
|
|
let url = location.pathname;
|
|
url = host + url.slice(0, url.lastIndexOf('/')) + '/user_agent.sjs';
|
|
let ifr = document.createElement('IFRAME');
|
|
|
|
ifr.src = url;
|
|
|
|
document.getElementById('content').appendChild(ifr);
|
|
|
|
window.addEventListener("message", function recv(e) {
|
|
ok(sameQ == (e.data.header.includes(expected)), message);
|
|
if (testNavQ) {
|
|
ok(navSameQ == (e.data.nav.includes(expected)), navMessage);
|
|
}
|
|
window.removeEventListener("message", recv);
|
|
callback();
|
|
});
|
|
|
|
}
|
|
|
|
function testUAIFrameNoNav(host, expected, sameQ, message, callback) {
|
|
testUAIFrame(host, expected, sameQ, message, false, true, '', callback);
|
|
}
|
|
|
|
function testUA(options, callback) {
|
|
var [domain, override, test_hosts, expected] =
|
|
[options.domain, options.override, options.test_hosts, options.expected];
|
|
|
|
(function nextTest() {
|
|
let test_host = test_hosts.shift();
|
|
|
|
info("Overriding " + domain + " with " + override + " for " + test_host);
|
|
|
|
function is_subdomain(host) {
|
|
var [test_domain] = host.slice(host.lastIndexOf('/') + 1).split(':', 1);
|
|
return test_domain === domain || test_domain.endsWith('.' + domain);
|
|
}
|
|
|
|
var localhost = location.origin;
|
|
var overrideNavigator = is_subdomain(localhost);
|
|
var navigator_ua, test_ua;
|
|
|
|
if (overrideNavigator) {
|
|
navigator_ua = navigator.userAgent;
|
|
}
|
|
|
|
let url = location.pathname;
|
|
url = test_host + url.slice(0, url.lastIndexOf('/')) + '/user_agent.sjs';
|
|
let ifr = document.createElement('IFRAME');
|
|
ifr.src = url;
|
|
|
|
document.getElementById('content').appendChild(ifr);
|
|
|
|
window.addEventListener("message", function recv(e) {
|
|
test_ua = e.data.header;
|
|
SpecialPowers.pushPrefEnv({
|
|
set: [[PREF_OVERRIDES_BRANCH + domain, override]],
|
|
}, function () {
|
|
testUAIFrame(test_host, expected, true, 'Header UA not overridden at step ' + (++step), true,
|
|
true, 'Navigator UA not overridden at step ' + (++step), function () {
|
|
// clear the override pref to undo overriding the UA
|
|
SpecialPowers.pushPrefEnv({
|
|
clear: [[PREF_OVERRIDES_BRANCH + domain]],
|
|
}, function () {
|
|
testUAIFrameNoNav(test_host, test_ua, true, 'Header UA not restored at step ' + (++step), function() {
|
|
test_hosts.length ? nextTest() : callback();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
window.removeEventListener("message", recv);
|
|
});
|
|
})();
|
|
}
|
|
|
|
var step = 0; // for logging
|
|
var tests = [
|
|
// should override both header and navigator.userAgent
|
|
{
|
|
domain: location.hostname,
|
|
override: UA_WHOLE_OVERRIDE,
|
|
test_hosts: [location.origin],
|
|
expected: UA_WHOLE_EXPECTED
|
|
},
|
|
|
|
// should support partial overrides
|
|
{
|
|
domain: location.hostname,
|
|
override: UA_PARTIAL_OVERRIDE,
|
|
test_hosts: [location.origin],
|
|
expected: UA_PARTIAL_EXPECTED
|
|
},
|
|
|
|
{
|
|
domain: location.hostname,
|
|
override: UA_PARTIAL_OVERRIDE2,
|
|
test_hosts: [location.origin],
|
|
expected: UA_PARTIAL_EXPECTED2
|
|
},
|
|
|
|
// should match domain and subdomains
|
|
{
|
|
domain: 'example.org',
|
|
override: UA_WHOLE_OVERRIDE,
|
|
test_hosts: ['http://example.org',
|
|
'http://test1.example.org',
|
|
'http://sub1.test1.example.org'],
|
|
expected: UA_WHOLE_EXPECTED
|
|
},
|
|
|
|
// should not match superdomains
|
|
{
|
|
domain: 'sub1.test1.example.org',
|
|
override: UA_WHOLE_OVERRIDE,
|
|
test_hosts: ['http://example.org',
|
|
'http://test1.example.org'],
|
|
expected: DEFAULT_UA
|
|
},
|
|
|
|
// should work with https
|
|
{
|
|
domain: 'example.com',
|
|
override: UA_WHOLE_OVERRIDE,
|
|
test_hosts: ['https://example.com',
|
|
'https://test1.example.com',
|
|
'https://sub1.test1.example.com'],
|
|
expected: UA_WHOLE_EXPECTED
|
|
},
|
|
];
|
|
|
|
// test that UA is not overridden when the 'site_specific_overrides' pref is off
|
|
function testInactive(callback) {
|
|
SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
[PREF_OVERRIDES_ENABLED, false],
|
|
[PREF_OVERRIDES_BRANCH + location.hostname, UA_WHOLE_OVERRIDE]
|
|
]
|
|
}, function () {
|
|
testUAIFrame(location.origin, UA_WHOLE_OVERRIDE, false, 'Failed to disabled header UA override at step ' + (++step),
|
|
true, false, 'Failed to disable navigator UA override at step + ' + (++step), function () {
|
|
SpecialPowers.pushPrefEnv({
|
|
clear: [
|
|
[PREF_OVERRIDES_ENABLED],
|
|
[PREF_OVERRIDES_BRANCH + location.hostname]
|
|
]
|
|
}, callback);
|
|
});
|
|
});
|
|
}
|
|
|
|
function testPriority(callback) {
|
|
// foo.bar.com override should have priority over bar.com override
|
|
var tests = [
|
|
['example.org', 'test1.example.org', 'sub1.test1.example.org'],
|
|
['example.org', 'test1.example.org', 'sub2.test1.example.org'],
|
|
['example.org', 'test2.example.org', 'sub1.test2.example.org'],
|
|
['example.org', 'test2.example.org', 'sub2.test2.example.org'],
|
|
];
|
|
(function nextTest() {
|
|
var [level0, level1, level2] = tests.shift();
|
|
var host = 'http://' + level2;
|
|
SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
[PREF_OVERRIDES_ENABLED, true],
|
|
[PREF_OVERRIDES_BRANCH + level1, UA_WHOLE_OVERRIDE]
|
|
]
|
|
}, function () {
|
|
// should use first override at this point
|
|
testUAIFrameNoNav(host, UA_WHOLE_EXPECTED, true, 'UA not overridden at step ' + (++step), function() {
|
|
// add a second override that should be used
|
|
testUA({
|
|
domain: level2,
|
|
override: UA_PARTIAL_OVERRIDE,
|
|
test_hosts: [host],
|
|
expected: UA_PARTIAL_EXPECTED
|
|
}, function () {
|
|
// add a third override that should not be used
|
|
testUA({
|
|
domain: level0,
|
|
override: UA_PARTIAL_OVERRIDE,
|
|
test_hosts: [host],
|
|
expected: UA_WHOLE_EXPECTED
|
|
}, tests.length ? nextTest : callback);
|
|
});
|
|
});
|
|
});
|
|
})();
|
|
}
|
|
|
|
function testOverrides(callback) {
|
|
SpecialPowers.pushPrefEnv({
|
|
set: [[PREF_OVERRIDES_ENABLED, true]]
|
|
}, function nextTest() {
|
|
testUA(tests.shift(), function() { tests.length ? nextTest() : callback() });
|
|
});
|
|
}
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
SimpleTest.requestCompleteLog();
|
|
SimpleTest.requestLongerTimeout(5);
|
|
|
|
testOverrides(function() {
|
|
testInactive(function() {
|
|
testPriority(SimpleTest.finish)
|
|
});
|
|
});
|
|
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|