mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-27 14:52:16 +00:00
Backed out changeset a6fc75e24e36 (bug 1653549) for causing mochitest failures in test_hidden. DONTBUILD CLOSED TREE
This commit is contained in:
parent
47b8a76198
commit
e7e161833c
@ -862,18 +862,6 @@ Geolocation::Update(nsIDOMGeoPosition* aSomewhere) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Don't update position if window is not fully active or the document is
|
||||
// hidden. We keep the pending callaback and watchers waiting for the next
|
||||
// update.
|
||||
nsCOMPtr<nsPIDOMWindowInner> window = do_QueryReferent(this->GetOwner());
|
||||
if (window) {
|
||||
nsCOMPtr<Document> document = window->GetDoc();
|
||||
bool isHidden = document && document->Hidden();
|
||||
if (isHidden || !window->IsFullyActive()) {
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
if (aSomewhere) {
|
||||
nsCOMPtr<nsIDOMGeoPositionCoords> coords;
|
||||
aSomewhere->GetCoords(getter_AddRefs(coords));
|
||||
|
@ -6,7 +6,6 @@ support-files =
|
||||
geolocation_common.js
|
||||
network_geolocation.sjs
|
||||
windowTest.html
|
||||
popup.html
|
||||
prefs =
|
||||
dom.security.featurePolicy.header.enabled=true
|
||||
dom.security.featurePolicy.webidl.enabled=true
|
||||
@ -15,11 +14,8 @@ prefs =
|
||||
skip-if = xorigin # Hangs
|
||||
[test_allowWatch.html]
|
||||
skip-if = xorigin # Hangs
|
||||
[test_hidden.html]
|
||||
skip-if = xorigin # Hangs
|
||||
support-files = popup.html
|
||||
[test_cachedPosition.html]
|
||||
fail-if = xorigin
|
||||
fail-if = xorigin
|
||||
[test_cancelCurrent.html]
|
||||
[test_cancelWatch.html]
|
||||
[test_clearWatch.html]
|
||||
|
@ -1,19 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Simple access of geolocation</title>
|
||||
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script src="geolocation_common.js"></script>
|
||||
<meta charset="utf-8">
|
||||
<head>
|
||||
<script>
|
||||
async function loadedWindow() {
|
||||
await new Promise(r => force_prompt(true, r));
|
||||
opener.postMessage("initialized", "*");
|
||||
}
|
||||
navigator.geolocation.getCurrentPosition(loadedWindow, loadedWindow, {timeout:30000});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Just a support file</h1>
|
||||
</body>
|
||||
</html>
|
@ -1,110 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=1653549
|
||||
-->
|
||||
<meta charset="utf-8">
|
||||
<title>Test that geolocation position can't be gotten when document is hidden</title>
|
||||
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script src="geolocation_common.js"></script>
|
||||
<link rel="stylesheet" href="/tests/SimpleTest/test.css" />
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1653549">Mozilla Bug 1653549</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
</div>
|
||||
<pre id="test">
|
||||
|
||||
<script class="testbody">
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// Little promise wrapper helper.
|
||||
function p(f) {
|
||||
return new Promise((r) => f(r));
|
||||
}
|
||||
|
||||
resume_geolocationProvider(async () => {
|
||||
// Initialize
|
||||
await new Promise((r) => force_prompt(true, r));
|
||||
const popupWindow = window.open("popup.html");
|
||||
popupWindow.opener = window;
|
||||
await new Promise((r) =>
|
||||
window.addEventListener("message", r, { once: true })
|
||||
);
|
||||
|
||||
// Confirm everything is working ok...
|
||||
const geo = popupWindow.navigator.geolocation;
|
||||
await new Promise((resolve, reject) => {
|
||||
geo.getCurrentPosition(resolve, reject);
|
||||
});
|
||||
|
||||
// Hide the document...
|
||||
const hiddenPromise = new Promise(
|
||||
(r) => (popupWindow.document.onvisibilitychange = r)
|
||||
);
|
||||
await SimpleTest.promiseFocus(window);
|
||||
await hiddenPromise;
|
||||
|
||||
// The following promises only resolve successfully when document is visible,
|
||||
// meaning that position updates are ignored when the document is hidden.
|
||||
let success = false;
|
||||
let watchId = null;
|
||||
const watchPositionPromise = new Promise((resolve) => {
|
||||
watchId = geo.watchPosition(
|
||||
() => {
|
||||
ok(success, "watchPosition was called.");
|
||||
if (!success) {
|
||||
throw new Error("watchPosition was called too early");
|
||||
}
|
||||
resolve();
|
||||
},
|
||||
() => {
|
||||
ok(false, "Error callback of watchPosition must not be called.");
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
const currentPositionPromise = new Promise((resolve) => {
|
||||
geo.getCurrentPosition(
|
||||
() => {
|
||||
ok(success, "getCurrentPosition was called.");
|
||||
if (!success){
|
||||
throw new Error("getCurrentPosition was called too early");
|
||||
}
|
||||
resolve();
|
||||
},
|
||||
() => {
|
||||
ok(false, "Error callback of getCurrentPosition must not be called.");
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// Send data to be ignored...
|
||||
await p(start_sending_garbage);
|
||||
await p(stop_sending_garbage);
|
||||
await p(resume_geolocationProvider);
|
||||
|
||||
// Refocus popup window...
|
||||
const visiblePopupPromise = new Promise(
|
||||
(r) => (popupWindow.document.onvisibilitychange = r)
|
||||
);
|
||||
await SimpleTest.promiseFocus(popupWindow);
|
||||
await visiblePopupPromise;
|
||||
|
||||
// Resuming the geolocation events must now cause the promises to resolve correctly (with success = true).
|
||||
success = true;
|
||||
await p(resume_geolocationProvider);
|
||||
await Promise.all([currentPositionPromise, watchPositionPromise]);
|
||||
|
||||
// Cleanup and finish!
|
||||
geo.clearWatch(watchId);
|
||||
await SimpleTest.promiseFocus(window);
|
||||
popupWindow.close();
|
||||
SimpleTest.finish();
|
||||
});
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in New Issue
Block a user