gecko-dev/netwerk/test/mochitests/test_user_agent_overrides.html
Brian Grinstead ede8c44ef2 Bug 1544322 - Part 2.1 - Remove the [type] attribute for one-liner <script> tags loading files in /tests/SimpleTest/ in everything except for dom/ r=bzbarsky
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
2019-04-16 03:50:44 +00:00

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>