blob: 8610f7824892dbabd0c489abcb22637b7e9eb9f5 [file] [log] [blame]
window.jsTestIsAsync = true;
var popupWindow = null;
var popupOpenCallback = null;
function popupOpenCallbackWrapper() {
popupWindow.removeEventListener("didOpenPicker", popupOpenCallbackWrapper);
// We need some delay. Without it, testRunner.notifyDone() freezes.
// See crbug.com/562311.
setTimeout(popupOpenCallback, 20);
}
function waitUntilClosing(callback) {
setTimeout(callback, 1);
}
function rootWindow() {
var currentWindow = window;
while (currentWindow !== currentWindow.parent) {
currentWindow = currentWindow.parent;
}
return currentWindow;
}
// openPicker opens a picker UI for the following types:
// - menulist SELECT
// - INPUT color
// - INPUT date/datetime-local/month/week
//
// |callback| is called if we successfully open the picker UI. However it is
// called only for the following types:
// - menulist SELECT on Windows, Linux, and CrOS
// - INPUT color with DATALIST
// - INPUT date/datetime-local/month/week
function openPicker(element, callback, errorCallback) {
rootWindow().moveTo(window.screenX, window.screenY);
element.offsetTop; // Force to lay out
element.focus();
if (element.tagName === "SELECT") {
eventSender.keyDown("downArrow", ["altKey"]);
} else if (element.tagName === "INPUT") {
if (element.type === "color") {
eventSender.keyDown(" ");
} else {
eventSender.keyDown("downArrow", ["altKey"]);
}
}
popupWindow = window.internals.pagePopupWindow;
if (typeof callback === "function" && popupWindow)
setPopupOpenCallback(callback);
else if (typeof errorCallback === "function" && !popupWindow)
errorCallback();
}
function clickToOpenPicker(x, y, callback, errorCallback) {
rootWindow().moveTo(window.screenX, window.screenY);
eventSender.mouseMoveTo(x, y);
eventSender.mouseDown();
eventSender.mouseUp();
popupWindow = window.internals.pagePopupWindow;
if (typeof callback === "function" && popupWindow)
setPopupOpenCallback(callback);
else if (typeof errorCallback === "function" && !popupWindow)
errorCallback();
}
function setPopupOpenCallback(callback) {
console.assert(popupWindow);
popupOpenCallback = (function(callback) {
// We need to move the window to the top left of available space
// because the window will move back to (0, 0) when the
// ShellViewMsg_SetTestConfiguration IPC arrives.
rootWindow().moveTo(window.screenX, window.screenY);
callback();
}).bind(this, callback);
try {
popupWindow.addEventListener("didOpenPicker", popupOpenCallbackWrapper, false);
} catch(e) {
debug(e.name);
}
}