summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fenced-frame/fledge-container-size.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/fenced-frame/fledge-container-size.https.html')
-rw-r--r--testing/web-platform/tests/fenced-frame/fledge-container-size.https.html102
1 files changed, 102 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fenced-frame/fledge-container-size.https.html b/testing/web-platform/tests/fenced-frame/fledge-container-size.https.html
new file mode 100644
index 0000000000..5347c841d5
--- /dev/null
+++ b/testing/web-platform/tests/fenced-frame/fledge-container-size.https.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<title>Test container size in FLEDGE fenced frames.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script src="resources/utils.js"></script>
+
+<body>
+<script>
+async function checkSyntaxError(requested_width, requested_height) {
+ try {
+ const frame = await attachFencedFrameContext({
+ generator_api: "fledge", resolve_to_config: true, ad_with_size: true,
+ requested_size: [requested_width, requested_height]});
+ } catch(e) {
+ assert_equals(e.name, 'TypeError');
+ return;
+ }
+ assert_unreached('Missing expected type error');
+}
+
+async function checkSuccess() {
+ const assert_outer_dimensions =
+ (frame, label, expected_width, expected_height) => {
+ assert_equals(frame.element.width, expected_width,
+ label + ' outer attribute width');
+ assert_equals(frame.element.height, expected_height,
+ label + ' outer attribute height');
+ assert_equals(getComputedStyle(frame.element).width, expected_width,
+ label + ' outer computed width');
+ assert_equals(getComputedStyle(frame.element).height, expected_height,
+ label + ' outer computed height');
+ }
+
+ const assert_inner_dimensions =
+ (label, expected_width, expected_height) => {
+ assert_equals(getComputedStyle(document.documentElement).width, expected_width+'px',
+ label + ' inner computed width');
+ assert_equals(window.innerWidth, expected_width,
+ label + ' inner width');
+ assert_equals(window.innerHeight, expected_height,
+ label + ' inner height');
+ }
+
+ // `ad_with_size` is hardcoded to use '100px' by '50px'.
+ const content_width = 100;
+ const content_height = 50;
+
+ // Create a FLEDGE FF with a constant content size and given container size.
+ const requested_width_1 = '299px';
+ const requested_height_1 = '72px';
+ const frame = await attachFencedFrameContext({
+ generator_api: 'fledge', resolve_to_config: true, ad_with_size: true,
+ requested_size: [requested_width_1, requested_height_1]});
+
+ // The outer size should reflect the container size, and the inner size should reflect the content size.
+ await frame.execute(assert_inner_dimensions, ['First config', content_width, content_height]);
+ assert_outer_dimensions(frame, 'First config', requested_width_1, requested_height_1);
+
+ // Modify the container size manually.
+ const modified_width = '121px';
+ const modified_height = '444px';
+ frame.element.width = modified_width;
+ frame.element.height = modified_height;
+
+ // The outer size should reflect the new size, and the inner size should be unchanged.
+ await frame.execute(assert_inner_dimensions, ['Modified container size', content_width, content_height]);
+ assert_outer_dimensions(frame, 'Modified container size', modified_width, modified_height);
+
+ // Navigate to a new FLEDGE FF config with a different container size.
+ const requested_width_2 = '321px';
+ const requested_height_2 = '49px';
+ const replaced_frame = await replaceFrameContext(frame, {
+ generator_api: 'fledge', resolve_to_config: true, ad_with_size: true,
+ requested_size: [requested_width_2, requested_height_2]});
+
+ // The outer size should reflect the new size, and the inner size should be unchanged.
+ await replaced_frame.execute(assert_inner_dimensions, ['Second config', content_width, content_height]);
+ assert_outer_dimensions(replaced_frame, 'Second config', requested_width_2, requested_height_2);
+
+ // Navigate to a new FLEDGE FF config with no container size.
+ const replaced_frame_2 = await replaceFrameContext(frame, {
+ generator_api: 'fledge', resolve_to_config: true, ad_with_size: true});
+
+ // The dimensions should be unchanged.
+ await replaced_frame_2.execute(assert_inner_dimensions, ['Third config', content_width, content_height]);
+ assert_outer_dimensions(replaced_frame_2, 'Third config', requested_width_2, requested_height_2);
+}
+
+// Type error cases.
+promise_test(async () => { return checkSyntaxError('-299px', '72px'); }, '-299px x 72px');
+promise_test(async () => { return checkSyntaxError('299px', '-72px'); }, '299px x -72px');
+promise_test(async () => { return checkSyntaxError('0px', '0px'); }, '0px x 0px');
+promise_test(async () => { return checkSyntaxError('299px', '72ab'); }, '299px x 72ab');
+promise_test(async () => { return checkSyntaxError('299bc', '72px'); }, '299bc x 72px');
+
+// Success cases.
+promise_test(async () => { return checkSuccess(); }, 'FLEDGE successful container size');
+
+</script>
+</body>