toDataURL can return an empty image in some cases
https://bugs.webkit.org/show_bug.cgi?id=115981
<rdar://problem/13760256>

Reviewed by Darin Adler.

Source/WebCore:

In some accelerated rendering cases, calling toDataURL on
an off-screen canvas produced an empty image. The solution
was to force a CGContextFlush before extracting the data
for image generation.

While here, I collected the flushing code from other methods
into a single place. Also we were getting into a situation where
we called flush two times in a row.

Test: fast/canvas/toDataURL-not-empty.html

* platform/graphics/ImageBuffer.h:
(ImageBuffer): Define two new methods flushContext and flushContextIfNecessary.
* platform/graphics/cg/ImageBufferCG.cpp:
(WebCore::ImageBuffer::context): Call flushContextIfNecessary.
(WebCore::ImageBuffer::flushContextIfNecessary): Moved the 10.7 code in here.
(WebCore::ImageBuffer::flushContext): Calls CGContextFlush.
(WebCore::ImageBuffer::getUnmultipliedImageData): Call new helper.
(WebCore::ImageBuffer::getPremultipliedImageData): Call new helper.
(WebCore::ImageBuffer::toDataURL): Flush the CG context.

LayoutTests:

Make sure that a canvas with content is not the same as one
without content.

* fast/canvas/toDataURL-not-empty-expected.txt: Added.
* fast/canvas/toDataURL-not-empty.html: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@150040 268f45cc-cd09-0410-ab3c-d52691b4dbfc