Import Cobalt 19.master.0.203780

Includes the following patches:
  https://cobalt-review.googlesource.com/c/cobalt/+/5210
    by errong.leng@samsung.com
  https://cobalt-review.googlesource.com/c/cobalt/+/5270
    by linus.wang@samsung.com
diff --git a/src/third_party/web_platform_tests/webgl/bufferSubData.html b/src/third_party/web_platform_tests/webgl/bufferSubData.html
new file mode 100644
index 0000000..a97df90
--- /dev/null
+++ b/src/third_party/web_platform_tests/webgl/bufferSubData.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<title>bufferSubData</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=https://www.khronos.org/registry/webgl/specs/latest/#5.14.5>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=common.js></script>
+
+<div id=log></div>
+<script>
+test(function() {
+  var gl = getGl();
+  assert_equals(gl.getError(), WebGLRenderingContext.NO_ERROR);
+
+  var b = gl.createBuffer();
+  gl.bindBuffer(gl.ARRAY_BUFFER, b);
+
+  var a = new Float32Array(1);
+  gl.bufferData(gl.ARRAY_BUFFER, a, gl.STATIC_DRAW);
+
+  var nan = 0 / 0;
+  gl.bufferSubData(gl.ARRAY_BUFFER, nan, a);
+
+  assert_equals(gl.getError(), WebGLRenderingContext.NO_ERROR);
+});
+</script>
diff --git a/src/third_party/web_platform_tests/webgl/common.js b/src/third_party/web_platform_tests/webgl/common.js
new file mode 100644
index 0000000..416c21c
--- /dev/null
+++ b/src/third_party/web_platform_tests/webgl/common.js
@@ -0,0 +1,13 @@
+function getGl() {
+  var c = document.createElement("canvas");
+  var gl = c.getContext("experimental-webgl");
+  assert_true(!!gl, "Should be able to get a context.");
+  return gl;
+}
+
+function shouldGenerateGLError(cx, glError, fn) {
+  test(function() {
+    fn();
+    assert_equals(cx.getError(), glError);
+  }, "Calling " + fn + " should generate a " + glError + " error.");
+}
diff --git a/src/third_party/web_platform_tests/webgl/compressedTexImage2D.html b/src/third_party/web_platform_tests/webgl/compressedTexImage2D.html
new file mode 100644
index 0000000..b0a031a
--- /dev/null
+++ b/src/third_party/web_platform_tests/webgl/compressedTexImage2D.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<title>compressedTexImage2D</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=https://www.khronos.org/registry/webgl/specs/latest/#5.14.8>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=common.js></script>
+
+<div id=log></div>
+<script>
+test(function() {
+  var COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0;
+  var gl = getGl();
+
+  var tex = gl.createTexture();
+  gl.bindTexture(gl.TEXTURE_2D, tex);
+
+  shouldGenerateGLError(gl, gl.INVALID_ENUM, function() {
+    gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, new Uint8Array(8));
+  });
+  shouldGenerateGLError(gl, gl.INVALID_ENUM, function() {
+    gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, new Uint8Array(8), null);
+  });
+  test(function() {
+    assert_throws(new TypeError(), function() {
+      gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0);
+    });
+  }, "Should throw a TypeError when passing too few arguments.");
+});
+</script>
diff --git a/src/third_party/web_platform_tests/webgl/compressedTexSubImage2D.html b/src/third_party/web_platform_tests/webgl/compressedTexSubImage2D.html
new file mode 100644
index 0000000..539f9e1
--- /dev/null
+++ b/src/third_party/web_platform_tests/webgl/compressedTexSubImage2D.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<title>compressedTexSubImage2D</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=https://www.khronos.org/registry/webgl/specs/latest/#5.14.8>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=common.js></script>
+
+<div id=log></div>
+<script>
+test(function() {
+  var COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0;
+  var gl = getGl();
+
+  var tex = gl.createTexture();
+  gl.bindTexture(gl.TEXTURE_2D, tex);
+
+  shouldGenerateGLError(gl, gl.INVALID_ENUM, function() {
+    gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 10, 10, COMPRESSED_RGB_S3TC_DXT1_EXT, new Uint8Array(8));
+  });
+  shouldGenerateGLError(gl, gl.INVALID_ENUM, function() {
+    gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 10, 10, COMPRESSED_RGB_S3TC_DXT1_EXT, new Uint8Array(8), null);
+  });
+  test(function() {
+    assert_throws(new TypeError(), function() {
+      gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 10, 10, COMPRESSED_RGB_S3TC_DXT1_EXT);
+    });
+  }, "Should throw a TypeError when passing too few arguments.");
+});
+</script>
diff --git a/src/third_party/web_platform_tests/webgl/texImage2D.html b/src/third_party/web_platform_tests/webgl/texImage2D.html
new file mode 100644
index 0000000..2f76916
--- /dev/null
+++ b/src/third_party/web_platform_tests/webgl/texImage2D.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<title>texImage2D</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=https://www.khronos.org/registry/webgl/specs/latest/#5.14.8>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=common.js></script>
+
+<div id=log></div>
+<script>
+test(function() {
+  var gl = getGl();
+  assert_throws(new TypeError(), function() {
+    gl.texImage2D(0, 0, 0, 0, 0, window);
+  });
+  assert_throws(new TypeError(), function() {
+    gl.texImage2D(0, 0, 0, 0, 0, { get width() { throw 7 }, get height() { throw 7 }, data: new Uint8ClampedArray(10) });
+  });
+});
+</script>
diff --git a/src/third_party/web_platform_tests/webgl/texSubImage2D.html b/src/third_party/web_platform_tests/webgl/texSubImage2D.html
new file mode 100644
index 0000000..294b30c
--- /dev/null
+++ b/src/third_party/web_platform_tests/webgl/texSubImage2D.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<title>texSubImage2D</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=https://www.khronos.org/registry/webgl/specs/latest/#5.14.8>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=common.js></script>
+
+<div id=log></div>
+<script>
+test(function() {
+  var gl = getGl();
+  assert_throws(new TypeError(), function() {
+    gl.texSubImage2D(0, 0, 0, 0, 0, 0, window);
+  });
+  assert_throws(new TypeError(), function() {
+    gl.texSubImage2D(0, 0, 0, 0, 0, 0, { get width() { throw 7 }, get height() { throw 7 }, data: new Uint8ClampedArray(10) });
+  });
+});
+</script>
diff --git a/src/third_party/web_platform_tests/webgl/uniformMatrixNfv.html b/src/third_party/web_platform_tests/webgl/uniformMatrixNfv.html
new file mode 100644
index 0000000..f75cbcb
--- /dev/null
+++ b/src/third_party/web_platform_tests/webgl/uniformMatrixNfv.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<title>uniformMatrix*fv</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=https://www.khronos.org/registry/webgl/specs/latest/#WebGLRenderingContext>
+<link rel=help href=http://dev.w3.org/2006/webapi/WebIDL/#es-boolean>
+<link rel=help href=http://es5.github.com/#x9.2>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=common.js></script>
+
+<div id=log></div>
+<script id="vshader" type="x-shader/x-vertex">
+uniform mat2 m2;
+uniform mat3 m3;
+uniform mat4 m4;
+</script>
+<script>
+var floatArray = function(n) {
+  var a = [];
+  for (var i = 0; i < n; ++i) {
+    a.push(1);
+  }
+  return a;
+};
+[2, 3, 4].forEach(function(n) {
+  test(function() {
+    var gl = getGl();
+    var f = "uniformMatrix" + n + "fv";
+    var loc = gl.getUniformLocation(gl.createProgram(), "m" + n);
+    gl[f](loc, { valueOf: function() { throw "Error"; } }, floatArray(n));
+  }, "Should not throw for " + n);
+});
+</script>