tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

invalid-passed-params.html (8629B)


      1 <!--
      2 Copyright (c) 2019 The Khronos Group Inc.
      3 Use of this source code is governed by an MIT-style license that can be
      4 found in the LICENSE.txt file.
      5 -->
      6 
      7 <!DOCTYPE html>
      8 <html>
      9 <head>
     10 <meta charset="utf-8">
     11 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
     12 <script src="../../js/js-test-pre.js"></script>
     13 <script src="../../js/desktop-gl-constants.js"></script>
     14 <script src="../../js/webgl-test-utils.js"></script>
     15 </head>
     16 <body>
     17 <div id="description"></div>
     18 <div id="console"></div>
     19 
     20 <script>
     21 "use strict";
     22 description("Test for invalid passed parameters");
     23 
     24 var wtu = WebGLTestUtils;
     25 var context = wtu.create3DContext();
     26 var contextVersion = wtu.getDefault3DContextVersion();
     27 
     28 debug("");
     29 debug("Test createShader()");
     30 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.createShader(context.FRAGMENT_SHADER)");
     31 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.createShader(context.VERTEX_SHADER)");
     32 wtu.shouldGenerateGLError(context, context.INVALID_ENUM, "context.createShader(0)");
     33 wtu.shouldGenerateGLError(context, context.INVALID_ENUM, "context.createShader(context.TRIANGLES)");
     34 
     35 debug("");
     36 debug("Test clear()");
     37 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.clear(desktopGL['ACCUM_BUFFER_BIT'])");
     38 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.clear(desktopGL['ACCUM_BUFFER_BIT'] | context.COLOR_BUFFER_BIT)");
     39 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.clear(desktopGL['ACCUM_BUFFER_BIT'] | context.COLOR_BUFFER_BIT | context.DEPTH_BUFFER_BIT | context.STENCIL_BUFFER_BIT)");
     40 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.clear(context.COLOR_BUFFER_BIT | context.DEPTH_BUFFER_BIT | context.STENCIL_BUFFER_BIT)");
     41 
     42 debug("");
     43 debug("Test {copy}Tex{Sub}Image2D with negative offset/width/height");
     44 var tex = context.createTexture();
     45 var pixels = new Uint8Array(2 * 2 * 4);
     46 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.bindTexture(context.TEXTURE_2D, tex)");
     47 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.texImage2D(context.TEXTURE_2D, 0, context.RGBA, -16, -16, 0, context.RGBA, context.UNSIGNED_BYTE, null)");
     48 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.texImage2D(context.TEXTURE_2D, 0, context.RGBA, 16, 16, 0, context.RGBA, context.UNSIGNED_BYTE, null)");
     49 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.texSubImage2D(context.TEXTURE_2D, 0, -1, -1, 2, 2, context.RGBA, context.UNSIGNED_BYTE, pixels)");
     50 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.texSubImage2D(context.TEXTURE_2D, 0, 0, 0, -1, -1, context.RGBA, context.UNSIGNED_BYTE, pixels)");
     51 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.texSubImage2D(context.TEXTURE_2D, 0, 0, 0, 2, 2, context.RGBA, context.UNSIGNED_BYTE, pixels)");
     52 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.copyTexImage2D(context.TEXTURE_2D, 0, context.RGBA, 0, 0, -1, -1, 0)");
     53 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.copyTexImage2D(context.TEXTURE_2D, 0, context.RGBA, 0, 0, 16, 16, 0)");
     54 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.copyTexSubImage2D(context.TEXTURE_2D, 0, -1, -1, 0, 0, 2, 2)");
     55 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.copyTexSubImage2D(context.TEXTURE_2D, 0, 0, 0, 0, 0, -1, -1)");
     56 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.copyTexSubImage2D(context.TEXTURE_2D, 0, 0, 0, 0, 0, 2, 2)");
     57 
     58 debug("");
     59 debug("Test renderbufferStorage() with negative width/height");
     60 var renderbuffer = context.createRenderbuffer();
     61 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.bindRenderbuffer(context.RENDERBUFFER, renderbuffer)");
     62 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.renderbufferStorage(context.RENDERBUFFER, context.RGBA4, -2, -2)");
     63 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.renderbufferStorage(context.RENDERBUFFER, context.RGBA4, 16, 16)");
     64 
     65 debug("");
     66 debug("Test scissor() with negative width/height");
     67 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.scissor(0, 0, -2, -2)");
     68 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.scissor(0, 0, 16, 16)");
     69 
     70 debug("");
     71 debug("Test viewport() with negative width/height");
     72 wtu.shouldGenerateGLError(context, context.INVALID_VALUE, "context.viewport(0, 0, -2, -2)");
     73 wtu.shouldGenerateGLError(context, context.NO_ERROR, "context.viewport(0, 0, 16, 16)");
     74 
     75 debug("");
     76 debug("Set up a program to test invalid characters");
     77 var invalidSet = ['"', '$', '`', '@', '\\', "'"];
     78 var validUniformName = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890";
     79 var validAttribName = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
     80 function generateShaderSource(opt_invalidIdentifierChar, opt_invalidCommentChar) {
     81  var invalidIdentifierString = "";
     82  var invalidCommentString = "";
     83  if (opt_invalidIdentifierChar != undefined) {
     84    invalidIdentifierString += opt_invalidIdentifierChar;
     85  }
     86  if (opt_invalidCommentChar != undefined) {
     87    invalidCommentString += opt_invalidCommentChar;
     88  }
     89  return "uniform float " + validUniformName + invalidIdentifierString + ";\n"
     90                          + "varying float " + validAttribName + ";\n"
     91                          + "void main() {\n"
     92                          + validAttribName  + " = " + validUniformName + ";\n"
     93                          + "gl_Position = vec4(0.0, 0.0, 0.0, 1.0); }\n"
     94                          + "//.+-/*%<>[](){}^|&~=!:;,?# " + invalidCommentString;
     95 }
     96 var vShader = context.createShader(context.VERTEX_SHADER);
     97 context.shaderSource(vShader, generateShaderSource());
     98 context.compileShader(vShader);
     99 shouldBe("context.getError()", "context.NO_ERROR");
    100 var fShader = context.createShader(context.FRAGMENT_SHADER);
    101 context.shaderSource(fShader, "precision mediump float;\n"
    102                              + "varying float " + validAttribName + ";\n"
    103                              + "void main() {\n"
    104                              + "gl_FragColor = vec4(" + validAttribName + ", 0.0, 0.0, 1.0); }");
    105 context.compileShader(fShader);
    106 shouldBe("context.getError()", "context.NO_ERROR");
    107 var program = context.createProgram();
    108 context.attachShader(program, vShader);
    109 context.attachShader(program, fShader);
    110 context.linkProgram(program);
    111 var linkStatus = context.getProgramParameter(program, context.LINK_STATUS);
    112 shouldBeTrue("linkStatus");
    113 if (!linkStatus)
    114  debug(context.getProgramInfoLog(program));
    115 shouldBe("context.getError()", "context.NO_ERROR");
    116 context.bindAttribLocation(program, 1, validAttribName);
    117 shouldBe("context.getError()", "context.NO_ERROR");
    118 context.getAttribLocation(program, validAttribName);
    119 shouldBe("context.getError()", "context.NO_ERROR");
    120 context.getUniformLocation(program, validUniformName);
    121 shouldBe("context.getError()", "context.NO_ERROR");
    122 
    123 debug("");
    124 debug("Test shaderSource() with invalid characters");
    125 for (var i = 0; i < invalidSet.length; ++i) {
    126  // Backslash as line-continuation is allowed in WebGL 2.0.
    127  if (contextVersion > 1 && invalidSet[i] == '\\')
    128    continue;
    129  // With recent specification changes from
    130  // https://github.com/KhronosGroup/WebGL/pull/3206 , shaderSource no
    131  // longer generates INVALID_VALUE.
    132  var validShaderSource = generateShaderSource(undefined, invalidSet[i]);
    133  context.shaderSource(vShader, validShaderSource);
    134  shouldBe("context.getError()", "context.NO_ERROR");
    135  var invalidShaderSource = generateShaderSource(invalidSet[i], undefined);
    136  context.shaderSource(vShader, invalidShaderSource);
    137  shouldBe("context.getError()", "context.NO_ERROR");
    138 }
    139 
    140 debug("");
    141 debug("Test bindAttribLocation() with invalid characters");
    142 for (var i = 0; i < invalidSet.length; ++i) {
    143  var invalidName = validAttribName + invalidSet[i];
    144  context.bindAttribLocation(program, 1, invalidName);
    145  shouldBe("context.getError()", "context.INVALID_VALUE");
    146 }
    147 
    148 debug("");
    149 debug("Test getAttribLocation() with invalid characters");
    150 for (var i = 0; i < invalidSet.length; ++i) {
    151  var invalidName = validAttribName + invalidSet[i];
    152  context.getAttribLocation(program, invalidName);
    153  shouldBe("context.getError()", "context.INVALID_VALUE");
    154 }
    155 
    156 debug("");
    157 debug("Test getUniformLocation() with invalid characters");
    158 for (var i = 0; i < invalidSet.length; ++i) {
    159  var invalidName = validUniformName + invalidSet[i];
    160  context.getUniformLocation(program, invalidName);
    161  shouldBe("context.getError()", "context.INVALID_VALUE");
    162 }
    163 
    164 debug("")
    165 var successfullyParsed = true;
    166 </script>
    167 
    168 <script src="../../js/js-test-post.js"></script>
    169 </body>
    170 </html>