diff options
Diffstat (limited to 'tests/wpt/web-platform-tests/screen_enumeration/resources/screenenumeration-helpers.js')
-rw-r--r-- | tests/wpt/web-platform-tests/screen_enumeration/resources/screenenumeration-helpers.js | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/tests/wpt/web-platform-tests/screen_enumeration/resources/screenenumeration-helpers.js b/tests/wpt/web-platform-tests/screen_enumeration/resources/screenenumeration-helpers.js new file mode 100644 index 00000000000..d96fca74b5d --- /dev/null +++ b/tests/wpt/web-platform-tests/screen_enumeration/resources/screenenumeration-helpers.js @@ -0,0 +1,131 @@ +"use strict"; + +// In Chromium-based browsers this implementation is provided by a polyfill +// in order to reduce the amount of test-only code shipped to users. To enable +// these tests the browser must be run with these options: +// +// --enable-blink-features=MojoJS,MojoJSTest + +const loadChromiumResources = async () => { + if (!("MojoInterfaceInterceptor" in self)) { + // Do nothing on non-Chromium-based browsers or when the Mojo bindings are + // not present in the global namespace. + return; + } + + const resources = [ + "/gen/layout_test_data/mojo/public/js/mojo_bindings.js", + "/gen/ui/gfx/mojom/color_space.mojom.js", + "/gen/ui/gfx/mojom/buffer_types.mojom.js", + "/gen/ui/gfx/mojom/display_color_spaces.mojom.js", + "/gen/ui/gfx/geometry/mojom/geometry.mojom.js", + "/gen/ui/display/mojom/display.mojom.js", + "/gen/third_party/blink/public/mojom/screen_enumeration/screen_enumeration.mojom.js", + "/resources/testdriver.js", + "/resources/testdriver-vendor.js", + "/resources/chromium/mock-screenenumeration.js", + ]; + await Promise.all(resources.map(path => { + const script = document.createElement("script"); + script.src = path; + script.async = false; + const promise = new Promise((resolve, reject) => { + script.onload = resolve; + script.onerror = reject; + }); + document.head.appendChild(script); + return promise; + })); + +}; + +async function initialize_screen_enumeration_tests() { + if (typeof ScreenEnumerationTest === "undefined") + await loadChromiumResources(); + + assert_true(typeof ScreenEnumerationTest !== "undefined", + "Screen Enumeration testing interface is not available."); + let enumTest = new ScreenEnumerationTest(); + await enumTest.initialize(); + return enumTest; +} + +function screen_enumeration_test(func, name, properties) { + promise_test(async t => { + let enumTest = await initialize_screen_enumeration_tests(); + t.add_cleanup(enumTest.reset); + await func(t, enumTest.getMockScreenEnumeration()); + }, name, properties); +} + +// Construct a mock display with provided properties +function makeDisplay(id, bounds, work_area, scale_factor) { + let myColorSpace = fillColorSpaceVector(); + let myBufferFormat = fillBufferFormatVector(); + let newDisplay = new display.mojom.Display({id: id, + bounds: new gfx.mojom.Rect({x: bounds.x, y: bounds.y, + width: bounds.width, + height: bounds.height}), + sizeInPixels: new gfx.mojom.Size({width: bounds.width, + height: bounds.height}), + maximumCursorSize: new gfx.mojom.Size({width: 20, height: 20}), + workArea: new gfx.mojom.Rect({x: work_area.x, y: work_area.y, + width: work_area.width, + height: work_area.height}), + deviceScaleFactor: scale_factor, + rotation: display.mojom.Rotation.VALUE_0, + touchSupport: display.mojom.TouchSupport.UNAVAILABLE, + accelerometerSupport: display.mojom.AccelerometerSupport.UNAVAILABLE, + colorSpaces: new gfx.mojom.DisplayColorSpaces({colorSpaces: myColorSpace, + bufferFormats: myBufferFormat, + sdrWhiteLevel: 1.0}), + colorDepth: 10, + depthPerComponent: 10, + isMonochrome: true, + displayFrequency: 120}); + return newDisplay; +} + +// Function to construct color space vector. +// Values are purely random but mandatory. +function fillColorSpaceVector() { + let colorSpaceVector = []; + for (let i = 0; i < 6; i++) { + let colorSpace = new gfx.mojom.ColorSpace({ + primaries: gfx.mojom.ColorSpacePrimaryID.BT709, + transfer: gfx.mojom.ColorSpaceTransferID.BT709, + matrix: gfx.mojom.ColorSpaceMatrixID.BT709, + range: gfx.mojom.ColorSpaceRangeID.LIMITED, + customPrimaryMatrix: fillCustomPrimaryMatrix(), + transferParams: fillTransferParams()}); + colorSpaceVector.push(colorSpace); + } + return colorSpaceVector; +} + +function fillCustomPrimaryMatrix () { + let matrix = [1.1, 1.2, 1.3, + 2.1, 2.2, 2.3, + 3.1, 3.2, 3.3]; + return matrix; +} + +function fillTransferParams () { + let params = [1.1, 1.2, 1.3, + 2.1, 2.2, 2.3, + 3.1]; + return params; +} + +// Function to construct buffer format vector. +// Values are purely random but mandatory. +function fillBufferFormatVector() { + + let bufferFormat = [gfx.mojom.BufferFormat.RGBA_8888, + gfx.mojom.BufferFormat.RGBA_8888, + gfx.mojom.BufferFormat.RGBA_8888, + gfx.mojom.BufferFormat.RGBA_8888, + gfx.mojom.BufferFormat.RGBA_8888, + gfx.mojom.BufferFormat.RGBA_8888]; + return bufferFormat; +} |