15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2006, 2009, 2010 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Alp Toker <alp@atoker.com>
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef HTMLCanvasElement_h
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define HTMLCanvasElement_h
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/dom/Document.h"
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLElement.h"
33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/html/canvas/CanvasImageSource.h"
341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatRect.h"
351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/IntSize.h"
3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/graphics/Canvas2DLayerBridge.h"
3743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)#include "platform/graphics/GraphicsTypes.h"
38aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch#include "platform/graphics/ImageBufferClient.h"
39f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/heap/Handle.h"
40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "public/platform/WebThread.h"
41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Forward.h"
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)#define CanvasDefaultInterpolationQuality InterpolationLow
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
45c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class AffineTransform;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CanvasContextAttributes;
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CanvasRenderingContext;
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GraphicsContext;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GraphicsContextStateSaver;
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLCanvasElement;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Image;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageData;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageBuffer;
56a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)class ImageBufferSurface;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IntSize;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
59d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class CanvasObserver : public WillBeGarbageCollectedMixin {
60d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(CanvasObserver);
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect) = 0;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void canvasResized(HTMLCanvasElement*) = 0;
64d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if !ENABLE(OILPAN)
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void canvasDestroyed(HTMLCanvasElement*) = 0;
66d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif
67d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
68d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual void trace(Visitor*) { }
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
71c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class HTMLCanvasElement FINAL : public HTMLElement, public DocumentVisibilityObserver, public CanvasImageSource, public ImageBufferClient, public blink::WebThread::TaskObserver {
727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DEFINE_WRAPPERTYPEINFO();
73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLCanvasElement);
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    DECLARE_NODE_FACTORY(HTMLCanvasElement);
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~HTMLCanvasElement();
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void addObserver(CanvasObserver*);
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void removeObserver(CanvasObserver*);
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Attributes and functions exposed to script
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int width() const { return size().width(); }
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int height() const { return size().height(); }
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const IntSize& size() const { return m_size; }
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setWidth(int);
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setHeight(int);
89591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    void setAccelerationDisabled(bool accelerationDisabled) { m_accelerationDisabled = accelerationDisabled; }
90591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    bool accelerationDisabled() const { return m_accelerationDisabled; }
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setSize(const IntSize& newSize)
9302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch    {
94a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        if (newSize == size())
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
9602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch        m_ignoreReset = true;
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        setWidth(newSize.width());
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        setHeight(newSize.height());
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_ignoreReset = false;
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        reset();
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0);
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static String toEncodingMimeType(const String& mimeType);
106323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    String toDataURL(const String& mimeType, const double* quality, ExceptionState&) const;
107323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    String toDataURL(const String& mimeType, ExceptionState& exceptionState) const { return toDataURL(mimeType, 0, exceptionState); }
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Used for rendering
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void didDraw(const FloatRect&);
111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void notifyObserversCanvasChanged(const FloatRect&);
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)    void paint(GraphicsContext*, const LayoutRect&);
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsContext* drawingContext() const;
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsContext* existingDrawingContext() const;
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CanvasRenderingContext* renderingContext() const { return m_context.get(); }
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void ensureUnacceleratedImageBuffer();
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ImageBuffer* buffer() const;
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Image* copiedImage() const;
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearCopiedImage();
124323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    PassRefPtrWillBeRawPtr<ImageData> getImageData() const;
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void makePresentationCopy();
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearPresentationCopy();
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SecurityOrigin* securityOrigin() const;
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool originClean() const { return m_originClean; }
130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setOriginTainted() { m_originClean = false; }
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AffineTransform baseTransform() const;
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool is3D() const;
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
136aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    bool hasImageBuffer() const { return m_imageBuffer; }
137aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    bool hasValidImageBuffer() const;
138aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void discardImageBuffer();
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shouldAccelerate(const IntSize&) const;
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
142323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    virtual const AtomicString imageSourceURL() const OVERRIDE;
143323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
14409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE;
14509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
14609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // DocumentVisibilityObserver implementation
14709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void didChangeVisibilityState(PageVisibilityState) OVERRIDE;
14809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
149d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // CanvasImageSource implementation
150d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual PassRefPtr<Image> getSourceImageForCanvas(SourceImageMode, SourceImageStatus*) const OVERRIDE;
151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual bool wouldTaintOrigin(SecurityOrigin*) const OVERRIDE;
152d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual FloatSize sourceSize() const OVERRIDE;
153d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
154aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    // ImageBufferClient implementation
155aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    virtual void notifySurfaceInvalid() OVERRIDE;
156c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    virtual bool isDirty() OVERRIDE { return !m_dirtyRect.isEmpty(); }
157c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    virtual void didFinalizeFrame() OVERRIDE;
158c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
159c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    // Implementation of WebThread::TaskObserver methods
160c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    virtual void willProcessTask() OVERRIDE;
161c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    virtual void didProcessTask() OVERRIDE;
162aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
163f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    virtual void trace(Visitor*) OVERRIDE;
164f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
16509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)protected:
16609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void didMoveToNewDocument(Document& oldDocument) OVERRIDE;
1673c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
16951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    explicit HTMLCanvasElement(Document&);
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual bool areAuthorShadowsAllowed() const OVERRIDE { return false; }
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void reset();
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
177a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    PassOwnPtr<ImageBufferSurface> createImageBufferSurface(const IntSize& deviceSize, int* msaaSampleCount);
178591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    void createImageBuffer();
179aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void createImageBufferInternal();
180591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    void clearImageBuffer();
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
182c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void resetDirtyRect();
183c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setSurfaceSize(const IntSize&);
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool paintsIntoCanvasBuffer() const;
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
188d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void updateExternallyAllocatedMemory() const;
189f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
1905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    String toDataURLInternal(const String& mimeType, const double* quality, bool isSaving = false) const;
191323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
192d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WillBeHeapHashSet<RawPtrWillBeWeakMember<CanvasObserver> > m_observers;
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntSize m_size;
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
196f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    OwnPtrWillBeMember<CanvasRenderingContext> m_context;
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_ignoreReset;
199591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    bool m_accelerationDisabled;
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FloatRect m_dirtyRect;
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
202d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    mutable intptr_t m_externallyAllocatedMemory;
203f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_originClean;
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
20651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    // It prevents HTMLCanvasElement::buffer() from continuously re-attempting to allocate an imageBuffer
20751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    // after the first attempt failed.
20851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    mutable bool m_didFailToCreateImageBuffer;
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mutable bool m_didClearImageBuffer;
210591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    OwnPtr<ImageBuffer> m_imageBuffer;
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mutable OwnPtr<GraphicsContextStateSaver> m_contextStateSaver;
212591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mutable RefPtr<Image> m_presentedImage;
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mutable RefPtr<Image> m_copiedImage; // FIXME: This is temporary for platforms that have to copy the image buffer to render (and for CSSCanvasValue).
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // HTMLCanvasElement_h
220