| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| (async function(testRunner) { |
| const {page, session, dp} = |
| await testRunner.startBlank('Tests basic screencast functionality.'); |
| |
| let seenGreen = 0; |
| let seenBlue = 0; |
| |
| function setBkgrColor(bkgrColor) { |
| session.evaluate(`document.body.style.backgroundColor = "${bkgrColor}"`); |
| } |
| |
| async function loadPngAndCountPixelColor(pngBase64) { |
| const image = new Image(); |
| |
| await new Promise(resolve => { |
| image.onload = resolve; |
| image.src = `data:image/png;base64,${pngBase64}`; |
| }); |
| |
| const canvas = document.createElement('canvas'); |
| canvas.width = image.naturalWidth; |
| canvas.height = image.naturalHeight; |
| const ctx = canvas.getContext('2d'); |
| ctx.drawImage(image, 0, 0); |
| const rgba = ctx.getImageData(0, 0, 1, 1).data; |
| |
| if (rgba[0] === 0 && rgba[3] === 255) { |
| if (rgba[1] === 255 && rgba[2] === 0) { |
| ++seenGreen; |
| setBkgrColor('#0000ff'); |
| } else if (rgba[1] === 0 && rgba[2] === 255) { |
| ++seenBlue; |
| setBkgrColor('#00ff00'); |
| } |
| } else { |
| setBkgrColor('#00ff00'); |
| } |
| } |
| |
| await dp.Page.enable(); |
| |
| dp.Page.onScreencastFrame(async (data) => { |
| const pngBase64 = data.params.data; |
| await loadPngAndCountPixelColor(pngBase64); |
| if (seenGreen > 2 && seenBlue > 2) { |
| await dp.Page.stopScreencast(); |
| testRunner.log(`Seen both green and blue page backgrounds.`); |
| testRunner.completeTest(); |
| } |
| |
| const sessionId = data.params.sessionId; |
| await dp.Page.screencastFrameAck({sessionId}); |
| }); |
| |
| dp.Page.bringToFront(); |
| |
| dp.Page.startScreencast({format: 'png'}); |
| }); |