| Index: third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
|
| diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
|
| index 7072ec0678cc326f28819648969157fa2994574a..7d1487211c89c1c349c66e40adef66cfefd7ceca 100644
|
| --- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
|
| +++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
|
| @@ -856,8 +856,9 @@ static inline CanvasImageSource* toImageSourceInternal(const CanvasImageSourceUn
|
| void BaseRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource, double x, double y, ExceptionState& exceptionState)
|
| {
|
| CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
|
| - FloatSize sourceRectSize = imageSourceInternal->elementSize();
|
| - FloatSize destRectSize = imageSourceInternal->defaultDestinationSize();
|
| + FloatSize defaultObjectSize(width(), height());
|
| + FloatSize sourceRectSize = imageSourceInternal->elementSize(defaultObjectSize);
|
| + FloatSize destRectSize = imageSourceInternal->defaultDestinationSize(defaultObjectSize);
|
| drawImage(imageSourceInternal, 0, 0, sourceRectSize.width(), sourceRectSize.height(), x, y, destRectSize.width(), destRectSize.height(), exceptionState);
|
| }
|
|
|
| @@ -865,7 +866,8 @@ void BaseRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource
|
| double x, double y, double width, double height, ExceptionState& exceptionState)
|
| {
|
| CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
|
| - FloatSize sourceRectSize = imageSourceInternal->elementSize();
|
| + FloatSize defaultObjectSize(this->width(), this->height());
|
| + FloatSize sourceRectSize = imageSourceInternal->elementSize(defaultObjectSize);
|
| drawImage(imageSourceInternal, 0, 0, sourceRectSize.width(), sourceRectSize.height(), x, y, width, height, exceptionState);
|
| }
|
|
|
| @@ -971,10 +973,11 @@ void BaseRenderingContext2D::drawImage(CanvasImageSource* imageSource,
|
| return;
|
|
|
| RefPtr<Image> image;
|
| + FloatSize defaultObjectSize(width(), height());
|
| SourceImageStatus sourceImageStatus = InvalidSourceImageStatus;
|
| if (!imageSource->isVideoElement()) {
|
| AccelerationHint hint = imageBuffer()->isAccelerated() ? PreferAcceleration : PreferNoAcceleration;
|
| - image = imageSource->getSourceImageForCanvas(&sourceImageStatus, hint, SnapshotReasonDrawImage);
|
| + image = imageSource->getSourceImageForCanvas(&sourceImageStatus, hint, SnapshotReasonDrawImage, defaultObjectSize);
|
| if (sourceImageStatus == UndecodableSourceImageStatus)
|
| exceptionState.throwDOMException(InvalidStateError, "The HTMLImageElement provided is in the 'broken' state.");
|
| if (!image || !image->width() || !image->height())
|
| @@ -991,8 +994,9 @@ void BaseRenderingContext2D::drawImage(CanvasImageSource* imageSource,
|
|
|
| FloatRect srcRect = normalizeRect(FloatRect(sx, sy, sw, sh));
|
| FloatRect dstRect = normalizeRect(FloatRect(dx, dy, dw, dh));
|
| + FloatSize imageSize = imageSource->elementSize(defaultObjectSize);
|
|
|
| - clipRectsToImageRect(FloatRect(FloatPoint(), imageSource->elementSize()), &srcRect, &dstRect);
|
| + clipRectsToImageRect(FloatRect(FloatPoint(), imageSize), &srcRect, &dstRect);
|
|
|
| imageSource->adjustDrawRects(&srcRect, &dstRect);
|
|
|
| @@ -1023,7 +1027,7 @@ void BaseRenderingContext2D::drawImage(CanvasImageSource* imageSource,
|
| if (ExpensiveCanvasHeuristicParameters::SVGImageSourcesAreExpensive && imageSource->isSVGSource())
|
| isExpensive = true;
|
|
|
| - if (imageSource->elementSize().width() * imageSource->elementSize().height() > width() * height() * ExpensiveCanvasHeuristicParameters::ExpensiveImageSizeRatio)
|
| + if (imageSize.width() * imageSize.height() > width() * height() * ExpensiveCanvasHeuristicParameters::ExpensiveImageSizeRatio)
|
| isExpensive = true;
|
|
|
| if (isExpensive) {
|
| @@ -1083,13 +1087,14 @@ CanvasPattern* BaseRenderingContext2D::createPattern(const CanvasImageSourceUnio
|
|
|
| SourceImageStatus status;
|
| CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
|
| - RefPtr<Image> imageForRendering = imageSourceInternal->getSourceImageForCanvas(&status, PreferNoAcceleration, SnapshotReasonCreatePattern);
|
| + FloatSize defaultObjectSize(width(), height());
|
| + RefPtr<Image> imageForRendering = imageSourceInternal->getSourceImageForCanvas(&status, PreferNoAcceleration, SnapshotReasonCreatePattern, defaultObjectSize);
|
|
|
| switch (status) {
|
| case NormalSourceImageStatus:
|
| break;
|
| case ZeroSizeCanvasSourceImageStatus:
|
| - exceptionState.throwDOMException(InvalidStateError, String::format("The canvas %s is 0.", imageSourceInternal->elementSize().width() ? "height" : "width"));
|
| + exceptionState.throwDOMException(InvalidStateError, String::format("The canvas %s is 0.", imageSourceInternal->elementSize(defaultObjectSize).width() ? "height" : "width"));
|
| return nullptr;
|
| case UndecodableSourceImageStatus:
|
| exceptionState.throwDOMException(InvalidStateError, "Source image is in the 'broken' state.");
|
|
|