Changeset 50381 in webkit


Ignore:
Timestamp:
Oct 31, 2009 3:19:47 PM (15 years ago)
Author:
oliver@apple.com
Message:

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

Location:
trunk
Files:
6 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r50358 r50381  
     12009-10-31  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Jon Honeycutt.
     4
     5        WebGL allows objects to be used with the wrong context
     6        https://bugs.webkit.org/show_bug.cgi?id=30981
     7
     8        Add tests for null/missing object parameters and objects being used
     9        on the wrong context.
     10
     11        * fast/canvas/webgl/incorrect-context-object-behaviour-expected.txt: Added.
     12        * fast/canvas/webgl/incorrect-context-object-behaviour.html: Added.
     13        * fast/canvas/webgl/null-object-behaviour-expected.txt: Added.
     14        * fast/canvas/webgl/null-object-behaviour.html: Added.
     15        * fast/canvas/webgl/resources/shader-test.js:
     16        (loadStandardProgram):
     17        (loadStandardVertexShader):
     18        (loadStandardFragmentShader):
     19        * fast/canvas/webgl/script-tests/incorrect-context-object-behaviour.js: Added.
     20        * fast/canvas/webgl/script-tests/null-object-behaviour.js: Added.
     21
    1222009-10-30  Enrica Casucci  <enrica@apple.com>
    223
  • trunk/LayoutTests/fast/canvas/webgl/resources/shader-test.js

    r49420 r50381  
    1616function loadStandardProgram(context) {
    1717    var program = context.createProgram();
     18    context.attachShader(program, loadStandardVertexShader(context));
     19    context.attachShader(program, loadStandardFragmentShader(context));
     20    context.linkProgram(program);
     21    return program;
     22}
     23
     24function loadStandardVertexShader(context) {
    1825    var vertexShader = context.createShader(context.VERTEX_SHADER);
    1926    context.shaderSource(vertexShader, getShaderSource("resources/vertexShader.vert"));
    2027    context.compileShader(vertexShader);
     28    return vertexShader;
     29}
     30
     31function loadStandardFragmentShader(context) {
    2132    var fragmentShader = context.createShader(context.FRAGMENT_SHADER);
    2233    context.shaderSource(fragmentShader, getShaderSource("resources/fragmentShader.frag"));
    2334    context.compileShader(fragmentShader);
    24     context.attachShader(program, vertexShader);
    25     context.attachShader(program, fragmentShader);
    26     context.linkProgram(program);
    27     return program;
     35    return fragmentShader;
    2836}
  • trunk/WebCore/ChangeLog

    r50369 r50381  
     12009-10-31  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Jon Honeycutt.
     4
     5        WebGL allows objects to be used with the wrong context
     6        https://bugs.webkit.org/show_bug.cgi?id=30981
     7
     8        Simply add null checks and a few context guards to ensure we don't
     9        deref null or attempt to use an object from a different context.
     10
     11        Tests: fast/canvas/webgl/incorrect-context-object-behaviour.html
     12               fast/canvas/webgl/null-object-behaviour.html
     13
     14        * html/canvas/CanvasRenderingContext3D.cpp:
     15        (WebCore::CanvasRenderingContext3D::attachShader):
     16        (WebCore::CanvasRenderingContext3D::bindAttribLocation):
     17        (WebCore::CanvasRenderingContext3D::bindBuffer):
     18        (WebCore::CanvasRenderingContext3D::bindFramebuffer):
     19        (WebCore::CanvasRenderingContext3D::bindRenderbuffer):
     20        (WebCore::CanvasRenderingContext3D::bindTexture):
     21        (WebCore::CanvasRenderingContext3D::compileShader):
     22        (WebCore::CanvasRenderingContext3D::detachShader):
     23        (WebCore::CanvasRenderingContext3D::framebufferRenderbuffer):
     24        (WebCore::CanvasRenderingContext3D::framebufferTexture2D):
     25        (WebCore::CanvasRenderingContext3D::getProgrami):
     26        (WebCore::CanvasRenderingContext3D::getProgramiv):
     27        (WebCore::CanvasRenderingContext3D::getProgramInfoLog):
     28        (WebCore::CanvasRenderingContext3D::getShaderi):
     29        (WebCore::CanvasRenderingContext3D::getShaderiv):
     30        (WebCore::CanvasRenderingContext3D::getShaderInfoLog):
     31        (WebCore::CanvasRenderingContext3D::getShaderSource):
     32        (WebCore::CanvasRenderingContext3D::getUniformf):
     33        (WebCore::CanvasRenderingContext3D::getUniformfv):
     34        (WebCore::CanvasRenderingContext3D::getUniformi):
     35        (WebCore::CanvasRenderingContext3D::getUniformiv):
     36        (WebCore::CanvasRenderingContext3D::getUniformLocation):
     37        (WebCore::CanvasRenderingContext3D::isBuffer):
     38        (WebCore::CanvasRenderingContext3D::linkProgram):
     39        (WebCore::CanvasRenderingContext3D::shaderSource):
     40        * html/canvas/CanvasRenderingContext3D.h:
     41        * html/canvas/CanvasRenderingContext3D.idl:
     42
    1432009-10-30  Zoltan Horvath  <zoltan@webkit.org>
    244
  • trunk/WebCore/html/canvas/CanvasRenderingContext3D.cpp

    r50181 r50381  
    128128}
    129129
    130 void CanvasRenderingContext3D::attachShader(CanvasProgram* program, CanvasShader* shader)
    131 {
    132     if (!program || !shader)
    133         return;
     130void CanvasRenderingContext3D::attachShader(CanvasProgram* program, CanvasShader* shader, ExceptionCode& ec)
     131{
     132    if (!program || program->context() != this || !shader || shader->context() != this) {
     133        ec = TYPE_MISMATCH_ERR;
     134        return;
     135    }
    134136    m_context->attachShader(program, shader);
    135137    cleanupAfterGraphicsCall(false);
    136138}
    137139
    138 void CanvasRenderingContext3D::bindAttribLocation(CanvasProgram* program, unsigned long index, const String& name)
    139 {
    140     if (!program)
    141         return;
     140void CanvasRenderingContext3D::bindAttribLocation(CanvasProgram* program, unsigned long index, const String& name, ExceptionCode& ec)
     141{
     142    if (!program || program->context() != this) {
     143        ec = TYPE_MISMATCH_ERR;
     144        return;
     145    }
    142146    m_context->bindAttribLocation(program, index, name);
    143147    cleanupAfterGraphicsCall(false);
    144148}
    145149
    146 void CanvasRenderingContext3D::bindBuffer(unsigned long target, CanvasBuffer* buffer)
    147 {
     150void CanvasRenderingContext3D::bindBuffer(unsigned long target, CanvasBuffer* buffer, ExceptionCode& ec)
     151{
     152    if (!buffer || buffer->context() != this) {
     153        ec = TYPE_MISMATCH_ERR;
     154        return;
     155    }
    148156    m_context->bindBuffer(target, buffer);
    149157    cleanupAfterGraphicsCall(false);
     
    151159
    152160
    153 void CanvasRenderingContext3D::bindFramebuffer(unsigned long target, CanvasFramebuffer* buffer)
    154 {
     161void CanvasRenderingContext3D::bindFramebuffer(unsigned long target, CanvasFramebuffer* buffer, ExceptionCode& ec)
     162{
     163    if (!buffer || buffer->context() != this) {
     164        ec = TYPE_MISMATCH_ERR;
     165        return;
     166    }
    155167    m_context->bindFramebuffer(target, buffer);
    156168    cleanupAfterGraphicsCall(false);
    157169}
    158170
    159 void CanvasRenderingContext3D::bindRenderbuffer(unsigned long target, CanvasRenderbuffer* renderbuffer)
    160 {
    161     m_context->bindRenderbuffer(target, renderbuffer);
    162     cleanupAfterGraphicsCall(false);
    163 }
    164 
    165 
    166 void CanvasRenderingContext3D::bindTexture(unsigned long target, CanvasTexture* texture)
    167 {
     171void CanvasRenderingContext3D::bindRenderbuffer(unsigned long target, CanvasRenderbuffer* renderBuffer, ExceptionCode& ec)
     172{
     173    if (!renderBuffer || renderBuffer->context() != this) {
     174        ec = TYPE_MISMATCH_ERR;
     175        return;
     176    }
     177    m_context->bindRenderbuffer(target, renderBuffer);
     178    cleanupAfterGraphicsCall(false);
     179}
     180
     181
     182void CanvasRenderingContext3D::bindTexture(unsigned long target, CanvasTexture* texture, ExceptionCode& ec)
     183{
     184    if (!texture || texture->context() != this) {
     185        ec = TYPE_MISMATCH_ERR;
     186        return;
     187    }
    168188    m_context->bindTexture(target, texture);
    169189    cleanupAfterGraphicsCall(false);
     
    263283}
    264284
    265 void CanvasRenderingContext3D::compileShader(CanvasShader* shader)
    266 {
     285void CanvasRenderingContext3D::compileShader(CanvasShader* shader, ExceptionCode& ec)
     286{
     287    if (!shader || shader->context() != this) {
     288        ec = TYPE_MISMATCH_ERR;
     289        return;
     290    }
    267291    m_context->compileShader(shader);
    268292    cleanupAfterGraphicsCall(false);
     
    401425}
    402426
    403 void CanvasRenderingContext3D::detachShader(CanvasProgram* program, CanvasShader* shader)
    404 {
    405     if (!program || !shader)
    406         return;
    407 
     427void CanvasRenderingContext3D::detachShader(CanvasProgram* program, CanvasShader* shader, ExceptionCode& ec)
     428{
     429    if (!program || program->context() != this || !shader || shader->context() != this) {
     430        ec = TYPE_MISMATCH_ERR;
     431        return;
     432    }
    408433    m_context->detachShader(program, shader);
    409434    cleanupAfterGraphicsCall(false);
     
    461486}
    462487
    463 void CanvasRenderingContext3D::framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, CanvasRenderbuffer* buffer)
    464 {
    465     if (!buffer)
    466         return;
    467        
     488void CanvasRenderingContext3D::framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, CanvasRenderbuffer* buffer, ExceptionCode& ec)
     489{
     490    if (!buffer || buffer->context() != this) {
     491        ec = TYPE_MISMATCH_ERR;
     492        return;
     493    }       
    468494    m_context->framebufferRenderbuffer(target, attachment, renderbuffertarget, buffer);
    469495    cleanupAfterGraphicsCall(false);
    470496}
    471497
    472 void CanvasRenderingContext3D::framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, CanvasTexture* texture, long level)
    473 {
    474     if (!texture)
    475         return;
    476        
     498void CanvasRenderingContext3D::framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, CanvasTexture* texture, long level, ExceptionCode& ec)
     499{
     500    if (!texture || texture->context() != this) {
     501        ec = TYPE_MISMATCH_ERR;
     502        return;
     503    }
    477504    m_context->framebufferTexture2D(target, attachment, textarget, texture, level);
    478505    cleanupAfterGraphicsCall(false);
     
    591618}
    592619
    593 int CanvasRenderingContext3D::getProgrami(CanvasProgram* program, unsigned long pname)
    594 {
     620int CanvasRenderingContext3D::getProgrami(CanvasProgram* program, unsigned long pname, ExceptionCode& ec)
     621{
     622    if (!program || program->context() != this) {
     623        ec = TYPE_MISMATCH_ERR;
     624        return 0;
     625    }
     626
    595627    int result = m_context->getProgrami(program, pname);
    596628    cleanupAfterGraphicsCall(false);
     
    598630}
    599631
    600 PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getProgramiv(CanvasProgram* program, unsigned long pname)
    601 {
     632PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getProgramiv(CanvasProgram* program, unsigned long pname, ExceptionCode& ec)
     633{
     634    if (!program || program->context() != this) {
     635        ec = TYPE_MISMATCH_ERR;
     636        return 0;
     637    }
    602638    RefPtr<CanvasIntArray> array = m_context->getProgramiv(program, pname);
    603639    cleanupAfterGraphicsCall(false);
     
    605641}
    606642
    607 String CanvasRenderingContext3D::getProgramInfoLog(CanvasProgram* program)
    608 {
     643String CanvasRenderingContext3D::getProgramInfoLog(CanvasProgram* program, ExceptionCode& ec)
     644{
     645    if (!program || program->context() != this) {
     646        ec = TYPE_MISMATCH_ERR;
     647        return "";
     648    }
    609649    String s = m_context->getProgramInfoLog(program);
    610650    cleanupAfterGraphicsCall(false);
     
    626666}
    627667
    628 int CanvasRenderingContext3D::getShaderi(CanvasShader* shader, unsigned long pname)
    629 {
     668int CanvasRenderingContext3D::getShaderi(CanvasShader* shader, unsigned long pname, ExceptionCode& ec)
     669{
     670    if (!shader || shader->context() != this) {
     671        ec = TYPE_MISMATCH_ERR;
     672        return 0;
     673    }
    630674    int result = m_context->getShaderi(shader, pname);
    631675    cleanupAfterGraphicsCall(false);
     
    633677}
    634678
    635 PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getShaderiv(CanvasShader* shader, unsigned long pname)
    636 {
     679PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getShaderiv(CanvasShader* shader, unsigned long pname, ExceptionCode& ec)
     680{
     681    if (!shader || shader->context() != this) {
     682        ec = TYPE_MISMATCH_ERR;
     683        return 0;
     684    }
    637685    RefPtr<CanvasIntArray> array = m_context->getShaderiv(shader, pname);
    638686    cleanupAfterGraphicsCall(false);
     
    640688}
    641689
    642 String CanvasRenderingContext3D::getShaderInfoLog(CanvasShader* shader)
    643 {
     690String CanvasRenderingContext3D::getShaderInfoLog(CanvasShader* shader, ExceptionCode& ec)
     691{
     692    if (!shader || shader->context() != this) {
     693        ec = TYPE_MISMATCH_ERR;
     694        return "";
     695    }
    644696    String s = m_context->getShaderInfoLog(shader);
    645697    cleanupAfterGraphicsCall(false);
     
    647699}
    648700
    649 String CanvasRenderingContext3D::getShaderSource(CanvasShader* shader)
    650 {
     701String CanvasRenderingContext3D::getShaderSource(CanvasShader* shader, ExceptionCode& ec)
     702{
     703    if (!shader || shader->context() != this) {
     704        ec = TYPE_MISMATCH_ERR;
     705        return "";
     706    }
    651707    String s = m_context->getShaderSource(shader);
    652708    cleanupAfterGraphicsCall(false);
     
    687743}
    688744
    689 float CanvasRenderingContext3D::getUniformf(CanvasProgram* program, long location)
    690 {
     745float CanvasRenderingContext3D::getUniformf(CanvasProgram* program, long location, ExceptionCode& ec)
     746{
     747    if (!program || program->context() != this) {
     748        ec = TYPE_MISMATCH_ERR;
     749        return 0;
     750    }
    691751    float result = m_context->getUniformf(program, location);
    692752    cleanupAfterGraphicsCall(false);
     
    694754}
    695755
    696 PassRefPtr<CanvasFloatArray> CanvasRenderingContext3D::getUniformfv(CanvasProgram* program, long location)
    697 {
     756PassRefPtr<CanvasFloatArray> CanvasRenderingContext3D::getUniformfv(CanvasProgram* program, long location, ExceptionCode& ec)
     757{
     758    if (!program || program->context() != this) {
     759        ec = TYPE_MISMATCH_ERR;
     760        return 0;
     761    }
    698762    RefPtr<CanvasFloatArray> array = m_context->getUniformfv(program, location);
    699763    cleanupAfterGraphicsCall(false);
     
    701765}
    702766
    703 long CanvasRenderingContext3D::getUniformi(CanvasProgram* program, long location)
    704 {
     767long CanvasRenderingContext3D::getUniformi(CanvasProgram* program, long location, ExceptionCode& ec)
     768{
     769    if (!program || program->context() != this) {
     770        ec = TYPE_MISMATCH_ERR;
     771        return 0;
     772    }
    705773    long result = m_context->getUniformi(program, location);
    706774    cleanupAfterGraphicsCall(false);
     
    708776}
    709777
    710 PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getUniformiv(CanvasProgram* program, long location)
    711 {
     778PassRefPtr<CanvasIntArray> CanvasRenderingContext3D::getUniformiv(CanvasProgram* program, long location, ExceptionCode& ec)
     779{
     780    if (!program || program->context() != this) {
     781        ec = TYPE_MISMATCH_ERR;
     782        return 0;
     783    }
    712784    RefPtr<CanvasIntArray> array = m_context->getUniformiv(program, location);
    713785    cleanupAfterGraphicsCall(false);
     
    715787}
    716788
    717 long CanvasRenderingContext3D::getUniformLocation(CanvasProgram* program, const String& name)
    718 {
     789long CanvasRenderingContext3D::getUniformLocation(CanvasProgram* program, const String& name, ExceptionCode& ec)
     790{
     791    if (!program || program->context() != this) {
     792        ec = TYPE_MISMATCH_ERR;
     793        return 0;
     794    }
    719795    return m_context->getUniformLocation(program, name);
    720796}
     
    765841    if (!buffer)
    766842        return false;
    767        
     843
    768844    return m_context->isBuffer(buffer);
    769845}
     
    805881}
    806882
    807 void CanvasRenderingContext3D::linkProgram(CanvasProgram* program)
    808 {
    809     if (!program)
    810         return;
     883void CanvasRenderingContext3D::linkProgram(CanvasProgram* program, ExceptionCode& ec)
     884{
     885    if (!program || program->context() != this) {
     886        ec = TYPE_MISMATCH_ERR;
     887        return;
     888    }
    811889       
    812890    m_context->linkProgram(program);
     
    857935}
    858936
    859 void CanvasRenderingContext3D::shaderSource(CanvasShader* shader, const String& string)
    860 {
     937void CanvasRenderingContext3D::shaderSource(CanvasShader* shader, const String& string, ExceptionCode& ec)
     938{
     939    if (!shader || shader->context() != this) {
     940        ec = TYPE_MISMATCH_ERR;
     941        return;
     942    }
    861943    m_context->shaderSource(shader, string);
    862944    cleanupAfterGraphicsCall(false);
  • trunk/WebCore/html/canvas/CanvasRenderingContext3D.h

    r50181 r50381  
    6262
    6363        void activeTexture(unsigned long texture);
    64         void attachShader(CanvasProgram*, CanvasShader*);
    65         void bindAttribLocation(CanvasProgram*, unsigned long index, const String& name);
    66         void bindBuffer(unsigned long target, CanvasBuffer*);
    67         void bindFramebuffer(unsigned long target, CanvasFramebuffer*);
    68         void bindRenderbuffer(unsigned long target, CanvasRenderbuffer*);
    69         void bindTexture(unsigned long target, CanvasTexture*);
     64        void attachShader(CanvasProgram*, CanvasShader*, ExceptionCode& ec);
     65        void bindAttribLocation(CanvasProgram*, unsigned long index, const String& name, ExceptionCode& ec);
     66        void bindBuffer(unsigned long target, CanvasBuffer*, ExceptionCode& ec);
     67        void bindFramebuffer(unsigned long target, CanvasFramebuffer*, ExceptionCode& ec);
     68        void bindRenderbuffer(unsigned long target, CanvasRenderbuffer*, ExceptionCode& ec);
     69        void bindTexture(unsigned long target, CanvasTexture*, ExceptionCode& ec);
    7070        void blendColor(double red, double green, double blue, double alpha);
    7171        void blendEquation(unsigned long mode);
     
    8484        void clearStencil(long);
    8585        void colorMask(bool red, bool green, bool blue, bool alpha);
    86         void compileShader(CanvasShader*);
     86        void compileShader(CanvasShader*, ExceptionCode& ec);
    8787       
    8888        //void compressedTexImage2D(unsigned long target, long level, unsigned long internalformat, unsigned long width, unsigned long height, long border, unsigned long imageSize, const void* data);
     
    111111        void depthMask(bool);
    112112        void depthRange(double zNear, double zFar);
    113         void detachShader(CanvasProgram*, CanvasShader*);
     113        void detachShader(CanvasProgram*, CanvasShader*, ExceptionCode& ec);
    114114        void disable(unsigned long cap);
    115115        void disableVertexAttribArray(unsigned long index);
     
    121121        void finish();
    122122        void flush();
    123         void framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, CanvasRenderbuffer*);
    124         void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, CanvasTexture*, long level);
     123        void framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, CanvasRenderbuffer*, ExceptionCode& ec);
     124        void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, CanvasTexture*, long level, ExceptionCode& ec);
    125125        void frontFace(unsigned long mode);
    126126        void generateMipmap(unsigned long target);
     
    144144        int getInteger(unsigned long pname);
    145145        PassRefPtr<CanvasIntArray> getIntegerv(unsigned long pname);
    146         int getProgrami(CanvasProgram*, unsigned long pname);
    147         PassRefPtr<CanvasIntArray> getProgramiv(CanvasProgram*, unsigned long pname);
    148         String getProgramInfoLog(CanvasProgram*);
     146        int getProgrami(CanvasProgram*, unsigned long pname, ExceptionCode& ec);
     147        PassRefPtr<CanvasIntArray> getProgramiv(CanvasProgram*, unsigned long pname, ExceptionCode& ec);
     148        String getProgramInfoLog(CanvasProgram*, ExceptionCode& ec);
    149149        int getRenderbufferParameteri(unsigned long target, unsigned long pname);
    150150        PassRefPtr<CanvasIntArray> getRenderbufferParameteriv(unsigned long target, unsigned long pname);
    151         int getShaderi(CanvasShader*, unsigned long pname);
    152         PassRefPtr<CanvasIntArray> getShaderiv(CanvasShader*, unsigned long pname);
    153 
    154         String getShaderInfoLog(CanvasShader*);
     151        int getShaderi(CanvasShader*, unsigned long pname, ExceptionCode& ec);
     152        PassRefPtr<CanvasIntArray> getShaderiv(CanvasShader*, unsigned long pname, ExceptionCode& ec);
     153
     154        String getShaderInfoLog(CanvasShader*, ExceptionCode& ec);
    155155
    156156        // TBD
    157157        // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
    158158
    159         String getShaderSource(CanvasShader*);
     159        String getShaderSource(CanvasShader*, ExceptionCode& ec);
    160160        String getString(unsigned long name);
    161161
     
    165165        PassRefPtr<CanvasIntArray> getTexParameteriv(unsigned long target, unsigned long pname);
    166166
    167         float getUniformf(CanvasProgram* program, long location);
    168         PassRefPtr<CanvasFloatArray> getUniformfv(CanvasProgram* program, long location);
    169         long getUniformi(CanvasProgram* program, long location);
    170         PassRefPtr<CanvasIntArray> getUniformiv(CanvasProgram* program, long location);
    171 
    172         long getUniformLocation(CanvasProgram*, const String& name);
     167        float getUniformf(CanvasProgram* program, long location, ExceptionCode& ec);
     168        PassRefPtr<CanvasFloatArray> getUniformfv(CanvasProgram* program, long location, ExceptionCode& ec);
     169        long getUniformi(CanvasProgram* program, long location, ExceptionCode& ec);
     170        PassRefPtr<CanvasIntArray> getUniformiv(CanvasProgram* program, long location, ExceptionCode& ec);
     171
     172        long getUniformLocation(CanvasProgram*, const String& name, ExceptionCode& ec);
    173173
    174174        float getVertexAttribf(unsigned long index, unsigned long pname);
     
    188188        bool isTexture(CanvasTexture*);
    189189        void lineWidth(double);
    190         void linkProgram(CanvasProgram*);
     190        void linkProgram(CanvasProgram*, ExceptionCode& ec);
    191191        void pixelStorei(unsigned long pname, long param);
    192192        void polygonOffset(double factor, double units);
     
    198198        void sampleCoverage(double value, bool invert);
    199199        void scissor(long x, long y, unsigned long width, unsigned long height);
    200         void shaderSource(CanvasShader*, const String&);
     200        void shaderSource(CanvasShader*, const String&, ExceptionCode& ec);
    201201        void stencilFunc(unsigned long func, long ref, unsigned long mask);
    202202        void stencilFuncSeparate(unsigned long face, unsigned long func, long ref, unsigned long mask);
  • trunk/WebCore/html/canvas/CanvasRenderingContext3D.idl

    r49447 r50381  
    462462
    463463        void         activeTexture(in unsigned long texture);
    464         void         attachShader(in CanvasProgram program, in CanvasShader shader);
    465         void         bindAttribLocation(in CanvasProgram program, in unsigned long index, in DOMString name);
    466         void         bindBuffer(in unsigned long target, in CanvasBuffer buffer);
    467         void         bindFramebuffer(in unsigned long target, in CanvasFramebuffer framebuffer);
    468         void         bindRenderbuffer(in unsigned long target, in CanvasRenderbuffer renderbuffer);
    469         void         bindTexture(in unsigned long target, in CanvasTexture texture);
     464        void         attachShader(in CanvasProgram program, in CanvasShader shader) raises(DOMException);
     465        void         bindAttribLocation(in CanvasProgram program, in unsigned long index, in DOMString name) raises(DOMException);
     466        void         bindBuffer(in unsigned long target, in CanvasBuffer buffer) raises(DOMException);
     467        void         bindFramebuffer(in unsigned long target, in CanvasFramebuffer framebuffer) raises(DOMException);
     468        void         bindRenderbuffer(in unsigned long target, in CanvasRenderbuffer renderbuffer) raises(DOMException);
     469        void         bindTexture(in unsigned long target, in CanvasTexture texture) raises(DOMException);
    470470        void         blendColor(in double red, in double green, in double blue, in double alpha);
    471471        void         blendEquation( in unsigned long mode );
     
    487487        void         clearStencil(in long s);
    488488        void         colorMask(in boolean red, in boolean green, in boolean blue, in boolean alpha);
    489         void         compileShader(in CanvasShader shader);
     489        void         compileShader(in CanvasShader shader) raises(DOMException);
    490490       
    491491        //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);
     
    515515        // FIXME: this differs from the current WebGL spec (depthRangef)
    516516        void         depthRange(in double zNear, in double zFar);
    517         void         detachShader(in CanvasProgram program, in CanvasShader shader);
     517        void         detachShader(in CanvasProgram program, in CanvasShader shader) raises(DOMException);
    518518        void         disable(in unsigned long cap);
    519519        void         disableVertexAttribArray(in unsigned long index);
     
    525525        void         finish();
    526526        void         flush();
    527         void         framebufferRenderbuffer(in unsigned long target, in unsigned long attachment, in unsigned long renderbuffertarget, in CanvasRenderbuffer renderbuffer);
    528         void         framebufferTexture2D(in unsigned long target, in unsigned long attachment, in unsigned long textarget, in CanvasTexture texture, in long level);
     527        void         framebufferRenderbuffer(in unsigned long target, in unsigned long attachment, in unsigned long renderbuffertarget, in CanvasRenderbuffer renderbuffer) raises(DOMException);
     528        void         framebufferTexture2D(in unsigned long target, in unsigned long attachment, in unsigned long textarget, in CanvasTexture texture, in long level) raises(DOMException);
    529529        void         frontFace(in unsigned long mode);
    530530        void         generateMipmap(in unsigned long target);
     
    553553        long getInteger(in unsigned long pname);
    554554        CanvasIntArray getIntegerv(in unsigned long pname);
    555         long getProgrami(in CanvasProgram program, in unsigned long pname);
    556         CanvasIntArray getProgramiv(in CanvasProgram program, in unsigned long pname);
    557         DOMString getProgramInfoLog(in CanvasProgram program);
     555        long getProgrami(in CanvasProgram program, in unsigned long pname) raises(DOMException);
     556        CanvasIntArray getProgramiv(in CanvasProgram program, in unsigned long pname) raises(DOMException);
     557        DOMString getProgramInfoLog(in CanvasProgram program) raises(DOMException);
    558558        long getRenderbufferParameteri(in unsigned long target, in unsigned long pname);
    559559        CanvasIntArray getRenderbufferParameteriv(in unsigned long target, in unsigned long pname);
    560         long getShaderi(in CanvasShader shader, in unsigned long pname);
    561         CanvasIntArray getShaderiv(in CanvasShader shader, in unsigned long pname);
    562 
    563         DOMString    getShaderInfoLog(in CanvasShader shader);
     560        long getShaderi(in CanvasShader shader, in unsigned long pname) raises(DOMException);
     561        CanvasIntArray getShaderiv(in CanvasShader shader, in unsigned long pname) raises(DOMException);
     562
     563        DOMString    getShaderInfoLog(in CanvasShader shader) raises(DOMException);
    564564
    565565        // TBD
    566566        // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
    567567
    568         DOMString    getShaderSource(in CanvasShader shader);
     568        DOMString    getShaderSource(in CanvasShader shader) raises(DOMException);
    569569        DOMString    getString(in unsigned long name);
    570570
     
    574574        CanvasIntArray getTexParameteriv(in unsigned long target, in unsigned long pname);
    575575
    576         float getUniformf(in CanvasProgram program, in long location);
    577         CanvasFloatArray getUniformfv(in CanvasProgram program, in long location);
    578         long getUniformi(in CanvasProgram program, in long location);
    579         CanvasIntArray getUniformiv(in CanvasProgram program, in long location);
     576        float getUniformf(in CanvasProgram program, in long location) raises(DOMException);
     577        CanvasFloatArray getUniformfv(in CanvasProgram program, in long location) raises(DOMException);
     578        long getUniformi(in CanvasProgram program, in long location) raises(DOMException);
     579        CanvasIntArray getUniformiv(in CanvasProgram program, in long location) raises(DOMException);
    580580       
    581         long getUniformLocation(in CanvasProgram program, in DOMString name);
     581        long getUniformLocation(in CanvasProgram program, in DOMString name) raises(DOMException);
    582582
    583583        float getVertexAttribf(in unsigned long index, in unsigned long pname);
     
    597597        boolean      isTexture(in CanvasTexture texture);
    598598        void         lineWidth(in double width);
    599         void         linkProgram(in CanvasProgram program);
     599        void         linkProgram(in CanvasProgram program) raises(DOMException);
    600600        void         pixelStorei(in unsigned long pname, in long param);
    601601        void         polygonOffset(in double factor, in double units);
    602        
     602
    603603        CanvasArray readPixels(in long x, in long y, in unsigned long width, in unsigned long height, in unsigned long format, in unsigned long type);
    604604       
     
    607607        void         sampleCoverage(in double value, in boolean invert);
    608608        void         scissor(in long x, in long y, in unsigned long width, in unsigned long height);
    609         void         shaderSource(in CanvasShader shader, in DOMString string);
     609        void         shaderSource(in CanvasShader shader, in DOMString string) raises(DOMException);
    610610        void         stencilFunc(in unsigned long func, in long ref, in unsigned long mask);
    611611        void         stencilFuncSeparate(in unsigned long face, in unsigned long func, in long ref, in unsigned long mask);
Note: See TracChangeset for help on using the changeset viewer.