Chromium Code Reviews| Index: Source/core/html/HTMLImageElement.cpp |
| diff --git a/Source/core/html/HTMLImageElement.cpp b/Source/core/html/HTMLImageElement.cpp |
| index bed556d30ffc1e5b8771cdbc2fa1bdd38948d4ff..c41ec94cf84020cdd603b53101043b17e2d226e9 100644 |
| --- a/Source/core/html/HTMLImageElement.cpp |
| +++ b/Source/core/html/HTMLImageElement.cpp |
| @@ -31,7 +31,9 @@ |
| #include "core/events/ThreadLocalEventNames.h" |
| #include "core/fetch/ImageResource.h" |
| #include "core/html/HTMLAnchorElement.h" |
| +#include "core/html/HTMLCanvasElement.h" |
| #include "core/html/HTMLFormElement.h" |
| +#include "core/html/canvas/CanvasRenderingContext.h" |
| #include "core/html/parser/HTMLParserIdioms.h" |
| #include "core/html/parser/HTMLSrcsetParser.h" |
| #include "core/rendering/RenderImage.h" |
| @@ -410,4 +412,61 @@ bool HTMLImageElement::isInteractiveContent() const |
| return fastHasAttribute(usemapAttr); |
| } |
| +PassRefPtr<Image> HTMLImageElement::getSourceImageForCanvas(HTMLCanvasElement* canvas, ExceptionState& exceptionState, CanvasImageSourceUsage usage, bool* isVolatile) const |
| +{ |
| + if (isVolatile) |
| + *isVolatile = false; |
| + if (cachedImage() && cachedImage()->errorOccurred()) { |
| + exceptionState.throwDOMException(InvalidStateError, "The HTMLImageElement provided is in the 'broken' state."); |
| + return nullptr; |
| + } |
| + |
| + if (!complete()) { |
| + return nullptr; |
| + } |
| + |
| + if (!cachedImage()) { |
| + return usage == DrawCanvasImageSourceUsage ? Image::nullImage() : PassRefPtr<Image>(); |
| + } |
| + |
| + RefPtr<Image> sourceImage = cachedImage()->imageForRenderer(renderer()); |
| + |
| + // We need to synthesize a container size if a renderer is not available to provide one. |
| + if (!renderer() && sourceImage->usesContainerSize()) |
| + sourceImage->setContainerSize(sourceImage->size()); |
| + |
| + return sourceImage.release(); |
| +} |
| + |
| +bool HTMLImageElement::wouldTaintOrigin(CanvasRenderingContext* dst) const |
|
Stephen White
2014/02/27 18:53:41
It seems unfortunate to add a dependency on Canvas
|
| +{ |
| + ImageResource* image = cachedImage(); |
| + if (!image) |
| + return false; |
| + return !image->isAccessAllowed(dst->canvas()->securityOrigin()); |
| +} |
| + |
| +FloatSize HTMLImageElement::sourceSize() const |
| +{ |
| + ImageResource* image = cachedImage(); |
| + if (!image) |
| + return FloatSize(); |
| + LayoutSize size; |
| + size = image->imageSizeForRenderer(renderer(), 1.0f); // FIXME: Not sure about this. |
| + |
| + return size; |
| +} |
| + |
| +FloatSize HTMLImageElement::defaultDestinationSize() const |
| +{ |
| + ImageResource* image = cachedImage(); |
| + if (!image) |
| + return FloatSize(); |
| + LayoutSize size; |
| + size = image->imageSizeForRenderer(renderer(), 1.0f); // FIXME: Not sure about this. |
| + if (renderer() && renderer()->isRenderImage() && image->image() && !image->image()->hasRelativeWidth()) |
| + size.scale(toRenderImage(renderer())->imageDevicePixelRatio()); |
| + return size; |
| +} |
| + |
| } |