| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script src="resources/recording-utilities.js"></script> |
| <script> |
| let context = null; |
| |
| let canvas = document.createElement("canvas"); |
| canvas.width = 2; |
| canvas.height = 2; |
| |
| // 2x2 red square |
| let image = document.createElement("img"); |
| image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII="; |
| |
| let linearGradient = null; |
| |
| let radialGradient = null; |
| |
| let conicGradient = null; |
| |
| let pattern = null; |
| |
| let path2D = new Path2D("M 1 2"); |
| |
| let imageData = new ImageData(1, 2); |
| |
| let imageBitmap = null; |
| |
| async function load() { |
| context = canvas.getContext("2d"); |
| |
| linearGradient = context.createLinearGradient(1, 2, 3, 4); |
| linearGradient.addColorStop(1, "red"); |
| |
| radialGradient = context.createRadialGradient(1, 2, 3, 4, 5, 6); |
| linearGradient.addColorStop(1, "blue"); |
| |
| conicGradient = context.createConicGradient(1, 2, 3); |
| conicGradient.addColorStop(1, "green"); |
| |
| pattern = context.createPattern(image, "no-repeat"); |
| |
| imageBitmap = await createImageBitmap(image); |
| |
| cancelActions(); |
| |
| context.strokeStyle = "red"; |
| context.save(); |
| context.strokeStyle = "blue"; |
| context.save(); |
| context.strokeStyle = "green"; |
| |
| runTest(); |
| } |
| |
| function ignoreException(func){ |
| try { |
| func(); |
| } catch (e) { } |
| } |
| |
| let requestAnimationFrameId = NaN; |
| |
| function cancelActions() { |
| cancelAnimationFrame(requestAnimationFrameId); |
| requestAnimationFrameId = NaN; |
| |
| context.resetTransform(); |
| context.beginPath(); |
| context.clearRect(0, 0, context.canvas.width, context.canvas.height); |
| } |
| |
| function performActions() { |
| let frames = [ |
| () => { |
| context.fillStyle; |
| context.fillStyle = "test"; |
| context.fillStyle = linearGradient; |
| context.fillStyle = radialGradient; |
| context.fillStyle = conicGradient; |
| context.fillStyle = pattern; |
| }, |
| () => { |
| context.beginPath(); |
| }, |
| () => { |
| ignoreException(() => context.moveTo(1, 2)); |
| }, |
| () => { |
| ignoreException(() => context.drawImage(image, 11, 12)); |
| }, |
| () => { |
| ignoreException(() => context.createImageData(imageData)); |
| }, |
| () => { |
| ignoreException(() => context.drawImage(imageBitmap, 11, 12)); |
| }, |
| () => { |
| ignoreException(() => context.setTransform(new DOMMatrix([1, 2, 3, 4, 5, 6]))); |
| }, |
| () => { |
| context.drawFocusIfNeeded(path2D, document.body); |
| }, |
| () => { |
| TestPage.dispatchEventToFrontend("LastFrame"); |
| }, |
| ]; |
| let index = 0; |
| function executeFrameFunction() { |
| frames[index++](); |
| if (index < frames.length) |
| requestAnimationFrameId = requestAnimationFrame(executeFrameFunction); |
| }; |
| executeFrameFunction(); |
| } |
| |
| function test() { |
| let suite = InspectorTest.createAsyncSuite("Recording.prototype.toHTML"); |
| |
| suite.addTestCase({ |
| name: "Recording.prototype.toHTML.2D", |
| test(resolve, reject) { |
| startRecording(WI.Canvas.ContextType.Canvas2D, resolve, reject, { |
| callback(recording) { |
| let promise = new WI.WrappedPromise; |
| |
| let listener = recording.addEventListener(WI.Recording.Event.ProcessedAction, (event) => { |
| if (!recording.ready) |
| return; |
| |
| let html = recording.toHTML(); |
| html = html.replace(/"data:image\/png;base64,[^"]+"/g, "<filtered>"); |
| |
| InspectorTest.log("++++++++++ HTML ++++++++++"); |
| InspectorTest.log(html); |
| InspectorTest.log("++++++++++ HTML ++++++++++"); |
| |
| recording.removeEventListener(WI.Recording.Event.ProcessedAction, listener); |
| promise.resolve(); |
| }); |
| |
| recording.startProcessing(); |
| |
| return promise.promise; |
| }, |
| }); |
| }, |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="load()"> |
| <p>Tests for Recording.prototype.toHTML.</p> |
| </body> |
| </html> |