Implement the HTML5 canvas tainting rules to prevent potential data leakage
[WebKit-https.git] / WebCore / html / CanvasRenderingContext2D.h
index a25b515b64746f42dd318514fe6b3c24025a82f8..acb75aa9fa454f7f25c5d2eda924a0c83abc5e33 100644 (file)
@@ -45,10 +45,12 @@ namespace WebCore {
     class GraphicsContext;
     class HTMLCanvasElement;
     class HTMLImageElement;
+    class ImageData;
+    class KURL;
 
     typedef int ExceptionCode;
 
-    class CanvasRenderingContext2D : public Shared<CanvasRenderingContext2D> {
+    class CanvasRenderingContext2D : public RefCounted<CanvasRenderingContext2D> {
     public:
         CanvasRenderingContext2D(HTMLCanvasElement*);
 
@@ -96,6 +98,7 @@ namespace WebCore {
         void scale(float sx, float sy);
         void rotate(float angleInRadians);
         void translate(float tx, float ty);
+        void transform(float m11, float m12, float m21, float m22, float dx, float dy);
 
         void setStrokeColor(const String& color);
         void setStrokeColor(float grayLevel);
@@ -126,6 +129,8 @@ namespace WebCore {
         void stroke();
         void clip();
 
+        bool isPointInPath(const float x, const float y);
+
         void clearRect(float x, float y, float width, float height, ExceptionCode&);
         void fillRect(float x, float y, float width, float height, ExceptionCode&);
         void strokeRect(float x, float y, float width, float height, ExceptionCode&);
@@ -159,7 +164,12 @@ namespace WebCore {
         PassRefPtr<CanvasGradient> createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1);
         PassRefPtr<CanvasPattern> createPattern(HTMLImageElement*, const String& repetitionType, ExceptionCode&);
         PassRefPtr<CanvasPattern> createPattern(HTMLCanvasElement*, const String& repetitionType, ExceptionCode&);
-
+        
+        PassRefPtr<ImageData> createImageData(float width, float height) const;
+        PassRefPtr<ImageData> getImageData(float sx, float sy, float sw, float sh) const;
+        void putImageData(ImageData*, float dx, float dy, ExceptionCode&);
+        void putImageData(ImageData*, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight, ExceptionCode&);
+        
         void reset();
         void detachCanvas() { m_canvas = 0; }
 
@@ -201,6 +211,10 @@ namespace WebCore {
 
         void clearPathForDashboardBackwardCompatibilityMode();
 
+        void checkOrigin(const KURL&);
+
+        void printSecurityExceptionMessage() const;
+
         HTMLCanvasElement* m_canvas;
         Vector<State, 1> m_stateStack;
     };