[Canvas new API] Add textRendering to Canvas new API

Add new attribute textRendering to canvas context 2d. Developers can
now choose between auto, optimizeSpeed, optimizeLegibility and
geometricPrecision for textRendering.

Bug: 1144620

Change-Id: I2420967849b1080b667cf6803a8edecc06327297
diff --git a/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.textRendering.settings.html b/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.textRendering.settings.html
new file mode 100644
index 0000000..f0b5ff4
--- /dev/null
+++ b/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.textRendering.settings.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.text.drawing.style.textRendering.settings</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.text.drawing.style.textRendering.settings</h1>
+<p class="desc">Testing basic functionalities of textRendering in Canvas</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("Testing basic functionalities of textRendering in Canvas");
+_addTest(function(canvas, ctx) {
+
+// Setting textRendering with lower cases
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "auto";
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "optimizespeed";
+_assertSame(ctx.textRendering, "OptimizeSpeed", "ctx.textRendering", "\"OptimizeSpeed\"");
+
+ctx.textRendering = "optimizelegibility";
+_assertSame(ctx.textRendering, "OptimizeLegibility", "ctx.textRendering", "\"OptimizeLegibility\"");
+
+ctx.textRendering = "geometricprecision";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+
+// Setting textRendering with lower cases and upper cases word.
+ctx.textRendering = "aUto";
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "OPtimizeSpeed";
+_assertSame(ctx.textRendering, "OptimizeSpeed", "ctx.textRendering", "\"OptimizeSpeed\"");
+
+ctx.textRendering = "OPtimizELEgibility";
+_assertSame(ctx.textRendering, "OptimizeLegibility", "ctx.textRendering", "\"OptimizeLegibility\"");
+
+ctx.textRendering = "GeometricPrecision";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+
+// Setting textRendering with non-existing font variant.
+ctx.textRendering = "abcd";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+
+
+});
+</script>
+
diff --git a/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.html b/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.html
new file mode 100644
index 0000000..8b74452
--- /dev/null
+++ b/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.text.drawing.style.textRendering.settings</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.text.drawing.style.textRendering.settings</h1>
+<p class="desc">Testing basic functionalities of textRendering in Canvas</p>
+
+
+<script>
+var t = async_test("Testing basic functionalities of textRendering in Canvas");
+var t_pass = t.done.bind(t);
+var t_fail = t.step_func(function(reason) {
+    throw reason;
+});
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Setting textRendering with lower cases
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "auto";
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "optimizespeed";
+_assertSame(ctx.textRendering, "OptimizeSpeed", "ctx.textRendering", "\"OptimizeSpeed\"");
+
+ctx.textRendering = "optimizelegibility";
+_assertSame(ctx.textRendering, "OptimizeLegibility", "ctx.textRendering", "\"OptimizeLegibility\"");
+
+ctx.textRendering = "geometricprecision";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+
+// Setting textRendering with lower cases and upper cases word.
+ctx.textRendering = "aUto";
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "OPtimizeSpeed";
+_assertSame(ctx.textRendering, "OptimizeSpeed", "ctx.textRendering", "\"OptimizeSpeed\"");
+
+ctx.textRendering = "OPtimizELEgibility";
+_assertSame(ctx.textRendering, "OptimizeLegibility", "ctx.textRendering", "\"OptimizeLegibility\"");
+
+ctx.textRendering = "GeometricPrecision";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+
+// Setting textRendering with non-existing font variant.
+ctx.textRendering = "abcd";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+t.done();
+
+});
+</script>
diff --git a/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.worker.js b/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.worker.js
new file mode 100644
index 0000000..059edbe
--- /dev/null
+++ b/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.worker.js
@@ -0,0 +1,53 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.text.drawing.style.textRendering.settings
+// Description:Testing basic functionalities of textRendering in Canvas
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Testing basic functionalities of textRendering in Canvas");
+var t_pass = t.done.bind(t);
+var t_fail = t.step_func(function(reason) {
+    throw reason;
+});
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Setting textRendering with lower cases
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "auto";
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "optimizespeed";
+_assertSame(ctx.textRendering, "OptimizeSpeed", "ctx.textRendering", "\"OptimizeSpeed\"");
+
+ctx.textRendering = "optimizelegibility";
+_assertSame(ctx.textRendering, "OptimizeLegibility", "ctx.textRendering", "\"OptimizeLegibility\"");
+
+ctx.textRendering = "geometricprecision";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+
+// Setting textRendering with lower cases and upper cases word.
+ctx.textRendering = "aUto";
+_assertSame(ctx.textRendering, "Auto", "ctx.textRendering", "\"Auto\"");
+
+ctx.textRendering = "OPtimizeSpeed";
+_assertSame(ctx.textRendering, "OptimizeSpeed", "ctx.textRendering", "\"OptimizeSpeed\"");
+
+ctx.textRendering = "OPtimizELEgibility";
+_assertSame(ctx.textRendering, "OptimizeLegibility", "ctx.textRendering", "\"OptimizeLegibility\"");
+
+ctx.textRendering = "GeometricPrecision";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+
+// Setting textRendering with non-existing font variant.
+ctx.textRendering = "abcd";
+_assertSame(ctx.textRendering, "GeometricPrecision", "ctx.textRendering", "\"GeometricPrecision\"");
+t.done();
+
+});
+done();
diff --git a/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml b/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml
index 0f8a118..0d7bbfd 100644
--- a/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml
+++ b/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml
@@ -897,4 +897,41 @@
     ctx.fontVariantCaps = "abcd";
     @assert ctx.fontVariantCaps === "TitlingCaps";
 
+- name: 2d.text.drawing.style.textRendering.settings
+  desc: Testing basic functionalities of textRendering in Canvas
+  testing:
+  - 2d.text.drawing.style.textRendering
+  code: |
+    // Setting textRendering with lower cases
+    @assert ctx.textRendering === "Auto";
+
+    ctx.textRendering = "auto";
+    @assert ctx.textRendering === "Auto";
+
+    ctx.textRendering = "optimizespeed";
+    @assert ctx.textRendering === "OptimizeSpeed";
+
+    ctx.textRendering = "optimizelegibility";
+    @assert ctx.textRendering === "OptimizeLegibility";
+
+    ctx.textRendering = "geometricprecision";
+    @assert ctx.textRendering === "GeometricPrecision";
+
+    // Setting textRendering with lower cases and upper cases word.
+    ctx.textRendering = "aUto";
+    @assert ctx.textRendering === "Auto";
+
+    ctx.textRendering = "OPtimizeSpeed";
+    @assert ctx.textRendering === "OptimizeSpeed";
+
+    ctx.textRendering = "OPtimizELEgibility";
+    @assert ctx.textRendering === "OptimizeLegibility";
+
+    ctx.textRendering = "GeometricPrecision";
+    @assert ctx.textRendering === "GeometricPrecision";
+
+    // Setting textRendering with non-existing font variant.
+    ctx.textRendering = "abcd";
+    @assert ctx.textRendering === "GeometricPrecision";
+
 # TODO: shadows, alpha, composite, clip
\ No newline at end of file
diff --git a/html/canvas/tools/yaml/offscreen/text.yaml b/html/canvas/tools/yaml/offscreen/text.yaml
index 9a895bc..30a0ad1 100644
--- a/html/canvas/tools/yaml/offscreen/text.yaml
+++ b/html/canvas/tools/yaml/offscreen/text.yaml
@@ -1399,4 +1399,42 @@
     @assert ctx.fontVariantCaps === "TitlingCaps";
     t.done();
 
+- name: 2d.text.drawing.style.textRendering.settings
+  desc: Testing basic functionalities of textRendering in Canvas
+  testing:
+  - 2d.text.drawing.style.textRendering
+  code: |
+    // Setting textRendering with lower cases
+    @assert ctx.textRendering === "Auto";
+
+    ctx.textRendering = "auto";
+    @assert ctx.textRendering === "Auto";
+
+    ctx.textRendering = "optimizespeed";
+    @assert ctx.textRendering === "OptimizeSpeed";
+
+    ctx.textRendering = "optimizelegibility";
+    @assert ctx.textRendering === "OptimizeLegibility";
+
+    ctx.textRendering = "geometricprecision";
+    @assert ctx.textRendering === "GeometricPrecision";
+
+    // Setting textRendering with lower cases and upper cases word.
+    ctx.textRendering = "aUto";
+    @assert ctx.textRendering === "Auto";
+
+    ctx.textRendering = "OPtimizeSpeed";
+    @assert ctx.textRendering === "OptimizeSpeed";
+
+    ctx.textRendering = "OPtimizELEgibility";
+    @assert ctx.textRendering === "OptimizeLegibility";
+
+    ctx.textRendering = "GeometricPrecision";
+    @assert ctx.textRendering === "GeometricPrecision";
+
+    // Setting textRendering with non-existing font variant.
+    ctx.textRendering = "abcd";
+    @assert ctx.textRendering === "GeometricPrecision";
+    t.done();
+
 # TODO: shadows, alpha, composite, clip
\ No newline at end of file