mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
101 lines
3.5 KiB
HTML
101 lines
3.5 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
Test that calling setVisible('false') and then sending a low-memory
|
|
notification causes a WebGL context loss event.
|
|
-->
|
|
<head>
|
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="application/javascript" src="../browserElementTestHelpers.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<body>
|
|
|
|
<script type="application/javascript;version=1.7">
|
|
"use strict";
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
browserElementTestHelpers.setEnabledPref(true);
|
|
browserElementTestHelpers.addPermission();
|
|
browserElementTestHelpers.enableProcessPriorityManager();
|
|
|
|
function runTest() {
|
|
var iframe = document.createElement('iframe');
|
|
iframe.setAttribute('mozbrowser', true);
|
|
iframe.src = 'file_WebGLContextLost.html';
|
|
|
|
// We use this to ensure that we don't call SimpleTest.finish() twice.
|
|
var finished = false;
|
|
function finishOnce() {
|
|
if (!finished) {
|
|
SimpleTest.finish();
|
|
finished = true;
|
|
}
|
|
}
|
|
|
|
expectMozbrowserEvent(iframe, 'error').then(function(e) {
|
|
if (finished) {
|
|
// We don't care if the frame dies after the test finishes.
|
|
return;
|
|
}
|
|
todo(false, "child process is crashing; this probably indicates that " +
|
|
"something is wrong with WebGL in child processes on your machine.");
|
|
is(e.detail.type, 'fatal');
|
|
}).then(finishOnce);
|
|
|
|
var childID = null;
|
|
expectOnlyOneProcessCreated().then(function(chid) {
|
|
childID = chid;
|
|
return Promise.all(
|
|
[expectPriorityChange(childID, 'FOREGROUND'),
|
|
expectMozbrowserEvent(iframe, 'loadend'),
|
|
expectMozbrowserEvent(iframe, 'showmodalprompt').then(function(e) {
|
|
is(e.detail.message, 'ready');
|
|
})
|
|
]);
|
|
}).then(function() {
|
|
// Fire a low-memory notification once the process goes into the background
|
|
// due to the setVisible(false) call below.
|
|
expectPriorityChange(childID, 'BACKGROUND').then(function() {
|
|
SimpleTest.executeSoon(function() {
|
|
var os = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
|
|
.getService(SpecialPowers.Ci.nsIObserverService);
|
|
os.notifyObservers(null, "memory-pressure", "low-memory");
|
|
ok(true, 'Successfully notified observers.');
|
|
});
|
|
});
|
|
|
|
// This test isn't the only possible source of a low-memory notification; the
|
|
// browser can fire one whenever it likes. So it's fine if we lose the
|
|
// WebGL context before we fire the low-memory notification ourself.
|
|
|
|
var p = expectMozbrowserEvent(iframe, 'showmodalprompt').then(function(e) {
|
|
is(e.detail.message, 'webglcontextlost');
|
|
});
|
|
|
|
iframe.setVisible(false);
|
|
return p;
|
|
}).then(finishOnce);
|
|
|
|
document.body.appendChild(iframe);
|
|
}
|
|
|
|
addEventListener('testready', function() {
|
|
// At the time this test was written, webgl was blocklisted inside child
|
|
// processes on desktop Linux. The issue is that we spawn a child process to
|
|
// read driver info, but we only did this on the main prrocess. Child
|
|
// processes never read the driver info themselves, nor do they get it from
|
|
// their parent, so they refuse to start up WebGL.
|
|
//
|
|
// This isn't a problem on B2G because we force WebGL on there. But it
|
|
// obviously makes this test difficult. bjacob says forcing WebGL on here
|
|
// shouldn't hurt things, and anyway this setting mirrors what we do on B2G,
|
|
// which is what we're trying to test!
|
|
SpecialPowers.pushPrefEnv({set: [["webgl.force-enabled", true]]},
|
|
runTest);
|
|
});
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|