Chromium Code Reviews| Index: Source/core/html/HTMLCanvasElement.cpp |
| diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp |
| index dddb0c2a382b5744dc7627a6200ae86b39a4d7fd..09b49ae0bb73169d524682f03dfd5f3109095ae3 100644 |
| --- a/Source/core/html/HTMLCanvasElement.cpp |
| +++ b/Source/core/html/HTMLCanvasElement.cpp |
| @@ -62,17 +62,26 @@ namespace blink { |
| using namespace HTMLNames; |
| +namespace { |
| + |
| // These values come from the WhatWG spec. |
| -static const int DefaultWidth = 300; |
| -static const int DefaultHeight = 150; |
| +const int DefaultWidth = 300; |
| +const int DefaultHeight = 150; |
| // Firefox limits width/height to 32767 pixels, but slows down dramatically before it |
| // reaches that limit. We limit by area instead, giving us larger maximum dimensions, |
| // in exchange for a smaller maximum canvas size. |
| -static const int MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels |
| +const int MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels |
| //In Skia, we will also limit width/height to 32767. |
| -static const int MaxSkiaDim = 32767; // Maximum width/height in CSS pixels. |
| +const int MaxSkiaDim = 32767; // Maximum width/height in CSS pixels. |
| + |
| +CanvasRenderingContext::SourceBuffer convertSourceBuffer(HTMLCanvasElement::SourceBuffer sourceBuffer) |
| +{ |
| + return static_cast<CanvasRenderingContext::SourceBuffer>(sourceBuffer); |
| +} |
| + |
| +} // namespace |
| DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(CanvasObserver); |
| @@ -381,26 +390,18 @@ String HTMLCanvasElement::toEncodingMimeType(const String& mimeType) |
| const AtomicString HTMLCanvasElement::imageSourceURL() const |
| { |
| - return AtomicString(toDataURLInternal("image/png", 0, true)); |
| + return AtomicString(toDataURLInternal("image/png", 0, Front)); |
| } |
| -String HTMLCanvasElement::toDataURLInternal(const String& mimeType, const double* quality, bool isSaving) const |
| +String HTMLCanvasElement::toDataURLInternal(const String& mimeType, const double* quality, SourceBuffer sourceBuffer) const |
| { |
| if (m_size.isEmpty() || !buffer()) |
| return String("data:,"); |
| - String encodingMimeType = toEncodingMimeType(mimeType); |
| - |
| - // Try to get ImageData first, as that may avoid lossy conversions. |
|
dshwang
2014/11/20 21:14:28
comment is wrong. buffer() contains not-lossy cont
|
| - RefPtrWillBeRawPtr<ImageData> imageData = getImageData(); |
| - |
| - if (imageData) |
| - return ImageDataToDataURL(ImageDataBuffer(imageData->size(), imageData->data()), encodingMimeType, quality); |
| - |
| - if (m_context && m_context->is3d()) { |
| - m_context->paintRenderingResultsToCanvas(isSaving ? CanvasRenderingContext::Front : CanvasRenderingContext::Back); |
| - } |
| + if (m_context && m_context->is3d()) |
| + m_context->paintRenderingResultsToCanvas(convertSourceBuffer(sourceBuffer)); |
| + String encodingMimeType = toEncodingMimeType(mimeType); |
| return buffer()->toDataURL(encodingMimeType, quality); |
| } |
| @@ -411,14 +412,7 @@ String HTMLCanvasElement::toDataURL(const String& mimeType, const double* qualit |
| return String(); |
| } |
| - return toDataURLInternal(mimeType, quality); |
| -} |
| - |
| -PassRefPtrWillBeRawPtr<ImageData> HTMLCanvasElement::getImageData() const |
| -{ |
| - if (!m_context || !m_context->is3d()) |
| - return nullptr; |
| - return toWebGLRenderingContext(m_context.get())->paintRenderingResultsToImageData(); |
| + return toDataURLInternal(mimeType, quality, Back); |
| } |
| SecurityOrigin* HTMLCanvasElement::securityOrigin() const |
| @@ -666,12 +660,11 @@ void HTMLCanvasElement::ensureUnacceleratedImageBuffer() |
| m_didFailToCreateImageBuffer = !m_imageBuffer; |
| } |
| -Image* HTMLCanvasElement::copiedImage() const |
| +Image* HTMLCanvasElement::copiedImage(SourceBuffer sourceBuffer) const |
| { |
| if (!m_copiedImage && buffer()) { |
| - if (m_context && m_context->is3d()) { |
| - m_context->paintRenderingResultsToCanvas(CanvasRenderingContext::Front); |
| - } |
| + if (m_context && m_context->is3d()) |
| + m_context->paintRenderingResultsToCanvas(convertSourceBuffer(sourceBuffer)); |
| m_copiedImage = buffer()->copyImage(CopyBackingStore, Unscaled); |
| updateExternallyAllocatedMemory(); |
| } |