Fix failure to print when pages contain zero-sized <canvas> element.

master
Fedor 2019-07-08 13:07:31 +03:00
parent ba11f2bc41
commit 7ad2d62b8f
1 changed files with 17 additions and 11 deletions

View File

@ -552,17 +552,23 @@ HTMLCanvasElement::CopyInnerTo(Element* aDest)
HTMLCanvasElement* dest = static_cast<HTMLCanvasElement*>(aDest); HTMLCanvasElement* dest = static_cast<HTMLCanvasElement*>(aDest);
dest->mOriginalCanvas = this; dest->mOriginalCanvas = this;
nsCOMPtr<nsISupports> cxt; // We make sure that the canvas is not zero sized since that would cause
dest->GetContext(NS_LITERAL_STRING("2d"), getter_AddRefs(cxt)); // the DrawImage call below to return an error, which would cause printing
RefPtr<CanvasRenderingContext2D> context2d = // to fail.
static_cast<CanvasRenderingContext2D*>(cxt.get()); nsIntSize size = GetWidthHeight();
if (context2d && !mPrintCallback) { if (size.height > 0 && size.width > 0) {
CanvasImageSource source; nsCOMPtr<nsISupports> cxt;
source.SetAsHTMLCanvasElement() = this; dest->GetContext(NS_LITERAL_STRING("2d"), getter_AddRefs(cxt));
ErrorResult err; RefPtr<CanvasRenderingContext2D> context2d =
context2d->DrawImage(source, static_cast<CanvasRenderingContext2D*>(cxt.get());
0.0, 0.0, err); if (context2d && !mPrintCallback) {
rv = err.StealNSResult(); CanvasImageSource source;
source.SetAsHTMLCanvasElement() = this;
ErrorResult err;
context2d->DrawImage(source,
0.0, 0.0, err);
rv = err.StealNSResult();
}
} }
} }
return rv; return rv;