Implement the HTML5 canvas tainting rules to prevent potential data leakage
[WebKit-https.git] / WebCore / html / CanvasRenderingContext2D.h
index 79ba15b01a67a558e2d6d67235da82e2b8ee8acb..acb75aa9fa454f7f25c5d2eda924a0c83abc5e33 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef HTMLCanvas2DContext_h
-#define HTMLCanvas2DContext_h
+#ifndef CanvasRenderingContext2D_h
+#define CanvasRenderingContext2D_h
 
 #include "FloatSize.h"
 #include "GraphicsTypes.h"
 #include "Path.h"
 #include "PlatformString.h"
-#include <kxmlcore/Vector.h>
+#include <wtf/Vector.h>
 
-#if __APPLE__
+#if PLATFORM(CG)
 #include <ApplicationServices/ApplicationServices.h>
 #endif
 
@@ -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&);
@@ -143,12 +148,10 @@ namespace WebCore {
 
         void drawImage(HTMLImageElement*, float x, float y);
         void drawImage(HTMLImageElement*, float x, float y, float width, float height, ExceptionCode&);
-        void drawImage(HTMLImageElement*, float sx, float sy, float sw, float sh,
-            float dx, float dy, float dw, float dh, ExceptionCode&);
+        void drawImage(HTMLImageElement*, const FloatRect& srcRect, const FloatRect& dstRect, ExceptionCode&);
         void drawImage(HTMLCanvasElement*, float x, float y);
         void drawImage(HTMLCanvasElement*, float x, float y, float width, float height, ExceptionCode&);
-        void drawImage(HTMLCanvasElement*, float sx, float sy, float sw, float sh,
-            float dx, float dy, float dw, float dh, ExceptionCode&);
+        void drawImage(HTMLCanvasElement*, const FloatRect& srcRect, const FloatRect& dstRect, ExceptionCode&);
 
         void drawImageFromRect(HTMLImageElement*, float sx, float sy, float sw, float sh,
             float dx, float dy, float dw, float dh, const String& compositeOperation);
@@ -161,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; }
 
@@ -183,7 +191,7 @@ namespace WebCore {
             CompositeOperator m_globalComposite;
             bool m_appliedStrokePattern;
             bool m_appliedFillPattern;
-#if __APPLE__
+#if PLATFORM(CG)
             CGAffineTransform m_strokeStylePatternTransform;
             CGAffineTransform m_fillStylePatternTransform;
 #endif
@@ -201,6 +209,12 @@ namespace WebCore {
         void applyStrokePattern();
         void applyFillPattern();
 
+        void clearPathForDashboardBackwardCompatibilityMode();
+
+        void checkOrigin(const KURL&);
+
+        void printSecurityExceptionMessage() const;
+
         HTMLCanvasElement* m_canvas;
         Vector<State, 1> m_stateStack;
     };