mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 23:05:42 +00:00
Merge mozilla-central to fx-team
This commit is contained in:
commit
29138d083f
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="27eb2f04e149fc2c9976d881b1b5984bbe7ee089"/>
|
||||
|
@ -17,7 +17,7 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="f5d65f5b17d9766d7925aefd0486a1e526ae9bf0"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="c6cace53426b5be7e56c0fd202118009689bc707"/>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="c9d4fe680662ee44a4bdea42ae00366f5df399cf">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="27eb2f04e149fc2c9976d881b1b5984bbe7ee089"/>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"git": {
|
||||
"git_revision": "4d9b996be4b1935651057d0651461c1a36d98a18",
|
||||
"git_revision": "f37e8f732e0af961b43e912629c84c9e2ceda55d",
|
||||
"remote": "https://git.mozilla.org/releases/gaia.git",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "616fa9b10c5e498a185d34f6da3cbd69fe2d0a24",
|
||||
"revision": "f894ddb1493cd8cdd3d3f807d784bce313e3eb9f",
|
||||
"repo_path": "integration/gaia-central"
|
||||
}
|
||||
|
@ -17,7 +17,7 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="f5d65f5b17d9766d7925aefd0486a1e526ae9bf0"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="c6cace53426b5be7e56c0fd202118009689bc707"/>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="c9d4fe680662ee44a4bdea42ae00366f5df399cf">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4d9b996be4b1935651057d0651461c1a36d98a18"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f37e8f732e0af961b43e912629c84c9e2ceda55d"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9e2923fd6cab93cf88b4b9ada82225e44fe6635"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
@ -276,6 +276,8 @@ add_task(function() {
|
||||
add_task(function() {
|
||||
this.otherWin = yield openAndLoadWindow(null, true);
|
||||
|
||||
yield new Promise(resolve => waitForFocus(resolve, this.otherWin));
|
||||
|
||||
yield startCustomizing(this.otherWin);
|
||||
|
||||
let contextMenu = this.otherWin.document.getElementById("customizationPanelItemContextMenu");
|
||||
@ -298,6 +300,8 @@ add_task(function() {
|
||||
yield endCustomizing(this.otherWin);
|
||||
yield promiseWindowClosed(this.otherWin);
|
||||
this.otherWin = null;
|
||||
|
||||
yield new Promise(resolve => waitForFocus(resolve, window));
|
||||
});
|
||||
|
||||
// Bug 945191 - Combined buttons show wrong context menu options
|
||||
|
10
dom/base/test/file_change_policy_redirect.html
Normal file
10
dom/base/test/file_change_policy_redirect.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<script>
|
||||
parent.postMessage('childLoadComplete', 'http://mochi.test:8888');
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
@ -254,6 +254,8 @@ support-files =
|
||||
performance_observer.html
|
||||
test_anonymousContent_style_csp.html^headers^
|
||||
file_explicit_user_agent.sjs
|
||||
referrer_change_server.sjs
|
||||
file_change_policy_redirect.html
|
||||
|
||||
[test_anonymousContent_api.html]
|
||||
[test_anonymousContent_append_after_reflow.html]
|
||||
@ -845,3 +847,5 @@ support-files = worker_postMessages.js
|
||||
[test_frameLoader_switchProcess.html]
|
||||
skip-if = e10s || os != 'linux' || buildapp != 'browser'
|
||||
[test_explicit_user_agent.html]
|
||||
[test_change_policy.html]
|
||||
skip-if = buildapp == 'b2g' #no ssl support
|
||||
|
139
dom/base/test/referrer_change_server.sjs
Normal file
139
dom/base/test/referrer_change_server.sjs
Normal file
@ -0,0 +1,139 @@
|
||||
var BASE_URL = 'example.com/tests/dom/base/test/referrer_change_server.sjs';
|
||||
|
||||
function createTestUrl(aPolicy, aAction, aName) {
|
||||
return 'http://' + BASE_URL + '?' +
|
||||
'action=' + aAction + '&' +
|
||||
'policy=' + aPolicy + '&' +
|
||||
'name=' + aName + '&' +
|
||||
'type=link';
|
||||
}
|
||||
|
||||
function createTest(aMetaPolicy, aReferrerPolicy, aName) {
|
||||
return '<!DOCTYPE HTML>\n\
|
||||
<html>'+
|
||||
'<meta name="referrer" content="' + aMetaPolicy + '">' +
|
||||
'<body>' +
|
||||
'<a href="' + createTestUrl(aReferrerPolicy, 'test', aName + aReferrerPolicy) + '" id="link">' + aReferrerPolicy + '</a>' +
|
||||
'<script>' +
|
||||
|
||||
// LOAD EVENT (of the test)
|
||||
// fires when the page is loaded, then click link
|
||||
// first change meta referrer, then click link
|
||||
'window.addEventListener("load", function() {\n\
|
||||
document.getElementsByName("referrer")[0].content = "'+aReferrerPolicy+'";\n\
|
||||
document.getElementById("link").click();\n\
|
||||
}.bind(window), false);' +
|
||||
|
||||
'</script>\n\
|
||||
</body>\n\
|
||||
</html>';
|
||||
}
|
||||
|
||||
function createTest2(aMetaPolicy, aReferrerPolicy, aName) {
|
||||
return '<!DOCTYPE HTML>\n\
|
||||
<html>'+
|
||||
'<meta name="referrer" content="' + aMetaPolicy + '">' +
|
||||
'<body>' +
|
||||
'<a href="' + createTestUrl(aReferrerPolicy, 'test', aName + aReferrerPolicy) + '" id="link">' + aReferrerPolicy + '</a>' +
|
||||
'<script>' +
|
||||
|
||||
// LOAD EVENT (of the test)
|
||||
// fires when the page is loaded, then click link
|
||||
// first change meta referrer, then click link
|
||||
'window.addEventListener("load", function() {\n\
|
||||
document.getElementsByName("referrer")[0].setAttribute("content", "'+aReferrerPolicy+'");\n\
|
||||
document.getElementById("link").click();\n\
|
||||
}.bind(window), false);' +
|
||||
|
||||
'</script>\n\
|
||||
</body>\n\
|
||||
</html>';
|
||||
}
|
||||
|
||||
function handleRequest(request, response) {
|
||||
var sharedKey = 'referrer_change_server.sjs';
|
||||
var params = request.queryString.split('&');
|
||||
var action = params[0].split('=')[1];
|
||||
|
||||
if (action === 'resetState') {
|
||||
var state = getSharedState(sharedKey);
|
||||
state = {};
|
||||
setSharedState(sharedKey, JSON.stringify(state));
|
||||
response.write("");
|
||||
return;
|
||||
} else if (action === 'test') {
|
||||
// ?action=test&policy=origin&name=name
|
||||
var policy = params[1].split('=')[1];
|
||||
var name = params[2].split('=')[1];
|
||||
var type = params[3].split('=')[1];
|
||||
var result = getSharedState(sharedKey);
|
||||
|
||||
if (result === '') {
|
||||
result = {};
|
||||
} else {
|
||||
result = JSON.parse(result);
|
||||
}
|
||||
|
||||
if (!result["tests"]) {
|
||||
result["tests"] = {};
|
||||
}
|
||||
|
||||
var referrerLevel = "none";
|
||||
var test = {}
|
||||
if (request.hasHeader('Referer')) {
|
||||
let referrer = request.getHeader('Referer');
|
||||
if (referrer.indexOf("referrer_change_server") > 0) {
|
||||
referrerLevel = "full";
|
||||
} else if (referrer == "http://mochi.test:8888") {
|
||||
referrerLevel = "origin";
|
||||
}
|
||||
test.referrer = request.getHeader('Referer');
|
||||
} else {
|
||||
test.referrer = '';
|
||||
}
|
||||
test.policy = referrerLevel;
|
||||
test.expected = policy;
|
||||
|
||||
result["tests"][name] = test;
|
||||
|
||||
setSharedState(sharedKey, JSON.stringify(result));
|
||||
|
||||
// forward link click to redirect URL to finish test
|
||||
if (type === 'link') {
|
||||
var loc = 'https://example.com/tests/dom/base/test/file_change_policy_redirect.html';
|
||||
response.setStatusLine('1.1', 302, 'Found');
|
||||
response.setHeader('Location', loc, false);
|
||||
}
|
||||
|
||||
return;
|
||||
} else if (action === 'get-test-results') {
|
||||
// ?action=get-result
|
||||
response.setHeader('Cache-Control', 'no-cache', false);
|
||||
response.setHeader('Content-Type', 'text/plain', false);
|
||||
response.write(getSharedState(sharedKey));
|
||||
return;
|
||||
} else if (action === 'generate-policy-test') {
|
||||
// ?action=generate-policy-test&referrerPolicy=b64-encoded-string&name=name&newPolicy=b64-encoded-string
|
||||
response.setHeader('Cache-Control', 'no-cache', false);
|
||||
response.setHeader('Content-Type', 'text/html; charset=utf-8', false);
|
||||
var referrerPolicy = unescape(params[1].split('=')[1]);
|
||||
var name = unescape(params[2].split('=')[1]);
|
||||
var newPolicy = params[3].split('=')[1];
|
||||
|
||||
response.write(createTest(referrerPolicy, newPolicy, name));
|
||||
return;
|
||||
} else if (action === 'generate-policy-test2') {
|
||||
// ?action=generate-policy-test2&referrerPolicy=b64-encoded-string&name=name&newPolicy=b64-encoded-string
|
||||
response.setHeader('Cache-Control', 'no-cache', false);
|
||||
response.setHeader('Content-Type', 'text/html; charset=utf-8', false);
|
||||
var referrerPolicy = unescape(params[1].split('=')[1]);
|
||||
var name = unescape(params[2].split('=')[1]);
|
||||
var newPolicy = params[3].split('=')[1];
|
||||
|
||||
response.write(createTest2(referrerPolicy, newPolicy, name));
|
||||
return;
|
||||
} else {
|
||||
response.write("I don't know action "+action);
|
||||
return;
|
||||
}
|
||||
}
|
@ -39,6 +39,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=682592
|
||||
*/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.requestLongerTimeout(2);
|
||||
if (navigator.platform.startsWith("Linux arm")) { /* bugs 982875, 999429 */
|
||||
SimpleTest.expectAssertions(0, 4);
|
||||
}
|
||||
|
129
dom/base/test/test_change_policy.html
Normal file
129
dom/base/test/test_change_policy.html
Normal file
@ -0,0 +1,129 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test policies for Bug 1101288</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
|
||||
<!--
|
||||
This checks if the right policies are applied from a given string when the policy is changed after the document has been loaded.
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=1101288
|
||||
-->
|
||||
<script type="application/javascript;version=1.7">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
var advance = function() { tests.next(); };
|
||||
|
||||
/**
|
||||
* Listen for notifications from the child.
|
||||
* These are sent in case of error, or when the loads we await have completed.
|
||||
*/
|
||||
window.addEventListener("message", function(event) {
|
||||
if (event.data == "childLoadComplete") {
|
||||
// all loads happen, continue the test.
|
||||
advance();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* helper to perform an XHR.
|
||||
*/
|
||||
function doXHR(aUrl, onSuccess, onFail) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.responseType = "json";
|
||||
xhr.onload = function () {
|
||||
onSuccess(xhr);
|
||||
};
|
||||
xhr.onerror = function () {
|
||||
onFail(xhr);
|
||||
};
|
||||
xhr.open('GET', aUrl, true);
|
||||
xhr.send(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Grabs the results via XHR and passes to checker.
|
||||
*/
|
||||
function checkIndividualResults(aTestname, aExpectedReferrer, aName) {
|
||||
doXHR('/tests/dom/base/test/referrer_change_server.sjs?action=get-test-results',
|
||||
function(xhr) {
|
||||
var results = xhr.response;
|
||||
info(JSON.stringify(xhr.response));
|
||||
|
||||
for (i in aName) {
|
||||
ok(aName[i] in results.tests, aName[i] + " tests have to be performed.");
|
||||
is(results.tests[aName[i]].policy, aExpectedReferrer[i], aTestname + ' --- ' + results.tests[aName[i]].policy + ' (' + results.tests[aName[i]].referrer + ')');
|
||||
}
|
||||
advance();
|
||||
},
|
||||
function(xhr) {
|
||||
ok(false, "Can't get results from the counter server.");
|
||||
SimpleTest.finish();
|
||||
});
|
||||
}
|
||||
|
||||
function resetState() {
|
||||
doXHR('/tests/dom/base/test/referrer_change_server.sjs?action=resetState',
|
||||
advance,
|
||||
function(xhr) {
|
||||
ok(false, "error in reset state");
|
||||
SimpleTest.finish();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This is the main test routine -- serialized by use of a generator.
|
||||
* It resets the counter, then performs two tests in sequence using
|
||||
* the same iframe.
|
||||
*/
|
||||
var tests = (function() {
|
||||
var iframe = document.getElementById("testframe");
|
||||
var sjs = "/tests/dom/base/test/referrer_change_server.sjs?action=generate-policy-test";
|
||||
|
||||
yield resetState();
|
||||
var name = "no-referrer-unsafe-url";
|
||||
yield iframe.src = sjs + "&policy=" + escape('no-referrer') + "&name=" + name + "&newPolicy=" + escape('unsafe-url');
|
||||
yield checkIndividualResults("unsafe-url (changed) with no-referrer first", ["full"], [name+'unsafe-url']);
|
||||
|
||||
yield resetState();
|
||||
var name = "origin-no-referrer";
|
||||
yield iframe.src = sjs + "&policy=" + escape('origin') + "&name=" + name + "&newPolicy=" + escape('no-referrer');
|
||||
yield checkIndividualResults("no-referrer (changed) with origin first", ["none"], [name+'no-referrer']);
|
||||
|
||||
yield resetState();
|
||||
var name = "unsafe-url-no-referrer";
|
||||
yield iframe.src = sjs + "&policy=" + escape('unsafe-url') + "&name=" + name + "&newPolicy=" + escape('no-referrer');
|
||||
yield checkIndividualResults("no-referrer (changed) with unsafe-url first", ["none"], [name+'no-referrer']);
|
||||
|
||||
sjs = "/tests/dom/base/test/referrer_change_server.sjs?action=generate-policy-test2";
|
||||
|
||||
yield resetState();
|
||||
var name = "no-referrer-unsafe-url";
|
||||
yield iframe.src = sjs + "&policy=" + escape('no-referrer') + "&name=" + name + "&newPolicy=" + escape('unsafe-url');
|
||||
yield checkIndividualResults("unsafe-url (changed) with no-referrer first", ["full"], [name+'unsafe-url']);
|
||||
|
||||
yield resetState();
|
||||
var name = "origin-no-referrer";
|
||||
yield iframe.src = sjs + "&policy=" + escape('origin') + "&name=" + name + "&newPolicy=" + escape('no-referrer');
|
||||
yield checkIndividualResults("no-referrer (changed) with origin first", ["none"], [name+'no-referrer']);
|
||||
|
||||
yield resetState();
|
||||
var name = "unsafe-url-no-referrer";
|
||||
yield iframe.src = sjs + "&policy=" + escape('unsafe-url') + "&name=" + name + "&newPolicy=" + escape('no-referrer');
|
||||
yield checkIndividualResults("no-referrer (changed) with unsafe-url first", ["none"], [name+'no-referrer']);
|
||||
|
||||
// complete. Be sure to yield so we don't call this twice.
|
||||
yield SimpleTest.finish();
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="tests.next();">
|
||||
<iframe id="testframe"></iframe>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -41,6 +41,3 @@ include('/ipc/chromium/chromium-config.mozbuild')
|
||||
LOCAL_INCLUDES += [
|
||||
'/dom/base',
|
||||
]
|
||||
|
||||
if CONFIG['CLANG_CXX']:
|
||||
ALLOW_COMPILER_WARNINGS = True
|
||||
|
@ -48,14 +48,33 @@ HTMLMetaElement::SetItemValueText(const nsAString& aValue)
|
||||
SetContent(aValue);
|
||||
}
|
||||
|
||||
nsresult
|
||||
HTMLMetaElement::SetMetaReferrer(nsIDocument* aDocument)
|
||||
{
|
||||
if (!aDocument ||
|
||||
!AttrValueIs(kNameSpaceID_None, nsGkAtoms::name, nsGkAtoms::referrer, eIgnoreCase)) {
|
||||
return NS_OK;
|
||||
}
|
||||
nsAutoString content;
|
||||
nsresult rv = GetContent(content);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
Element* headElt = aDocument->GetHeadElement();
|
||||
if (headElt && nsContentUtils::ContentIsDescendantOf(this, headElt)) {
|
||||
content = nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(content);
|
||||
aDocument->SetHeaderData(nsGkAtoms::referrer, content);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
HTMLMetaElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify)
|
||||
{
|
||||
if (aNameSpaceID == kNameSpaceID_None) {
|
||||
nsIDocument *document = GetUncomposedDoc();
|
||||
if (aName == nsGkAtoms::content) {
|
||||
nsIDocument *document = GetUncomposedDoc();
|
||||
if (document && AttrValueIs(kNameSpaceID_None, nsGkAtoms::name,
|
||||
nsGkAtoms::viewport, eIgnoreCase)) {
|
||||
nsAutoString content;
|
||||
@ -65,6 +84,11 @@ HTMLMetaElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
|
||||
}
|
||||
CreateAndDispatchEvent(document, NS_LITERAL_STRING("DOMMetaChanged"));
|
||||
}
|
||||
// Update referrer policy when it got changed from JS
|
||||
nsresult rv = SetMetaReferrer(document);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
return nsGenericHTMLElement::AfterSetAttr(aNameSpaceID, aName, aValue,
|
||||
@ -87,19 +111,11 @@ HTMLMetaElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsContentUtils::ProcessViewportInfo(aDocument, content);
|
||||
}
|
||||
if (aDocument &&
|
||||
AttrValueIs(kNameSpaceID_None, nsGkAtoms::name, nsGkAtoms::referrer, eIgnoreCase)) {
|
||||
nsAutoString content;
|
||||
rv = GetContent(content);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Referrer Policy spec requires a <meta name="referrer" tag to be in the
|
||||
// <head> element.
|
||||
Element* headElt = aDocument->GetHeadElement();
|
||||
if (headElt && nsContentUtils::ContentIsDescendantOf(this, headElt)) {
|
||||
content = nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(content);
|
||||
aDocument->SetHeaderData(nsGkAtoms::referrer, content);
|
||||
}
|
||||
// Referrer Policy spec requires a <meta name="referrer" tag to be in the
|
||||
// <head> element.
|
||||
rv = SetMetaReferrer(aDocument);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
CreateAndDispatchEvent(aDocument, NS_LITERAL_STRING("DOMMetaAdded"));
|
||||
return rv;
|
||||
|
@ -67,6 +67,9 @@ protected:
|
||||
|
||||
virtual void GetItemValueText(DOMString& text) override;
|
||||
virtual void SetItemValueText(const nsAString& text) override;
|
||||
|
||||
private:
|
||||
nsresult SetMetaReferrer(nsIDocument* aDocument);
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
@ -193,44 +193,9 @@ DecodedStreamData::SetPlaying(bool aPlaying)
|
||||
}
|
||||
}
|
||||
|
||||
class OutputStreamListener : public MediaStreamListener {
|
||||
typedef MediaStreamListener::MediaStreamGraphEvent MediaStreamGraphEvent;
|
||||
public:
|
||||
explicit OutputStreamListener(OutputStreamData* aOwner) : mOwner(aOwner) {}
|
||||
|
||||
void NotifyEvent(MediaStreamGraph* aGraph, MediaStreamGraphEvent event) override
|
||||
{
|
||||
if (event == EVENT_FINISHED) {
|
||||
nsCOMPtr<nsIRunnable> r = NS_NewRunnableMethod(
|
||||
this, &OutputStreamListener::DoNotifyFinished);
|
||||
aGraph->DispatchToMainThreadAfterStreamStateUpdate(r.forget());
|
||||
}
|
||||
}
|
||||
|
||||
void Forget()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mOwner = nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
void DoNotifyFinished()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
if (mOwner) {
|
||||
// Remove the finished stream so it won't block the decoded stream.
|
||||
mOwner->Remove();
|
||||
}
|
||||
}
|
||||
|
||||
// Main thread only
|
||||
OutputStreamData* mOwner;
|
||||
};
|
||||
|
||||
OutputStreamData::~OutputStreamData()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mListener->Forget();
|
||||
// Break the connection to the input stream if necessary.
|
||||
if (mPort) {
|
||||
mPort->Destroy();
|
||||
@ -242,8 +207,6 @@ OutputStreamData::Init(OutputStreamManager* aOwner, ProcessedMediaStream* aStrea
|
||||
{
|
||||
mOwner = aOwner;
|
||||
mStream = aStream;
|
||||
mListener = new OutputStreamListener(this);
|
||||
aStream->AddListener(mListener);
|
||||
}
|
||||
|
||||
void
|
||||
@ -282,13 +245,6 @@ OutputStreamData::Disconnect()
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
OutputStreamData::Remove()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mOwner->Remove(mStream);
|
||||
}
|
||||
|
||||
MediaStreamGraph*
|
||||
OutputStreamData::Graph() const
|
||||
{
|
||||
|
@ -26,17 +26,12 @@ class MediaData;
|
||||
class MediaInputPort;
|
||||
class MediaStream;
|
||||
class MediaStreamGraph;
|
||||
class OutputStreamListener;
|
||||
class OutputStreamManager;
|
||||
class ProcessedMediaStream;
|
||||
class TimeStamp;
|
||||
|
||||
template <class T> class MediaQueue;
|
||||
|
||||
namespace layers {
|
||||
class Image;
|
||||
} // namespace layers
|
||||
|
||||
class OutputStreamData {
|
||||
public:
|
||||
~OutputStreamData();
|
||||
@ -47,9 +42,6 @@ public:
|
||||
// Disconnect mStream from its input stream.
|
||||
// Return false is mStream is already destroyed, otherwise true.
|
||||
bool Disconnect();
|
||||
// Called by OutputStreamListener to remove self from the output streams
|
||||
// managed by OutputStreamManager.
|
||||
void Remove();
|
||||
// Return true if aStream points to the same object as mStream.
|
||||
// Used by OutputStreamManager to remove an output stream.
|
||||
bool Equals(MediaStream* aStream)
|
||||
@ -64,7 +56,6 @@ private:
|
||||
nsRefPtr<ProcessedMediaStream> mStream;
|
||||
// mPort connects our mStream to an input stream.
|
||||
nsRefPtr<MediaInputPort> mPort;
|
||||
nsRefPtr<OutputStreamListener> mListener;
|
||||
};
|
||||
|
||||
class OutputStreamManager {
|
||||
|
@ -993,13 +993,18 @@ NetworkManager.prototype = {
|
||||
});
|
||||
},
|
||||
|
||||
_setDefaultRouteAndProxy: function(aNetwork, aOldInterface) {
|
||||
_setDefaultRouteAndProxy: function(aNetwork, aOldNetwork) {
|
||||
if (aOldNetwork) {
|
||||
return this._removeDefaultRoute(aOldNetwork.info)
|
||||
.then(() => this._setDefaultRouteAndProxy(aNetwork, null));
|
||||
}
|
||||
|
||||
return new Promise((aResolve, aReject) => {
|
||||
let networkInfo = aNetwork.info;
|
||||
let gateways = networkInfo.getGateways();
|
||||
let oldInterfaceName = (aOldInterface ? aOldInterface.info.name : "");
|
||||
|
||||
gNetworkService.setDefaultRoute(networkInfo.name, gateways.length, gateways,
|
||||
oldInterfaceName, (aSuccess) => {
|
||||
(aSuccess) => {
|
||||
if (!aSuccess) {
|
||||
gNetworkService.destroyNetwork(networkInfo.name, function() {
|
||||
aReject("setDefaultRoute failed");
|
||||
|
@ -463,14 +463,11 @@ NetworkService.prototype = {
|
||||
});
|
||||
},
|
||||
|
||||
setDefaultRoute: function(aInterfaceName, aCount, aGateways,
|
||||
aOldInterfaceName, aCallback) {
|
||||
setDefaultRoute: function(aInterfaceName, aCount, aGateways, aCallback) {
|
||||
debug("Going to change default route to " + aInterfaceName);
|
||||
let options = {
|
||||
cmd: "setDefaultRoute",
|
||||
ifname: aInterfaceName,
|
||||
oldIfname: (aOldInterfaceName && aOldInterfaceName !== aInterfaceName) ?
|
||||
aOldInterfaceName : null,
|
||||
gateways: aGateways
|
||||
};
|
||||
this.controlMessage(options, function(aResult) {
|
||||
|
@ -2007,13 +2007,6 @@ CommandResult NetworkUtils::setDefaultRouteLegacy(NetworkParams& aOptions)
|
||||
{
|
||||
NS_ConvertUTF16toUTF8 autoIfname(aOptions.mIfname);
|
||||
|
||||
if (!aOptions.mOldIfname.IsEmpty()) {
|
||||
// Remove IPv4's default route.
|
||||
WARN_IF_FAILED(mNetUtils->do_ifc_remove_default_route(GET_CHAR(mOldIfname)));
|
||||
// Remove IPv6's default route.
|
||||
WARN_IF_FAILED(mNetUtils->do_ifc_remove_route(GET_CHAR(mOldIfname), "::", 0, NULL));
|
||||
}
|
||||
|
||||
uint32_t length = aOptions.mGateways.Length();
|
||||
if (length > 0) {
|
||||
for (uint32_t i = 0; i < length; i++) {
|
||||
|
@ -110,7 +110,6 @@ public:
|
||||
COPY_OPT_STRING_FIELD(mIfname, EmptyString())
|
||||
COPY_OPT_STRING_FIELD(mIp, EmptyString())
|
||||
COPY_OPT_FIELD(mPrefixLength, 0)
|
||||
COPY_OPT_STRING_FIELD(mOldIfname, EmptyString())
|
||||
COPY_OPT_STRING_FIELD(mMode, EmptyString())
|
||||
COPY_OPT_FIELD(mReport, false)
|
||||
COPY_OPT_FIELD(mEnabled, false)
|
||||
@ -163,7 +162,6 @@ public:
|
||||
nsString mIfname;
|
||||
nsString mIp;
|
||||
uint32_t mPrefixLength;
|
||||
nsString mOldIfname;
|
||||
nsString mMode;
|
||||
bool mReport;
|
||||
bool mEnabled;
|
||||
|
@ -157,7 +157,7 @@ interface nsIDhcpRequestCallback : nsISupports
|
||||
/**
|
||||
* Provide network services.
|
||||
*/
|
||||
[scriptable, uuid(5d6b1877-890a-4c7f-8403-94d57ceba6cf)]
|
||||
[scriptable, uuid(fcd0abd4-8525-469f-a166-12edb4081f3e)]
|
||||
interface nsINetworkService : nsISupports
|
||||
{
|
||||
const long MODIFY_ROUTE_ADD = 0;
|
||||
@ -310,8 +310,6 @@ interface nsINetworkService : nsISupports
|
||||
* Number of elements in gateways.
|
||||
* @param gateways
|
||||
* Default gateways for setting default route.
|
||||
* @param oldInterfaceName
|
||||
* The previous network interface name.
|
||||
*
|
||||
* @param callback
|
||||
* Callback to notify the result of setting default route.
|
||||
@ -319,7 +317,6 @@ interface nsINetworkService : nsISupports
|
||||
void setDefaultRoute(in DOMString interfaceName,
|
||||
in unsigned long count,
|
||||
[array, size_is(count)] in wstring gateways,
|
||||
in DOMString oldInterfaceName,
|
||||
in nsINativeCommandCallback callback);
|
||||
|
||||
/**
|
||||
|
@ -17,7 +17,6 @@ dictionary NetworkCommandOptions
|
||||
unsigned long prefixLength; // for "removeNetworkRoute".
|
||||
DOMString domain; // for "setDNS"
|
||||
sequence<DOMString> dnses; // for "setDNS", "setDefaultRouteAndDNS".
|
||||
DOMString oldIfname; // for "setDefaultRouteAndDNS".
|
||||
DOMString gateway; // for "addSecondaryRoute", "removeSecondaryRoute".
|
||||
sequence<DOMString> gateways; // for "setDefaultRouteAndDNS", "removeDefaultRoute".
|
||||
DOMString mode; // for "setWifiOperationMode".
|
||||
|
@ -11,5 +11,8 @@ class test {
|
||||
})();
|
||||
`;
|
||||
|
||||
// Throw, even if we cannot run the test
|
||||
if (classesEnabled())
|
||||
eval(test);
|
||||
else
|
||||
throw new TypeError();
|
||||
|
@ -125,7 +125,7 @@ FileAsTypedArray(JSContext* cx, const char* pathname)
|
||||
JS_ReportError(cx, "can't open %s: %s", pathname, strerror(errno));
|
||||
return nullptr;
|
||||
}
|
||||
AutoCloseInputFile autoClose(file);
|
||||
AutoCloseFile autoClose(file);
|
||||
|
||||
RootedObject obj(cx);
|
||||
if (fseek(file, 0, SEEK_END) != 0) {
|
||||
@ -210,6 +210,50 @@ osfile_readRelativeToScript(JSContext* cx, unsigned argc, Value* vp)
|
||||
return ReadFile(cx, argc, vp, true);
|
||||
}
|
||||
|
||||
static bool
|
||||
osfile_writeTypedArrayToFile(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
|
||||
if (args.length() != 2 ||
|
||||
!args[0].isString() ||
|
||||
!args[1].isObject() ||
|
||||
!args[1].toObject().is<TypedArrayObject>())
|
||||
{
|
||||
JS_ReportErrorNumber(cx, my_GetErrorMessage, nullptr,
|
||||
JSSMSG_INVALID_ARGS, "writeTypedArrayToFile");
|
||||
return false;
|
||||
}
|
||||
|
||||
RootedString givenPath(cx, args[0].toString());
|
||||
RootedString str(cx, ResolvePath(cx, givenPath, RootRelative));
|
||||
if (!str)
|
||||
return false;
|
||||
|
||||
JSAutoByteString filename(cx, str);
|
||||
if (!filename)
|
||||
return false;
|
||||
|
||||
FILE* file = fopen(filename.ptr(), "wb");
|
||||
if (!file) {
|
||||
JS_ReportError(cx, "can't open %s: %s", filename.ptr(), strerror(errno));
|
||||
return false;
|
||||
}
|
||||
AutoCloseFile autoClose(file);
|
||||
|
||||
TypedArrayObject* obj = &args[1].toObject().as<TypedArrayObject>();
|
||||
|
||||
if (fwrite(obj->viewData(), obj->bytesPerElement(), obj->length(), file) != obj->length() ||
|
||||
!autoClose.release())
|
||||
{
|
||||
JS_ReportError(cx, "can't write %s", filename.ptr());
|
||||
return false;
|
||||
}
|
||||
|
||||
args.rval().setUndefined();
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
Redirect(JSContext* cx, FILE* fp, HandleString relFilename)
|
||||
{
|
||||
@ -271,6 +315,10 @@ static const JSFunctionSpecWithHelp osfile_functions[] = {
|
||||
};
|
||||
|
||||
static const JSFunctionSpecWithHelp osfile_unsafe_functions[] = {
|
||||
JS_FN_HELP("writeTypedArrayToFile", osfile_writeTypedArrayToFile, 2, 0,
|
||||
"writeTypedArrayToFile(filename, data)",
|
||||
" Write the contents of a typed array to the named file."),
|
||||
|
||||
JS_FN_HELP("redirect", osfile_redirect, 2, 0,
|
||||
"redirect(stdoutFilename[, stderrFilename])",
|
||||
" Redirect stdout and/or stderr to the named file. Pass undefined to avoid\n"
|
||||
|
@ -573,7 +573,7 @@ Process(JSContext* cx, const char* filename, bool forceTTY)
|
||||
return;
|
||||
}
|
||||
}
|
||||
AutoCloseInputFile autoClose(file);
|
||||
AutoCloseFile autoClose(file);
|
||||
|
||||
if (!forceTTY && !isatty(fileno(file))) {
|
||||
// It's not interactive - just execute it.
|
||||
@ -664,7 +664,7 @@ CreateMappedArrayBuffer(JSContext* cx, unsigned argc, Value* vp)
|
||||
JSSMSG_CANT_OPEN, filename.ptr(), strerror(errno));
|
||||
return false;
|
||||
}
|
||||
AutoCloseInputFile autoClose(file);
|
||||
AutoCloseFile autoClose(file);
|
||||
|
||||
if (!sizeGiven) {
|
||||
struct stat st;
|
||||
@ -1294,7 +1294,7 @@ js::shell::FileAsString(JSContext* cx, const char* pathname)
|
||||
JS_ReportError(cx, "can't open %s: %s", pathname, strerror(errno));
|
||||
return nullptr;
|
||||
}
|
||||
AutoCloseInputFile autoClose(file);
|
||||
AutoCloseFile autoClose(file);
|
||||
|
||||
if (fseek(file, 0, SEEK_END) != 0) {
|
||||
JS_ReportError(cx, "can't seek end of %s", pathname);
|
||||
|
@ -1,3 +1,9 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
* vim: set ts=8 sts=4 et sw=4 tw=99:
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef jsshell_js_h
|
||||
#define jsshell_js_h
|
||||
|
||||
@ -23,15 +29,21 @@ my_ErrorReporter(JSContext* cx, const char* message, JSErrorReport* report);
|
||||
JSString*
|
||||
FileAsString(JSContext* cx, const char* pathname);
|
||||
|
||||
class AutoCloseInputFile
|
||||
class AutoCloseFile
|
||||
{
|
||||
private:
|
||||
FILE* f_;
|
||||
public:
|
||||
explicit AutoCloseInputFile(FILE* f) : f_(f) {}
|
||||
~AutoCloseInputFile() {
|
||||
if (f_ && f_ != stdin)
|
||||
fclose(f_);
|
||||
explicit AutoCloseFile(FILE* f) : f_(f) {}
|
||||
~AutoCloseFile() {
|
||||
(void) release();
|
||||
}
|
||||
bool release() {
|
||||
bool success = true;
|
||||
if (f_ && f_ != stdin && f_ != stdout && f_ != stderr)
|
||||
success = !fclose(f_);
|
||||
f_ = nullptr;
|
||||
return success;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -504,13 +504,27 @@ public:
|
||||
TimeStamp& operator+=(const TimeDuration& aOther)
|
||||
{
|
||||
MOZ_ASSERT(!IsNull(), "Cannot compute with a null value");
|
||||
mValue += aOther.mValue;
|
||||
TimeStampValue value = mValue + aOther.mValue;
|
||||
// Check for underflow.
|
||||
// (We don't check for overflow because it's not obvious what the error
|
||||
// behavior should be in that case.)
|
||||
if (aOther.mValue < 0 && value > mValue) {
|
||||
value = 0;
|
||||
}
|
||||
mValue = value;
|
||||
return *this;
|
||||
}
|
||||
TimeStamp& operator-=(const TimeDuration& aOther)
|
||||
{
|
||||
MOZ_ASSERT(!IsNull(), "Cannot compute with a null value");
|
||||
mValue -= aOther.mValue;
|
||||
TimeStampValue value = mValue - aOther.mValue;
|
||||
// Check for underflow.
|
||||
// (We don't check for overflow because it's not obvious what the error
|
||||
// behavior should be in that case.)
|
||||
if (aOther.mValue > 0 && value > mValue) {
|
||||
value = 0;
|
||||
}
|
||||
mValue = value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -32,8 +32,9 @@ function synthesizeDblClickOnCell(aTree, column, row) {
|
||||
aTree.ownerDocument.defaultView);
|
||||
}
|
||||
|
||||
function togglePasswords() {
|
||||
function* togglePasswords() {
|
||||
pwmgrdlg.document.querySelector("#togglePasswords").doCommand();
|
||||
yield new Promise(resolve => waitForFocus(resolve, pwmgrdlg));
|
||||
}
|
||||
|
||||
function* editUsernamePromises(site, oldUsername, newUsername) {
|
||||
@ -113,9 +114,9 @@ add_task(function* test_edit_multiple_logins() {
|
||||
function* testLoginChange(site, oldUsername, oldPassword, newUsername, newPassword) {
|
||||
addLogin(site, oldUsername, oldPassword);
|
||||
yield* editUsernamePromises(site, oldUsername, newUsername);
|
||||
togglePasswords();
|
||||
yield* togglePasswords();
|
||||
yield* editPasswordPromises(site, oldPassword, newPassword);
|
||||
togglePasswords();
|
||||
yield* togglePasswords();
|
||||
}
|
||||
|
||||
yield* testLoginChange("http://c.tn/", "userC", "passC", "usernameC", "passwordC");
|
||||
|
Loading…
Reference in New Issue
Block a user