зеркало из https://github.com/mozilla/gecko-dev.git
134 строки
3.5 KiB
JavaScript
134 строки
3.5 KiB
JavaScript
|
|
/**
|
|
* Waits for a tab switch.
|
|
*/
|
|
function waitTabSwitched() {
|
|
return new Promise(resolve => {
|
|
gBrowser.addEventListener("TabSwitchDone", function onSwitch() {
|
|
gBrowser.removeEventListener("TabSwitchDone", onSwitch);
|
|
executeSoon(resolve);
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Waits a specified number of miliseconds.
|
|
*
|
|
* Usage:
|
|
* let wait = yield waitForMs(2000);
|
|
* ok(wait, "2 seconds should now have elapsed");
|
|
*
|
|
* @param aMs the number of miliseconds to wait for
|
|
* @returns a Promise that resolves to true after the time has elapsed
|
|
*/
|
|
function waitForMs(aMs) {
|
|
return new Promise((resolve) => {
|
|
setTimeout(done, aMs);
|
|
function done() {
|
|
resolve(true);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Platform string helper for nativeVerticalWheelEventMsg
|
|
*/
|
|
function getPlatform() {
|
|
if (navigator.platform.indexOf("Win") == 0) {
|
|
return "windows";
|
|
}
|
|
if (navigator.platform.indexOf("Mac") == 0) {
|
|
return "mac";
|
|
}
|
|
if (navigator.platform.indexOf("Linux") == 0) {
|
|
return "linux";
|
|
}
|
|
return "unknown";
|
|
}
|
|
|
|
/**
|
|
* Returns a native wheel scroll event id for dom window
|
|
* uitls sendNativeMouseScrollEvent.
|
|
*/
|
|
function nativeVerticalWheelEventMsg() {
|
|
switch (getPlatform()) {
|
|
case "windows": return 0x020A; // WM_MOUSEWHEEL
|
|
case "mac": return 0; // value is unused, can be anything
|
|
case "linux": return 4; // value is unused, pass GDK_SCROLL_SMOOTH anyway
|
|
}
|
|
throw "Native wheel events not supported on platform " + getPlatform();
|
|
}
|
|
|
|
/**
|
|
* Waits for the first dom "scroll" event.
|
|
*/
|
|
function waitScrollStart(aTarget) {
|
|
return new Promise((resolve, reject) => {
|
|
aTarget.addEventListener("scroll", function listener(event) {
|
|
aTarget.removeEventListener("scroll", listener, true);
|
|
resolve(event);
|
|
}, true);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Waits for the last dom "scroll" event which generally indicates
|
|
* a scroll operation is complete. To detect this the helper waits
|
|
* 1 second intervals checking for scroll events from aTarget. If
|
|
* a scroll event is not received during that time, it considers
|
|
* the scroll operation complete. Not super accurate, be careful.
|
|
*/
|
|
function waitScrollFinish(aTarget) {
|
|
return new Promise((resolve, reject) => {
|
|
let recent = false;
|
|
let count = 0;
|
|
function listener(event) {
|
|
recent = true;
|
|
}
|
|
aTarget.addEventListener("scroll", listener, true);
|
|
setInterval(function () {
|
|
// one second passed and we didn't receive a scroll event.
|
|
if (!recent) {
|
|
aTarget.removeEventListener("scroll", listener, true);
|
|
resolve();
|
|
return;
|
|
}
|
|
recent = false;
|
|
// ten seconds
|
|
if (count > 10) {
|
|
aTarget.removeEventListener("scroll", listener, true);
|
|
reject();
|
|
}
|
|
}, 1000);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Set a plugin activation state. See nsIPluginTag for
|
|
* supported states. Affected plugin default to the first
|
|
* test plugin.
|
|
*/
|
|
function setTestPluginEnabledState(aState, aPluginName) {
|
|
let name = aPluginName || "Test Plug-in";
|
|
SpecialPowers.setTestPluginEnabledState(aState, name);
|
|
}
|
|
|
|
/**
|
|
* Returns the chrome side nsIPluginTag for this plugin, helper for
|
|
* setTestPluginEnabledState.
|
|
*/
|
|
function getTestPlugin(aName) {
|
|
let pluginName = aName || "Test Plug-in";
|
|
let ph = Components.classes["@mozilla.org/plugin/host;1"].getService(Components.interfaces.nsIPluginHost);
|
|
let tags = ph.getPluginTags();
|
|
|
|
// Find the test plugin
|
|
for (let i = 0; i < tags.length; i++) {
|
|
if (tags[i].name == pluginName)
|
|
return tags[i];
|
|
}
|
|
ok(false, "Unable to find plugin");
|
|
return null;
|
|
}
|
|
|