зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1602991 - Fix intermittent browser/components/urlbar/tests/browser/browser_urlbar_locationchange_urlbar_edit_dos.js r=Gijs
The test messages the content script to trigger a web-progress change and waits for the change. The problem is that those two actions race each other. In the intermittent failures, the web-progress change happens before the test adds a listener for it. The test first should add its listener and then message the content script to trigger the change. This try run is all green with many retriggers: https://treeherder.mozilla.org/#/jobs?repo=try&revision=6990ce980eff124ef28c41195ae57e0fd2b1f25b&group_state=expanded Differential Revision: https://phabricator.services.mozilla.com/D59976 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
5f443f7001
Коммит
02ffd74c11
|
@ -18,7 +18,13 @@ async function checkURLBarValueStays(browser) {
|
|||
);
|
||||
gBrowser.selectedBrowser.removeProgressListener(filter);
|
||||
filter = null;
|
||||
resolve();
|
||||
// Wait an extra tick before resolving. We want to make sure that other
|
||||
// web progress listeners queued after this one are called before we
|
||||
// continue the test, in case the remainder of the test depends on those
|
||||
// listeners. That should happen anyway since promises are resolved on
|
||||
// the next tick, but do this to be a little safer. In particular we
|
||||
// want to avoid having the test pass when it should fail.
|
||||
executeSoon(resolve);
|
||||
},
|
||||
};
|
||||
let filter = Cc[
|
||||
|
@ -46,15 +52,16 @@ add_task(async function() {
|
|||
url: TEST_URL,
|
||||
},
|
||||
async function(browser) {
|
||||
await SpecialPowers.spawn(browser, [""], function() {
|
||||
let promise1 = checkURLBarValueStays(browser);
|
||||
SpecialPowers.spawn(browser, [""], function() {
|
||||
content.wrappedJSObject.dos_hash();
|
||||
});
|
||||
await checkURLBarValueStays(browser);
|
||||
await SpecialPowers.spawn(browser, [""], function() {
|
||||
content.clearTimeout(content.wrappedJSObject.dos_timeout);
|
||||
await promise1;
|
||||
let promise2 = checkURLBarValueStays(browser);
|
||||
SpecialPowers.spawn(browser, [""], function() {
|
||||
content.wrappedJSObject.dos_pushState();
|
||||
});
|
||||
await checkURLBarValueStays(browser);
|
||||
await promise2;
|
||||
}
|
||||
);
|
||||
});
|
||||
|
|
|
@ -6,17 +6,12 @@
|
|||
</head>
|
||||
<body>
|
||||
<script>
|
||||
var dos_timeout = null;
|
||||
function dos_hash() {
|
||||
dos_timeout = setTimeout(function() {
|
||||
location.hash = "#";
|
||||
}, 50);
|
||||
location.hash = "#";
|
||||
}
|
||||
|
||||
function dos_pushState() {
|
||||
dos_timeout = setTimeout(function() {
|
||||
history.pushState({}, "Some title", "");
|
||||
}, 50);
|
||||
history.pushState({}, "Some title", "");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
|
Загрузка…
Ссылка в новой задаче