Backed out changeset 443dc9a9c21c (bug 1202663) for hidden-2 Wr bustage CLOSED TREE

This commit is contained in:
Wes Kocher 2015-10-05 10:36:54 -07:00
parent ebefdc0be5
commit f7ae20086b
2 changed files with 44 additions and 37 deletions

View File

@ -2535,8 +2535,6 @@ GeckoDriver.prototype.clearImportedScripts = function(cmd, resp) {
* PNG image encoded as base64 encoded string.
*/
GeckoDriver.prototype.takeScreenshot = function(cmd, resp) {
let {id, highlights, full} = cmd.parameters;
switch (this.context) {
case Context.CHROME:
let win = this.getCurrentWindow();
@ -2579,7 +2577,10 @@ GeckoDriver.prototype.takeScreenshot = function(cmd, resp) {
break;
case Context.CONTENT:
return this.listener.takeScreenshot(id, highlights, full);
resp.body.value = yield this.listener.takeScreenshot({
id: cmd.parameters.id,
highlights: cmd.parameters.highlights,
full: cmd.parameters.full});
break;
}
};

View File

@ -216,7 +216,6 @@ var getElementValueOfCssPropertyFn = dispatch(getElementValueOfCssProperty);
var switchToShadowRootFn = dispatch(switchToShadowRoot);
var getCookiesFn = dispatch(getCookies);
var singleTapFn = dispatch(singleTap);
var takeScreenshotFn = dispatch(takeScreenshot);
/**
* Start all message listeners
@ -261,7 +260,7 @@ function startListeners() {
addMessageListenerId("Marionette:importScript", importScript);
addMessageListenerId("Marionette:getAppCacheStatus", getAppCacheStatus);
addMessageListenerId("Marionette:setTestName", setTestName);
addMessageListenerId("Marionette:takeScreenshot", takeScreenshotFn);
addMessageListenerId("Marionette:takeScreenshot", takeScreenshot);
addMessageListenerId("Marionette:addCookie", addCookie);
addMessageListenerId("Marionette:getCookies", getCookiesFn);
addMessageListenerId("Marionette:deleteAllCookies", deleteAllCookies);
@ -365,7 +364,7 @@ function deleteSession(msg) {
removeMessageListenerId("Marionette:importScript", importScript);
removeMessageListenerId("Marionette:getAppCacheStatus", getAppCacheStatus);
removeMessageListenerId("Marionette:setTestName", setTestName);
removeMessageListenerId("Marionette:takeScreenshot", takeScreenshotFn);
removeMessageListenerId("Marionette:takeScreenshot", takeScreenshot);
removeMessageListenerId("Marionette:addCookie", addCookie);
removeMessageListenerId("Marionette:getCookies", getCookiesFn);
removeMessageListenerId("Marionette:deleteAllCookies", deleteAllCookies);
@ -1997,35 +1996,44 @@ function importScript(msg) {
* <code>msg.json.highlights</code>, a red box will be painted around
* them to highlight their position.
*/
function takeScreenshot(id, highlights, full) {
let node;
if (id) {
node = elementManager.getKnownElement(id, curContainer);
} else {
function takeScreenshot(msg) {
let node = null;
if (msg.json.id) {
try {
node = elementManager.getKnownElement(msg.json.id, curContainer)
}
catch (e) {
sendResponse(e.message, e.code, e.stack, msg.json.command_id);
return;
}
}
else {
node = curContainer.frame;
}
let highlights = msg.json.highlights;
let document = curContainer.frame.document;
let rect, win, width, height, left, top;
var document = curContainer.frame.document;
var rect, win, width, height, left, top;
// node can be either a window or an arbitrary DOM node
if (node == curContainer.frame) {
// node is a window
win = node;
if (full) {
if (msg.json.full) {
// the full window
width = document.body.scrollWidth;
height = document.body.scrollHeight;
top = 0;
left = 0;
} else {
}
else {
// only the viewport
width = document.documentElement.clientWidth;
height = document.documentElement.clientHeight;
left = curContainer.frame.pageXOffset;
top = curContainer.frame.pageYOffset;
}
} else {
}
else {
// node is an arbitrary DOM node
win = node.ownerDocument.defaultView;
rect = node.getBoundingClientRect();
@ -2035,16 +2043,15 @@ function takeScreenshot(id, highlights, full) {
left = rect.left;
}
let canvas = document.createElementNS(
"http://www.w3.org/1999/xhtml", "canvas");
var canvas = document.createElementNS("http://www.w3.org/1999/xhtml",
"canvas");
canvas.width = width;
canvas.height = height;
let ctx = canvas.getContext("2d");
// draws the DOM contents of the window to the canvas
var ctx = canvas.getContext("2d");
// Draws the DOM contents of the window to the canvas
ctx.drawWindow(win, left, top, width, height, "rgb(255,255,255)");
// this section is for drawing a red rectangle around each element
// This section is for drawing a red rectangle around each element
// passed in via the highlights array
if (highlights) {
ctx.lineWidth = "2";
@ -2052,26 +2059,25 @@ function takeScreenshot(id, highlights, full) {
ctx.save();
for (var i = 0; i < highlights.length; ++i) {
let elem = elementManager.getKnownElement(highlights[i], curContainer);
var elem = elementManager.getKnownElement(highlights[i], curContainer);
rect = elem.getBoundingClientRect();
let offsetY = -top;
let offsetX = -left;
var offsetY = -top;
var offsetX = -left;
// draw the rectangle
ctx.strokeRect(
rect.left + offsetX,
rect.top + offsetY,
rect.width,
rect.height);
// Draw the rectangle
ctx.strokeRect(rect.left + offsetX,
rect.top + offsetY,
rect.width,
rect.height);
}
}
// return the Base64 encoded string back to the client
// so that it can save the file to disk if it is required
let dataUrl = canvas.toDataURL("image/png", "");
let encoded = dataUrl.substring(dataUrl.indexOf(",") + 1);
return encoded;
// Return the Base64 encoded string back to the client so that it
// can save the file to disk if it is required
var dataUrl = canvas.toDataURL("image/png", "");
var data = dataUrl.substring(dataUrl.indexOf(",") + 1);
sendResponse({value: data}, msg.json.command_id);
}
// Call register self when we get loaded