[GTK][EFL] ImageBufferCairo should accept resolution factor
[WebKit-https.git] / Source / WebCore / ChangeLog
index 398fe0d..c48cde1 100644 (file)
@@ -1,3 +1,50 @@
+2016-06-24  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [GTK][EFL] ImageBufferCairo should accept resolution factor
+        https://bugs.webkit.org/show_bug.cgi?id=157848
+
+        Reviewed by Martin Robinson.
+
+        ImageBufferCairo ignored the resolution factor passed in its constructor.
+        This resolution factor is originally introduced for HiDPI Canvas,
+        and since HiDPI canvas is not enabled in the ports using Cairo,
+        the lack of this implementation does not cause any problems.
+        And now, HiDPI Canvas is removed from the tree.
+
+        However, WebKit CSS filter uses this path.
+        The missing implementation is required under the HiDPI environment.
+
+        Since Cairo surface can have the device scale factor transparently,
+        the operations onto the surface is correctly done in the logical coordinate system.
+        So all we need to handle carefully is the direct surface modification done
+        in filter effects.
+
+        In this patch, we extend the image buffer size according to the resolution factor,
+        as the same to the CoreGraphics' implementation (ImageBufferCG). And by setting the
+        device scale factor of the surface correctly, we ensure that the rest of the Cairo
+        painting stack works with the existing logical coordinate system. And in ImageBufferCairo,
+        we carefully handle the logical and backing store coordinate system.
+
+        The attached test applies the CSS filter onto the svg image. And we resize the image size,
+        and perform scrolling. It incurs the paint, and filter effect recalcuation.
+        In that path, the filter effect side assumes that the image buffer size is scaled with the
+        resolution factor. So without this patch, it incurs buffer overflow and leads WebProcess crash.
+
+        * platform/graphics/IntPoint.h:
+        (WebCore::IntPoint::scale):
+        * platform/graphics/cairo/ImageBufferCairo.cpp:
+        (WebCore::ImageBufferData::createCompositorBuffer):
+        (WebCore::ImageBuffer::ImageBuffer):
+        (WebCore::ImageBuffer::copyImage):
+        (WebCore::ImageBuffer::platformTransformColorSpace):
+        (WebCore::getImageData):
+        (WebCore::logicalUnit):
+        (WebCore::backingStoreUnit):
+        (WebCore::ImageBuffer::getUnmultipliedImageData):
+        (WebCore::ImageBuffer::getPremultipliedImageData):
+        (WebCore::ImageBuffer::putByteArray):
+        (WebCore::ImageBuffer::copyToPlatformTexture):
+
 2016-06-24  Frederic Wang  <fwang@igalia.com>
 
         Refactor RenderMathMLOperator and RenderMathMLToken to avoid using anonymous renderers.