[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

oliver at apple.com oliver at apple.com
Wed Apr 7 23:17:26 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 26f05d5c827dac654479bcdd2cb2399ebda45f2b
Author: oliver at apple.com <oliver at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sat Oct 31 22:19:47 2009 +0000

    WebGL allows objects to be used with the wrong context
    https://bugs.webkit.org/show_bug.cgi?id=30981
    
    Reviewed by Jon Honeycutt.
    
    Simply add null checks and a few context guards to ensure we don't
    deref null or attempt to use an object from a different context.
    
    Tests: fast/canvas/webgl/incorrect-context-object-behaviour.html
           fast/canvas/webgl/null-object-behaviour.html
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@50381 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 124bebc..a4b9fbe 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,24 @@
+2009-10-31  Oliver Hunt  <oliver at apple.com>
+
+        Reviewed by Jon Honeycutt.
+
+        WebGL allows objects to be used with the wrong context
+        https://bugs.webkit.org/show_bug.cgi?id=30981
+
+        Add tests for null/missing object parameters and objects being used
+        on the wrong context.
+
+        * fast/canvas/webgl/incorrect-context-object-behaviour-expected.txt: Added.
+        * fast/canvas/webgl/incorrect-context-object-behaviour.html: Added.
+        * fast/canvas/webgl/null-object-behaviour-expected.txt: Added.
+        * fast/canvas/webgl/null-object-behaviour.html: Added.
+        * fast/canvas/webgl/resources/shader-test.js:
+        (loadStandardProgram):
+        (loadStandardVertexShader):
+        (loadStandardFragmentShader):
+        * fast/canvas/webgl/script-tests/incorrect-context-object-behaviour.js: Added.
+        * fast/canvas/webgl/script-tests/null-object-behaviour.js: Added.
+
 2009-10-30  Enrica Casucci  <enrica at apple.com>
 
         Reviewed by Darin Adler.
diff --git a/LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour-expected.txt b/LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour-expected.txt
new file mode 100644
index 0000000..2fc73e8
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour-expected.txt
@@ -0,0 +1,35 @@
+Tests calling WebGL APIs with objects from other contexts
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS contextA.compileShader(shaderB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.linkProgram(programB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.attachShader(programA, shaderB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.attachShader(programB, shaderA) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.attachShader(programB, shaderB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.detachShader(programA, shaderB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.detachShader(programB, shaderA) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.detachShader(programB, shaderB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.shaderSource(shaderB, 'foo') threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.bindAttribLocation(programB, 0, 'foo') threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.bindFramebuffer(0, frameBufferB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.bindRenderbuffer(0, renderBufferB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.bindTexture(textureB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.framebufferRenderbuffer(0, 0, renderBufferB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.framebufferTexture2D(0, 0, textureB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getProgrami(programB, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getProgramiv(programB, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getProgramInfoLog(programB, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getShaderi(shaderB, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getShaderiv(shaderB, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getShaderInfoLog(shaderB, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getShaderSource(shaderB) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getUniformf(programB, locationA) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getUniformfv(programB, locationA) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getUniformi(programB, locationA) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getUniformiv(programB, locationA) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS contextA.getUniformLocation(programB, 'u_modelViewProjMatrix') threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour.html b/LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour.html
new file mode 100644
index 0000000..f37684d
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour.html
@@ -0,0 +1,15 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css"/>
+<script src="../../js/resources/js-test-pre.js"></script>
+<script src="resources/shader-test.js"></script>
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+
+<script src="script-tests/incorrect-context-object-behaviour.js"></script>
+
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/canvas/webgl/null-object-behaviour-expected.txt b/LayoutTests/fast/canvas/webgl/null-object-behaviour-expected.txt
new file mode 100644
index 0000000..a1f8298
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/null-object-behaviour-expected.txt
@@ -0,0 +1,36 @@
+Tests calling WebGL APIs without providing the necessary objects
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS context.compileShader() threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.linkProgram() threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.attachShader() threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.attachShader(program, undefined) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.attachShader(undefined, shader) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.detachShader(program, undefined) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.detachShader(undefined, shader) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.shaderSource() threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.shaderSource(undefined, 'foo') threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.bindAttribLocation(undefined, 0, 'foo') threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.bindBuffer(0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.bindFramebuffer(0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.bindRenderbuffer(0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.bindTexture(0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.framebufferRenderbuffer(0, 0, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.framebufferTexture2D(0, 0, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getProgrami(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getProgramiv(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getProgramInfoLog(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getShaderi(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getShaderiv(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getShaderInfoLog(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getShaderSource(undefined) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getUniformf(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getUniformfv(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getUniformi(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getUniformiv(undefined, 0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS context.getUniformLocation(undefined, 'foo') threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/canvas/webgl/null-object-behaviour.html b/LayoutTests/fast/canvas/webgl/null-object-behaviour.html
new file mode 100644
index 0000000..b076c5f
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/null-object-behaviour.html
@@ -0,0 +1,15 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css"/>
+<script src="../../js/resources/js-test-pre.js"></script>
+<script src="resources/shader-test.js"></script>
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+
+<script src="script-tests/null-object-behaviour.js"></script>
+
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/canvas/webgl/resources/shader-test.js b/LayoutTests/fast/canvas/webgl/resources/shader-test.js
index 3c0a2c5..5df6a50 100644
--- a/LayoutTests/fast/canvas/webgl/resources/shader-test.js
+++ b/LayoutTests/fast/canvas/webgl/resources/shader-test.js
@@ -15,14 +15,22 @@ function create3DContext() {
 
 function loadStandardProgram(context) {
     var program = context.createProgram();
+    context.attachShader(program, loadStandardVertexShader(context));
+    context.attachShader(program, loadStandardFragmentShader(context));
+    context.linkProgram(program);
+    return program;
+}
+
+function loadStandardVertexShader(context) {
     var vertexShader = context.createShader(context.VERTEX_SHADER);
     context.shaderSource(vertexShader, getShaderSource("resources/vertexShader.vert"));
     context.compileShader(vertexShader);
+    return vertexShader;
+}
+
+function loadStandardFragmentShader(context) {
     var fragmentShader = context.createShader(context.FRAGMENT_SHADER);
     context.shaderSource(fragmentShader, getShaderSource("resources/fragmentShader.frag"));
     context.compileShader(fragmentShader);
-    context.attachShader(program, vertexShader);
-    context.attachShader(program, fragmentShader);
-    context.linkProgram(program);
-    return program;
+    return fragmentShader;
 }
diff --git a/LayoutTests/fast/canvas/webgl/script-tests/incorrect-context-object-behaviour.js b/LayoutTests/fast/canvas/webgl/script-tests/incorrect-context-object-behaviour.js
new file mode 100644
index 0000000..c699c7d
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/script-tests/incorrect-context-object-behaviour.js
@@ -0,0 +1,47 @@
+description("Tests calling WebGL APIs with objects from other contexts");
+
+var contextA = create3DContext();
+var contextB = create3DContext();
+var programA = loadStandardProgram(contextA);
+var programB = loadStandardProgram(contextB);
+var shaderA = loadStandardVertexShader(contextA);
+var shaderB = loadStandardVertexShader(contextB);
+var textureA = contextA.createTexture();
+var textureB = contextB.createTexture();
+var frameBufferA = contextA.createFramebuffer();
+var frameBufferB = contextB.createFramebuffer();
+var renderBufferA = contextA.createRenderbuffer();
+var renderBufferB = contextB.createRenderbuffer();
+var locationA = contextA.getUniformLocation(programA, 'u_modelViewProjMatrix');
+var locationB = contextB.getUniformLocation(programB, 'u_modelViewProjMatrix');
+
+
+shouldThrow("contextA.compileShader(shaderB)");
+shouldThrow("contextA.linkProgram(programB)");
+shouldThrow("contextA.attachShader(programA, shaderB)");
+shouldThrow("contextA.attachShader(programB, shaderA)");
+shouldThrow("contextA.attachShader(programB, shaderB)");
+shouldThrow("contextA.detachShader(programA, shaderB)");
+shouldThrow("contextA.detachShader(programB, shaderA)");
+shouldThrow("contextA.detachShader(programB, shaderB)");
+shouldThrow("contextA.shaderSource(shaderB, 'foo')");
+shouldThrow("contextA.bindAttribLocation(programB, 0, 'foo')");
+shouldThrow("contextA.bindFramebuffer(0, frameBufferB)");
+shouldThrow("contextA.bindRenderbuffer(0, renderBufferB)");
+shouldThrow("contextA.bindTexture(textureB)");
+shouldThrow("contextA.framebufferRenderbuffer(0, 0, renderBufferB)");
+shouldThrow("contextA.framebufferTexture2D(0, 0, textureB)");
+shouldThrow("contextA.getProgrami(programB, 0)");
+shouldThrow("contextA.getProgramiv(programB, 0)");
+shouldThrow("contextA.getProgramInfoLog(programB, 0)");
+shouldThrow("contextA.getShaderi(shaderB, 0)");
+shouldThrow("contextA.getShaderiv(shaderB, 0)");
+shouldThrow("contextA.getShaderInfoLog(shaderB, 0)");
+shouldThrow("contextA.getShaderSource(shaderB)");
+shouldThrow("contextA.getUniformf(programB, locationA)");
+shouldThrow("contextA.getUniformfv(programB, locationA)");
+shouldThrow("contextA.getUniformi(programB, locationA)");
+shouldThrow("contextA.getUniformiv(programB, locationA)");
+shouldThrow("contextA.getUniformLocation(programB, 'u_modelViewProjMatrix')");
+
+successfullyParsed = true;
diff --git a/LayoutTests/fast/canvas/webgl/script-tests/null-object-behaviour.js b/LayoutTests/fast/canvas/webgl/script-tests/null-object-behaviour.js
new file mode 100644
index 0000000..5463d0e
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/script-tests/null-object-behaviour.js
@@ -0,0 +1,36 @@
+description("Tests calling WebGL APIs without providing the necessary objects");
+
+var context = create3DContext();
+var program = loadStandardProgram(context);
+var shader = loadStandardVertexShader(context);
+
+shouldThrow("context.compileShader()");
+shouldThrow("context.linkProgram()");
+shouldThrow("context.attachShader()");
+shouldThrow("context.attachShader(program, undefined)");
+shouldThrow("context.attachShader(undefined, shader)");
+shouldThrow("context.detachShader(program, undefined)");
+shouldThrow("context.detachShader(undefined, shader)");
+shouldThrow("context.shaderSource()");
+shouldThrow("context.shaderSource(undefined, 'foo')");
+shouldThrow("context.bindAttribLocation(undefined, 0, 'foo')");
+shouldThrow("context.bindBuffer(0)");
+shouldThrow("context.bindFramebuffer(0)");
+shouldThrow("context.bindRenderbuffer(0)");
+shouldThrow("context.bindTexture(0)");
+shouldThrow("context.framebufferRenderbuffer(0, 0, 0)");
+shouldThrow("context.framebufferTexture2D(0, 0, 0)");
+shouldThrow("context.getProgrami(undefined, 0)");
+shouldThrow("context.getProgramiv(undefined, 0)");
+shouldThrow("context.getProgramInfoLog(undefined, 0)");
+shouldThrow("context.getShaderi(undefined, 0)");
+shouldThrow("context.getShaderiv(undefined, 0)");
+shouldThrow("context.getShaderInfoLog(undefined, 0)");
+shouldThrow("context.getShaderSource(undefined)");
+shouldThrow("context.getUniformf(undefined, 0)");
+shouldThrow("context.getUniformfv(undefined, 0)");
+shouldThrow("context.getUniformi(undefined, 0)");
+shouldThrow("context.getUniformiv(undefined, 0)");
+shouldThrow("context.getUniformLocation(undefined, 'foo')");
+
+successfullyParsed = true;
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index c40fb6b..ea76164 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,45 @@
+2009-10-31  Oliver Hunt  <oliver at apple.com>
+
+        Reviewed by Jon Honeycutt.
+
+        WebGL allows objects to be used with the wrong context
+        https://bugs.webkit.org/show_bug.cgi?id=30981
+
+        Simply add null checks and a few context guards to ensure we don't
+        deref null or attempt to use an object from a different context.
+
+        Tests: fast/canvas/webgl/incorrect-context-object-behaviour.html
+               fast/canvas/webgl/null-object-behaviour.html
+
+        * html/canvas/CanvasRenderingContext3D.cpp:
+        (WebCore::CanvasRenderingContext3D::attachShader):
+        (WebCore::CanvasRenderingContext3D::bindAttribLocation):
+        (WebCore::CanvasRenderingContext3D::bindBuffer):
+        (WebCore::CanvasRenderingContext3D::bindFramebuffer):
+        (WebCore::CanvasRenderingContext3D::bindRenderbuffer):
+        (WebCore::CanvasRenderingContext3D::bindTexture):
+        (WebCore::CanvasRenderingContext3D::compileShader):
+        (WebCore::CanvasRenderingContext3D::detachShader):
+        (WebCore::CanvasRenderingContext3D::framebufferRenderbuffer):
+        (WebCore::CanvasRenderingContext3D::framebufferTexture2D):
+        (WebCore::CanvasRenderingContext3D::getProgrami):
+        (WebCore::CanvasRenderingContext3D::getProgramiv):
+        (WebCore::CanvasRenderingContext3D::getProgramInfoLog):
+        (WebCore::CanvasRenderingContext3D::getShaderi):
+        (WebCore::CanvasRenderingContext3D::getShaderiv):
+        (WebCore::CanvasRenderingContext3D::getShaderInfoLog):
+        (WebCore::CanvasRenderingContext3D::getShaderSource):
+        (WebCore::CanvasRenderingContext3D::getUniformf):
+        (WebCore::CanvasRenderingContext3D::getUniformfv):
+        (WebCore::CanvasRenderingContext3D::getUniformi):
+        (WebCore::CanvasRenderingContext3D::getUniformiv):
+        (WebCore::CanvasRenderingContext3D::getUniformLocation):
+        (WebCore::CanvasRenderingContext3D::isBuffer):
+        (WebCore::CanvasRenderingContext3D::linkProgram):
+        (WebCore::CanvasRenderingContext3D::shaderSource):
+        * html/canvas/CanvasRenderingContext3D.h:
+        * html/canvas/CanvasRenderingContext3D.idl:
+
 2009-10-30  Zoltan Horvath  <zoltan at webkit.org>
 
         Reviewed by Darin Adler.
diff --git a/WebCore/html/canvas/CanvasRenderingContext3D.cpp b/WebCore/html/canvas/CanvasRenderingContext3D.cpp
index 612b4c3..84ccf4c 100644
--- a/WebCore/html/canvas/CanvasRenderingContext3D.cpp
+++ b/WebCore/html/canvas/CanvasRenderingContext3D.cpp
@@ -127,44 +127,64 @@ void CanvasRenderingContext3D::activeTexture(unsigned long texture)
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::attachShader(CanvasProgram* program, CanvasShader* shader)
+void CanvasRenderingContext3D::attachShader(CanvasProgram* program, CanvasShader* shader, ExceptionCode& ec)
 {
-    if (!program || !shader)
+    if (!program || program->context() != this || !shader || shader->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
         return;
+    }
     m_context->attachShader(program, shader);
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::bindAttribLocation(CanvasProgram* program, unsigned long index, const String& name)
+void CanvasRenderingContext3D::bindAttribLocation(CanvasProgram* program, unsigned long index, const String& name, ExceptionCode& ec)
 {
-    if (!program)
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
         return;
+    }
     m_context->bindAttribLocation(program, index, name);
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::bindBuffer(unsigned long target, CanvasBuffer* buffer)
+void CanvasRenderingContext3D::bindBuffer(unsigned long target, CanvasBuffer* buffer, ExceptionCode& ec)
 {
+    if (!buffer || buffer->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return;
+    }
     m_context->bindBuffer(target, buffer);
     cleanupAfterGraphicsCall(false);
 }
 
 
-void CanvasRenderingContext3D::bindFramebuffer(unsigned long target, CanvasFramebuffer* buffer)
+void CanvasRenderingContext3D::bindFramebuffer(unsigned long target, CanvasFramebuffer* buffer, ExceptionCode& ec)
 {
+    if (!buffer || buffer->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return;
+    }
     m_context->bindFramebuffer(target, buffer);
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::bindRenderbuffer(unsigned long target, CanvasRenderbuffer* renderbuffer)
+void CanvasRenderingContext3D::bindRenderbuffer(unsigned long target, CanvasRenderbuffer* renderBuffer, ExceptionCode& ec)
 {
-    m_context->bindRenderbuffer(target, renderbuffer);
+    if (!renderBuffer || renderBuffer->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return;
+    }
+    m_context->bindRenderbuffer(target, renderBuffer);
     cleanupAfterGraphicsCall(false);
 }
 
 
-void CanvasRenderingContext3D::bindTexture(unsigned long target, CanvasTexture* texture)
+void CanvasRenderingContext3D::bindTexture(unsigned long target, CanvasTexture* texture, ExceptionCode& ec)
 {
+    if (!texture || texture->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return;
+    }
     m_context->bindTexture(target, texture);
     cleanupAfterGraphicsCall(false);
 }
@@ -262,8 +282,12 @@ void CanvasRenderingContext3D::colorMask(bool red, bool green, bool blue, bool a
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::compileShader(CanvasShader* shader)
+void CanvasRenderingContext3D::compileShader(CanvasShader* shader, ExceptionCode& ec)
 {
+    if (!shader || shader->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return;
+    }
     m_context->compileShader(shader);
     cleanupAfterGraphicsCall(false);
 }
@@ -400,11 +424,12 @@ void CanvasRenderingContext3D::depthRange(double zNear, double zFar)
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::detachShader(CanvasProgram* program, CanvasShader* shader)
+void CanvasRenderingContext3D::detachShader(CanvasProgram* program, CanvasShader* shader, ExceptionCode& ec)
 {
-    if (!program || !shader)
+    if (!program || program->context() != this || !shader || shader->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
         return;
-
+    }
     m_context->detachShader(program, shader);
     cleanupAfterGraphicsCall(false);
 }
@@ -460,20 +485,22 @@ void CanvasRenderingContext3D::flush()
     cleanupAfterGraphicsCall(true);
 }
 
-void CanvasRenderingContext3D::framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, CanvasRenderbuffer* buffer)
+void CanvasRenderingContext3D::framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, CanvasRenderbuffer* buffer, ExceptionCode& ec)
 {
-    if (!buffer)
+    if (!buffer || buffer->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
         return;
-        
+    }       
     m_context->framebufferRenderbuffer(target, attachment, renderbuffertarget, buffer);
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, CanvasTexture* texture, long level)
+void CanvasRenderingContext3D::framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, CanvasTexture* texture, long level, ExceptionCode& ec)
 {
-    if (!texture)
+    if (!texture || texture->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
         return;
-        
+    }
     m_context->framebufferTexture2D(target, attachment, textarget, texture, level);
     cleanupAfterGraphicsCall(false);
 }
@@ -590,22 +617,35 @@ PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getIntegerv(unsigned long p
     return array;
 }
 
-int CanvasRenderingContext3D::getProgrami(CanvasProgram* program, unsigned long pname)
+int CanvasRenderingContext3D::getProgrami(CanvasProgram* program, unsigned long pname, ExceptionCode& ec)
 {
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
+
     int result = m_context->getProgrami(program, pname);
     cleanupAfterGraphicsCall(false);
     return result;
 }
 
-PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getProgramiv(CanvasProgram* program, unsigned long pname)
+PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getProgramiv(CanvasProgram* program, unsigned long pname, ExceptionCode& ec)
 {
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
     RefPtr<CanvasIntArray> array = m_context->getProgramiv(program, pname);
     cleanupAfterGraphicsCall(false);
     return array;
 }
 
-String CanvasRenderingContext3D::getProgramInfoLog(CanvasProgram* program)
+String CanvasRenderingContext3D::getProgramInfoLog(CanvasProgram* program, ExceptionCode& ec)
 {
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return "";
+    }
     String s = m_context->getProgramInfoLog(program);
     cleanupAfterGraphicsCall(false);
     return s;
@@ -625,29 +665,45 @@ PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getRenderbufferParameteriv(
     return array;
 }
 
-int CanvasRenderingContext3D::getShaderi(CanvasShader* shader, unsigned long pname)
+int CanvasRenderingContext3D::getShaderi(CanvasShader* shader, unsigned long pname, ExceptionCode& ec)
 {
+    if (!shader || shader->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
     int result = m_context->getShaderi(shader, pname);
     cleanupAfterGraphicsCall(false);
     return result;
 }
 
-PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getShaderiv(CanvasShader* shader, unsigned long pname)
+PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getShaderiv(CanvasShader* shader, unsigned long pname, ExceptionCode& ec)
 {
+    if (!shader || shader->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
     RefPtr<CanvasIntArray> array = m_context->getShaderiv(shader, pname);
     cleanupAfterGraphicsCall(false);
     return array;
 }
 
-String CanvasRenderingContext3D::getShaderInfoLog(CanvasShader* shader)
+String CanvasRenderingContext3D::getShaderInfoLog(CanvasShader* shader, ExceptionCode& ec)
 {
+    if (!shader || shader->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return "";
+    }
     String s = m_context->getShaderInfoLog(shader);
     cleanupAfterGraphicsCall(false);
     return s;
 }
 
-String CanvasRenderingContext3D::getShaderSource(CanvasShader* shader)
+String CanvasRenderingContext3D::getShaderSource(CanvasShader* shader, ExceptionCode& ec)
 {
+    if (!shader || shader->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return "";
+    }
     String s = m_context->getShaderSource(shader);
     cleanupAfterGraphicsCall(false);
     return s;
@@ -686,36 +742,56 @@ PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getTexParameteriv(unsigned
     return array;
 }
 
-float CanvasRenderingContext3D::getUniformf(CanvasProgram* program, long location)
+float CanvasRenderingContext3D::getUniformf(CanvasProgram* program, long location, ExceptionCode& ec)
 {
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
     float result = m_context->getUniformf(program, location);
     cleanupAfterGraphicsCall(false);
     return result;
 }
 
-PassRefPtr<CanvasFloatArray> CanvasRenderingContext3D::getUniformfv(CanvasProgram* program, long location)
+PassRefPtr<CanvasFloatArray> CanvasRenderingContext3D::getUniformfv(CanvasProgram* program, long location, ExceptionCode& ec)
 {
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
     RefPtr<CanvasFloatArray> array = m_context->getUniformfv(program, location);
     cleanupAfterGraphicsCall(false);
     return array;
 }
 
-long CanvasRenderingContext3D::getUniformi(CanvasProgram* program, long location)
+long CanvasRenderingContext3D::getUniformi(CanvasProgram* program, long location, ExceptionCode& ec)
 {
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
     long result = m_context->getUniformi(program, location);
     cleanupAfterGraphicsCall(false);
     return result;
 }
 
-PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getUniformiv(CanvasProgram* program, long location)
+PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getUniformiv(CanvasProgram* program, long location, ExceptionCode& ec)
 {
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
     RefPtr<CanvasIntArray> array = m_context->getUniformiv(program, location);
     cleanupAfterGraphicsCall(false);
     return array;
 }
 
-long CanvasRenderingContext3D::getUniformLocation(CanvasProgram* program, const String& name)
+long CanvasRenderingContext3D::getUniformLocation(CanvasProgram* program, const String& name, ExceptionCode& ec)
 {
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return 0;
+    }
     return m_context->getUniformLocation(program, name);
 }
 
@@ -764,7 +840,7 @@ bool CanvasRenderingContext3D::isBuffer(CanvasBuffer* buffer)
 {
     if (!buffer)
         return false;
-        
+
     return m_context->isBuffer(buffer);
 }
 
@@ -804,10 +880,12 @@ void CanvasRenderingContext3D::lineWidth(double width)
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::linkProgram(CanvasProgram* program)
+void CanvasRenderingContext3D::linkProgram(CanvasProgram* program, ExceptionCode& ec)
 {
-    if (!program)
+    if (!program || program->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
         return;
+    }
         
     m_context->linkProgram(program);
     cleanupAfterGraphicsCall(false);
@@ -856,8 +934,12 @@ void CanvasRenderingContext3D::scissor(long x, long y, unsigned long width, unsi
     cleanupAfterGraphicsCall(false);
 }
 
-void CanvasRenderingContext3D::shaderSource(CanvasShader* shader, const String& string)
+void CanvasRenderingContext3D::shaderSource(CanvasShader* shader, const String& string, ExceptionCode& ec)
 {
+    if (!shader || shader->context() != this) {
+        ec = TYPE_MISMATCH_ERR;
+        return;
+    }
     m_context->shaderSource(shader, string);
     cleanupAfterGraphicsCall(false);
 }
diff --git a/WebCore/html/canvas/CanvasRenderingContext3D.h b/WebCore/html/canvas/CanvasRenderingContext3D.h
index 70d9b95..4939a77 100644
--- a/WebCore/html/canvas/CanvasRenderingContext3D.h
+++ b/WebCore/html/canvas/CanvasRenderingContext3D.h
@@ -61,12 +61,12 @@ class WebKitCSSMatrix;
         int sizeInBytes(int type, ExceptionCode& ec);
 
         void activeTexture(unsigned long texture);
-        void attachShader(CanvasProgram*, CanvasShader*);
-        void bindAttribLocation(CanvasProgram*, unsigned long index, const String& name);
-        void bindBuffer(unsigned long target, CanvasBuffer*);
-        void bindFramebuffer(unsigned long target, CanvasFramebuffer*);
-        void bindRenderbuffer(unsigned long target, CanvasRenderbuffer*);
-        void bindTexture(unsigned long target, CanvasTexture*);
+        void attachShader(CanvasProgram*, CanvasShader*, ExceptionCode& ec);
+        void bindAttribLocation(CanvasProgram*, unsigned long index, const String& name, ExceptionCode& ec);
+        void bindBuffer(unsigned long target, CanvasBuffer*, ExceptionCode& ec);
+        void bindFramebuffer(unsigned long target, CanvasFramebuffer*, ExceptionCode& ec);
+        void bindRenderbuffer(unsigned long target, CanvasRenderbuffer*, ExceptionCode& ec);
+        void bindTexture(unsigned long target, CanvasTexture*, ExceptionCode& ec);
         void blendColor(double red, double green, double blue, double alpha);
         void blendEquation(unsigned long mode);
         void blendEquationSeparate(unsigned long modeRGB, unsigned long modeAlpha);
@@ -83,7 +83,7 @@ class WebKitCSSMatrix;
         void clearDepth(double);
         void clearStencil(long);
         void colorMask(bool red, bool green, bool blue, bool alpha);
-        void compileShader(CanvasShader*);
+        void compileShader(CanvasShader*, ExceptionCode& ec);
         
         //void compressedTexImage2D(unsigned long target, long level, unsigned long internalformat, unsigned long width, unsigned long height, long border, unsigned long imageSize, const void* data);
         //void compressedTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, unsigned long width, unsigned long height, unsigned long format, unsigned long imageSize, const void* data);
@@ -110,7 +110,7 @@ class WebKitCSSMatrix;
         void depthFunc(unsigned long);
         void depthMask(bool);
         void depthRange(double zNear, double zFar);
-        void detachShader(CanvasProgram*, CanvasShader*);
+        void detachShader(CanvasProgram*, CanvasShader*, ExceptionCode& ec);
         void disable(unsigned long cap);
         void disableVertexAttribArray(unsigned long index);
         void drawArrays(unsigned long mode, long first, long count);
@@ -120,8 +120,8 @@ class WebKitCSSMatrix;
         void enableVertexAttribArray(unsigned long index);
         void finish();
         void flush();
-        void framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, CanvasRenderbuffer*);
-        void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, CanvasTexture*, long level);
+        void framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, CanvasRenderbuffer*, ExceptionCode& ec);
+        void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, CanvasTexture*, long level, ExceptionCode& ec);
         void frontFace(unsigned long mode);
         void generateMipmap(unsigned long target);
 
@@ -143,20 +143,20 @@ class WebKitCSSMatrix;
         PassRefPtr<CanvasIntArray> getFramebufferAttachmentParameteriv(unsigned long target, unsigned long attachment, unsigned long pname);
         int getInteger(unsigned long pname);
         PassRefPtr<CanvasIntArray> getIntegerv(unsigned long pname);
-        int getProgrami(CanvasProgram*, unsigned long pname);
-        PassRefPtr<CanvasIntArray> getProgramiv(CanvasProgram*, unsigned long pname);
-        String getProgramInfoLog(CanvasProgram*);
+        int getProgrami(CanvasProgram*, unsigned long pname, ExceptionCode& ec);
+        PassRefPtr<CanvasIntArray> getProgramiv(CanvasProgram*, unsigned long pname, ExceptionCode& ec);
+        String getProgramInfoLog(CanvasProgram*, ExceptionCode& ec);
         int getRenderbufferParameteri(unsigned long target, unsigned long pname);
         PassRefPtr<CanvasIntArray> getRenderbufferParameteriv(unsigned long target, unsigned long pname);
-        int getShaderi(CanvasShader*, unsigned long pname);
-        PassRefPtr<CanvasIntArray> getShaderiv(CanvasShader*, unsigned long pname);
+        int getShaderi(CanvasShader*, unsigned long pname, ExceptionCode& ec);
+        PassRefPtr<CanvasIntArray> getShaderiv(CanvasShader*, unsigned long pname, ExceptionCode& ec);
 
-        String getShaderInfoLog(CanvasShader*);
+        String getShaderInfoLog(CanvasShader*, ExceptionCode& ec);
 
         // TBD
         // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
 
-        String getShaderSource(CanvasShader*);
+        String getShaderSource(CanvasShader*, ExceptionCode& ec);
         String getString(unsigned long name);
 
         float getTexParameterf(unsigned long target, unsigned long pname);
@@ -164,12 +164,12 @@ class WebKitCSSMatrix;
         int getTexParameteri(unsigned long target, unsigned long pname);
         PassRefPtr<CanvasIntArray> getTexParameteriv(unsigned long target, unsigned long pname);
 
-        float getUniformf(CanvasProgram* program, long location);
-        PassRefPtr<CanvasFloatArray> getUniformfv(CanvasProgram* program, long location);
-        long getUniformi(CanvasProgram* program, long location);
-        PassRefPtr<CanvasIntArray> getUniformiv(CanvasProgram* program, long location);
+        float getUniformf(CanvasProgram* program, long location, ExceptionCode& ec);
+        PassRefPtr<CanvasFloatArray> getUniformfv(CanvasProgram* program, long location, ExceptionCode& ec);
+        long getUniformi(CanvasProgram* program, long location, ExceptionCode& ec);
+        PassRefPtr<CanvasIntArray> getUniformiv(CanvasProgram* program, long location, ExceptionCode& ec);
 
-        long getUniformLocation(CanvasProgram*, const String& name);
+        long getUniformLocation(CanvasProgram*, const String& name, ExceptionCode& ec);
 
         float getVertexAttribf(unsigned long index, unsigned long pname);
         PassRefPtr<CanvasFloatArray> getVertexAttribfv(unsigned long index, unsigned long pname);
@@ -187,7 +187,7 @@ class WebKitCSSMatrix;
         bool isShader(CanvasShader*);
         bool isTexture(CanvasTexture*);
         void lineWidth(double);
-        void linkProgram(CanvasProgram*);
+        void linkProgram(CanvasProgram*, ExceptionCode& ec);
         void pixelStorei(unsigned long pname, long param);
         void polygonOffset(double factor, double units);
         
@@ -197,7 +197,7 @@ class WebKitCSSMatrix;
         void renderbufferStorage(unsigned long target, unsigned long internalformat, unsigned long width, unsigned long height);
         void sampleCoverage(double value, bool invert);
         void scissor(long x, long y, unsigned long width, unsigned long height);
-        void shaderSource(CanvasShader*, const String&);
+        void shaderSource(CanvasShader*, const String&, ExceptionCode& ec);
         void stencilFunc(unsigned long func, long ref, unsigned long mask);
         void stencilFuncSeparate(unsigned long face, unsigned long func, long ref, unsigned long mask);
         void stencilMask(unsigned long);
diff --git a/WebCore/html/canvas/CanvasRenderingContext3D.idl b/WebCore/html/canvas/CanvasRenderingContext3D.idl
index db0fff3..63ec2d5 100644
--- a/WebCore/html/canvas/CanvasRenderingContext3D.idl
+++ b/WebCore/html/canvas/CanvasRenderingContext3D.idl
@@ -461,12 +461,12 @@ module html {
         long sizeInBytes(in unsigned long type) raises(DOMException);
 
         void         activeTexture(in unsigned long texture);
-        void         attachShader(in CanvasProgram program, in CanvasShader shader);
-        void         bindAttribLocation(in CanvasProgram program, in unsigned long index, in DOMString name);
-        void         bindBuffer(in unsigned long target, in CanvasBuffer buffer);
-        void         bindFramebuffer(in unsigned long target, in CanvasFramebuffer framebuffer);
-        void         bindRenderbuffer(in unsigned long target, in CanvasRenderbuffer renderbuffer);
-        void         bindTexture(in unsigned long target, in CanvasTexture texture);
+        void         attachShader(in CanvasProgram program, in CanvasShader shader) raises(DOMException);
+        void         bindAttribLocation(in CanvasProgram program, in unsigned long index, in DOMString name) raises(DOMException);
+        void         bindBuffer(in unsigned long target, in CanvasBuffer buffer) raises(DOMException);
+        void         bindFramebuffer(in unsigned long target, in CanvasFramebuffer framebuffer) raises(DOMException);
+        void         bindRenderbuffer(in unsigned long target, in CanvasRenderbuffer renderbuffer) raises(DOMException);
+        void         bindTexture(in unsigned long target, in CanvasTexture texture) raises(DOMException);
         void         blendColor(in double red, in double green, in double blue, in double alpha);
         void         blendEquation( in unsigned long mode );
         void         blendEquationSeparate(in unsigned long modeRGB, in unsigned long modeAlpha);
@@ -486,7 +486,7 @@ module html {
         void         clearDepth(in double depth);
         void         clearStencil(in long s);
         void         colorMask(in boolean red, in boolean green, in boolean blue, in boolean alpha);
-        void         compileShader(in CanvasShader shader);
+        void         compileShader(in CanvasShader shader) raises(DOMException);
         
         //void         compressedTexImage2D(in unsigned long target, in long level, in unsigned long internalformat, in unsigned long width, in unsigned long height, in long border, in unsigned long imageSize, const void* data);
         //void         compressedTexSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset, in unsigned long width, in unsigned long height, in unsigned long format, in unsigned long imageSize, const void* data);
@@ -514,7 +514,7 @@ module html {
         void         depthMask(in boolean flag);
         // FIXME: this differs from the current WebGL spec (depthRangef)
         void         depthRange(in double zNear, in double zFar);
-        void         detachShader(in CanvasProgram program, in CanvasShader shader);
+        void         detachShader(in CanvasProgram program, in CanvasShader shader) raises(DOMException);
         void         disable(in unsigned long cap);
         void         disableVertexAttribArray(in unsigned long index);
         void         drawArrays(in unsigned long mode, in long first, in unsigned long count);
@@ -524,8 +524,8 @@ module html {
         void         enableVertexAttribArray(in unsigned long index);
         void         finish();
         void         flush();
-        void         framebufferRenderbuffer(in unsigned long target, in unsigned long attachment, in unsigned long renderbuffertarget, in CanvasRenderbuffer renderbuffer);
-        void         framebufferTexture2D(in unsigned long target, in unsigned long attachment, in unsigned long textarget, in CanvasTexture texture, in long level);
+        void         framebufferRenderbuffer(in unsigned long target, in unsigned long attachment, in unsigned long renderbuffertarget, in CanvasRenderbuffer renderbuffer) raises(DOMException);
+        void         framebufferTexture2D(in unsigned long target, in unsigned long attachment, in unsigned long textarget, in CanvasTexture texture, in long level) raises(DOMException);
         void         frontFace(in unsigned long mode);
         void         generateMipmap(in unsigned long target);
         
@@ -552,20 +552,20 @@ module html {
         CanvasIntArray getFramebufferAttachmentParameteriv(in unsigned long target, in unsigned long attachment, in unsigned long pname);
         long getInteger(in unsigned long pname);
         CanvasIntArray getIntegerv(in unsigned long pname);
-        long getProgrami(in CanvasProgram program, in unsigned long pname);
-        CanvasIntArray getProgramiv(in CanvasProgram program, in unsigned long pname);
-        DOMString getProgramInfoLog(in CanvasProgram program);
+        long getProgrami(in CanvasProgram program, in unsigned long pname) raises(DOMException);
+        CanvasIntArray getProgramiv(in CanvasProgram program, in unsigned long pname) raises(DOMException);
+        DOMString getProgramInfoLog(in CanvasProgram program) raises(DOMException);
         long getRenderbufferParameteri(in unsigned long target, in unsigned long pname);
         CanvasIntArray getRenderbufferParameteriv(in unsigned long target, in unsigned long pname);
-        long getShaderi(in CanvasShader shader, in unsigned long pname);
-        CanvasIntArray getShaderiv(in CanvasShader shader, in unsigned long pname);
+        long getShaderi(in CanvasShader shader, in unsigned long pname) raises(DOMException);
+        CanvasIntArray getShaderiv(in CanvasShader shader, in unsigned long pname) raises(DOMException);
 
-        DOMString    getShaderInfoLog(in CanvasShader shader);
+        DOMString    getShaderInfoLog(in CanvasShader shader) raises(DOMException);
 
         // TBD
         // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
 
-        DOMString    getShaderSource(in CanvasShader shader);
+        DOMString    getShaderSource(in CanvasShader shader) raises(DOMException);
         DOMString    getString(in unsigned long name);
 
         float getTexParameterf(in unsigned long target, in unsigned long pname);
@@ -573,12 +573,12 @@ module html {
         long getTexParameteri(in unsigned long target, in unsigned long pname);
         CanvasIntArray getTexParameteriv(in unsigned long target, in unsigned long pname);
 
-        float getUniformf(in CanvasProgram program, in long location);
-        CanvasFloatArray getUniformfv(in CanvasProgram program, in long location);
-        long getUniformi(in CanvasProgram program, in long location);
-        CanvasIntArray getUniformiv(in CanvasProgram program, in long location);
+        float getUniformf(in CanvasProgram program, in long location) raises(DOMException);
+        CanvasFloatArray getUniformfv(in CanvasProgram program, in long location) raises(DOMException);
+        long getUniformi(in CanvasProgram program, in long location) raises(DOMException);
+        CanvasIntArray getUniformiv(in CanvasProgram program, in long location) raises(DOMException);
         
-        long getUniformLocation(in CanvasProgram program, in DOMString name);
+        long getUniformLocation(in CanvasProgram program, in DOMString name) raises(DOMException);
 
         float getVertexAttribf(in unsigned long index, in unsigned long pname);
         CanvasFloatArray getVertexAttribfv(in unsigned long index, in unsigned long pname);
@@ -596,17 +596,17 @@ module html {
         boolean      isShader(in CanvasShader shader);
         boolean      isTexture(in CanvasTexture texture);
         void         lineWidth(in double width);
-        void         linkProgram(in CanvasProgram program);
+        void         linkProgram(in CanvasProgram program) raises(DOMException);
         void         pixelStorei(in unsigned long pname, in long param);
         void         polygonOffset(in double factor, in double units);
-        
+
         CanvasArray readPixels(in long x, in long y, in unsigned long width, in unsigned long height, in unsigned long format, in unsigned long type);
         
         void         releaseShaderCompiler();
         void         renderbufferStorage(in unsigned long target, in unsigned long internalformat, in unsigned long width, in unsigned long height);
         void         sampleCoverage(in double value, in boolean invert);
         void         scissor(in long x, in long y, in unsigned long width, in unsigned long height);
-        void         shaderSource(in CanvasShader shader, in DOMString string);
+        void         shaderSource(in CanvasShader shader, in DOMString string) raises(DOMException);
         void         stencilFunc(in unsigned long func, in long ref, in unsigned long mask);
         void         stencilFuncSeparate(in unsigned long face, in unsigned long func, in long ref, in unsigned long mask);
         void         stencilMask(in unsigned long mask);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list