From 2b94769b41f85a9e3ab9deb0d7d93c8d9536ba17 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Tue, 11 Nov 2025 10:56:52 +0100 Subject: [PATCH 01/10] Add "emulation.setScreenAreaOverride" command. --- index.bs | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/index.bs b/index.bs index 7d37d2e8..8db6bb56 100644 --- a/index.bs +++ b/index.bs @@ -285,6 +285,7 @@ spec: CSSOM-VIEW; urlPrefix: https://drafts.csswg.org/cssom-view/ text: visual viewport page left; url: #dom-visualviewport-pageleft text: visual viewport page top; url: #dom-visualviewport-pagetop text: visual viewport; url: #visual-viewport + text: web-exposed available screen area; url: #web-exposed-available-screen-area text: web-exposed screen area; url: #web-exposed-screen-area spec: DOM; urlPrefix: https://dom.spec.whatwg.org/ type: dfn @@ -3210,6 +3211,15 @@ A [=remote end=] has a viewport overrides map which is a weak map bet A [=remote end=] has a locale overrides map which is a weak map between [=navigables=] or [=user contexts=] and string. +A screen area is a [=struct=] with an [=struct/item=] named +height which is an integer, +a [=struct/item=] named width which is an integer, +a [=struct/item=] named x which is an integer, +a [=struct/item=] named y which is an integer. + +A [=remote end=] has a screen area overrides map which is a weak map between +[=navigables=] or [=user contexts=] and [=screen area=]. + A [=remote end=] has a timezone overrides map which is a weak map between [=navigables=] or [=user contexts=] and string. @@ -6445,6 +6455,116 @@ The [=remote end steps=] with |command parameters| and |session| are: +#### The emulation.setScreenAreaOverride Command #### {#command-emulation-setScreenAreaOverride} + +The emulation.setScreenAreaOverride command +emulates [=web-exposed screen area=] and [=web-exposed available screen area=] of the given top-level traversables or user contexts. + +
+
Command Type
+
+
+      emulation.SetScreenAreaOverride = (
+        method: "emulation.setScreenAreaOverride",
+        params: emulation.SetScreenAreaOverrideParameters
+      )
+
+      emulation.ScreenArea = {
+        width: js-uint,
+        height: js-uint
+      }
+
+      emulation.SetScreenAreaOverrideParameters = {
+        screenArea: emulation.ScreenArea / null,
+        ? contexts: [+browsingContext.BrowsingContext],
+        ? userContexts: [+browser.UserContext],
+      }
+    
+
+
Return Type
+
+
+      emulation.SetScreenAreaOverrideResult = EmptyResult
+      
+
+
+ +
+ +The WebDriver BiDi emulated screen area steps given a given [=/navigable=] |navigable|: + +1. Let |top-level traversable| be |navigable|’s [=navigable/top-level traversable=]. + +1. Let |user context| be |top-level traversable|'s [=associated user context=]. + +1. If [=screen area overrides map=] [=map/contains=] |top-level traversable|, return + [=screen area overrides map=][|top-level traversable|]. + +1. If [=screen area overrides map=] [=map/contains=] |user context|, return + [=screen area overrides map=][|user context|]. + +1. Return null + +
+ +
+ +The [=remote end steps=] with |command parameters| are: + +1. If |command parameters| [=map/contains=] "userContexts" + and |command parameters| [=map/contains=] "contexts", + return [=error=] with [=error code=] [=invalid argument=]. + +1. If |command parameters| doesn't [=map/contain=] "userContexts" + and |command parameters| doesn't [=map/contain=] "contexts", + return [=error=] with [=error code=] [=invalid argument=]. + +1. Let |emulated screen area| be |command parameters|["screenArea"]. + +1. If |emulated screen area| is not null: + + 1. [=map/Set=] |emulated screen area|["x"] to 0. + + 1. [=map/Set=] |emulated screen area|["y"] to 0. + +1. Let |navigables| be a [=/set=]. + +1. If the contexts field of |command parameters| is present: + + 1. Let |navigables| be the result of [=trying=] to + [=get valid top-level traversables by ids=] with + |command parameters|["contexts"]. + +1. Otherwise: + + 1. Assert the userContexts field of |command parameters| is present. + + 1. Let |user contexts| be the result of [=trying=] to [=get valid user contexts=] + with |command parameters|["userContexts"]. + + 1. For each |user context| of |user contexts|: + + 1. If |emulated screen area| is null, [=map/remove=] |user context| from + [=screen area overrides map=]. + + 1. Otherwise, [=map/set=] [=screen area overrides map=][|user context|] to |emulated screen area|. + + 1. [=list/For each=] |top-level traversable| of the list of all + [=/top-level traversables=] whose [=associated user context=] is + |user context|: + + 1. [=list/Append=] |top-level traversable| to |navigables|. + +1. For each |navigable| of |navigables|: + + 1. If |emulated screen area| is null, [=map/remove=] |navigable| from [=screen area overrides map=]. + + 1. Otherwise, [=map/set=] [=screen area overrides map=][|navigable|] to |emulated screen area|. + +1. Return [=success=] with data null. + +
+ #### The emulation.setScreenOrientationOverride Command #### {#command-emulation-setScreenOrientationOverride} The emulation.setScreenOrientationOverride command From 96bbd3bef433c105372bddd5606d2d36490e9991 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Wed, 12 Nov 2025 14:57:21 +0100 Subject: [PATCH 02/10] Rename command to "emulation.setScreenSettingsOverride". --- index.bs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/index.bs b/index.bs index 8db6bb56..001f9bd8 100644 --- a/index.bs +++ b/index.bs @@ -6455,18 +6455,18 @@ The [=remote end steps=] with |command parameters| and |session| are: -#### The emulation.setScreenAreaOverride Command #### {#command-emulation-setScreenAreaOverride} +#### The emulation.setScreenSettingsOverride Command #### {#command-emulation-setScreenSettingsOverride} -The emulation.setScreenAreaOverride command +The emulation.setScreenSettingsOverride command emulates [=web-exposed screen area=] and [=web-exposed available screen area=] of the given top-level traversables or user contexts.
Command Type
-      emulation.SetScreenAreaOverride = (
-        method: "emulation.setScreenAreaOverride",
-        params: emulation.SetScreenAreaOverrideParameters
+      emulation.SetScreenSettingsOverride = (
+        method: "emulation.setScreenSettingsOverride",
+        params: emulation.SetScreenSettingsOverrideParameters
       )
 
       emulation.ScreenArea = {
@@ -6474,7 +6474,7 @@ emulates [=web-exposed screen area=] and [=web-exposed available screen area=] o
         height: js-uint
       }
 
-      emulation.SetScreenAreaOverrideParameters = {
+      emulation.SetScreenSettingsOverrideParameters = {
         screenArea: emulation.ScreenArea / null,
         ? contexts: [+browsingContext.BrowsingContext],
         ? userContexts: [+browser.UserContext],
@@ -6484,7 +6484,7 @@ emulates [=web-exposed screen area=] and [=web-exposed available screen area=] o
    
Return Type
-      emulation.SetScreenAreaOverrideResult = EmptyResult
+      emulation.SetScreenSettingsOverrideResult = EmptyResult
       
@@ -6507,7 +6507,7 @@ The WebDriver BiDi emulated screen area steps given a given [= -
+
The [=remote end steps=] with |command parameters| are: From 7ed43304bb9e2380790b1dc86d777775ec8f6d2c Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Fri, 14 Nov 2025 10:39:20 +0100 Subject: [PATCH 03/10] Update index.bs Co-authored-by: Maksim Sadym <69349599+sadym-chromium@users.noreply.github.com> --- index.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.bs b/index.bs index 001f9bd8..96f70a68 100644 --- a/index.bs +++ b/index.bs @@ -6491,7 +6491,7 @@ emulates [=web-exposed screen area=] and [=web-exposed available screen area=] o
-The WebDriver BiDi emulated screen area steps given a given [=/navigable=] |navigable|: +The WebDriver BiDi emulated screen area steps given [=/navigable=] |navigable|: 1. Let |top-level traversable| be |navigable|’s [=navigable/top-level traversable=]. From 032ef2852c5598c4fcb61f9abbb3cf7f2d669036 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Fri, 14 Nov 2025 10:45:42 +0100 Subject: [PATCH 04/10] Set an override per navigable earlier. --- index.bs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/index.bs b/index.bs index 96f70a68..0d2624e5 100644 --- a/index.bs +++ b/index.bs @@ -6535,6 +6535,16 @@ The [=remote end steps=] with |command parameters| are: [=get valid top-level traversables by ids=] with |command parameters|["contexts"]. + 1. For each |navigable| of |navigables|: + + 1. If |emulated screen area| is null, [=map/remove=] |navigable| + from [=screen area overrides map=]. + + 1. Otherwise, [=map/set=] [=screen area overrides map=][|navigable|] + to |emulated screen area|. + + 1. Return [=success=] with data null. + 1. Otherwise: 1. Assert the userContexts field of |command parameters| is present. @@ -6555,13 +6565,7 @@ The [=remote end steps=] with |command parameters| are: 1. [=list/Append=] |top-level traversable| to |navigables|. -1. For each |navigable| of |navigables|: - - 1. If |emulated screen area| is null, [=map/remove=] |navigable| from [=screen area overrides map=]. - - 1. Otherwise, [=map/set=] [=screen area overrides map=][|navigable|] to |emulated screen area|. - -1. Return [=success=] with data null. + 1. Return [=success=] with data null.
From 8916c06174519ec67abadf8adf62d7b12b3bee00 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Fri, 14 Nov 2025 11:05:00 +0100 Subject: [PATCH 05/10] Use struct for "screen settings overrides". --- index.bs | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/index.bs b/index.bs index 0d2624e5..b1d2fbe9 100644 --- a/index.bs +++ b/index.bs @@ -3211,14 +3211,17 @@ A [=remote end=] has a viewport overrides map which is a weak map bet A [=remote end=] has a locale overrides map which is a weak map between [=navigables=] or [=user contexts=] and string. -A screen area is a [=struct=] with an [=struct/item=] named -height which is an integer, -a [=struct/item=] named width which is an integer, -a [=struct/item=] named x which is an integer, -a [=struct/item=] named y which is an integer. - -A [=remote end=] has a screen area overrides map which is a weak map between -[=navigables=] or [=user contexts=] and [=screen area=]. +A screen settings is a [=struct=] with an [=struct/item=] named +height which is an integer, +a [=struct/item=] named width which is an integer, +a [=struct/item=] named x which is an integer, +a [=struct/item=] named y which is an integer. + +A [=remote end=] has a screen settings overrides which is [=struct=] +an [=struct/item=] nameduser context screen settings, +which is a weak map between [=user contexts=] and [=screen settings=], and a [=struct/item=] named +navigable screen settings, which is a weak map +between [=navigables=] and [=screen settings=]. A [=remote end=] has a timezone overrides map which is a weak map between [=navigables=] or [=user contexts=] and string. @@ -6497,11 +6500,11 @@ The WebDriver BiDi emulated screen area steps given [=/navigab 1. Let |user context| be |top-level traversable|'s [=associated user context=]. -1. If [=screen area overrides map=] [=map/contains=] |top-level traversable|, return - [=screen area overrides map=][|top-level traversable|]. +1. If [=screen settings overrides=] [=map/contains=] |top-level traversable|, return + [=screen settings overrides=][|top-level traversable|]. -1. If [=screen area overrides map=] [=map/contains=] |user context|, return - [=screen area overrides map=][|user context|]. +1. If [=screen settings overrides=] [=map/contains=] |user context|, return + [=screen settings overrides=][|user context|]. 1. Return null @@ -6535,12 +6538,14 @@ The [=remote end steps=] with |command parameters| are: [=get valid top-level traversables by ids=] with |command parameters|["contexts"]. + 1. Let |target| be [=screen settings overrides/navigable screen settings=]. + 1. For each |navigable| of |navigables|: 1. If |emulated screen area| is null, [=map/remove=] |navigable| - from [=screen area overrides map=]. + from |target|. - 1. Otherwise, [=map/set=] [=screen area overrides map=][|navigable|] + 1. Otherwise, [=map/set=] |target|[|navigable|] to |emulated screen area|. 1. Return [=success=] with data null. @@ -6552,12 +6557,14 @@ The [=remote end steps=] with |command parameters| are: 1. Let |user contexts| be the result of [=trying=] to [=get valid user contexts=] with |command parameters|["userContexts"]. + 1. Let |target| be [=screen settings overrides/user context screen settings=]. + 1. For each |user context| of |user contexts|: 1. If |emulated screen area| is null, [=map/remove=] |user context| from - [=screen area overrides map=]. + |target|. - 1. Otherwise, [=map/set=] [=screen area overrides map=][|user context|] to |emulated screen area|. + 1. Otherwise, [=map/set=] |target|[|user context|] to |emulated screen area|. 1. [=list/For each=] |top-level traversable| of the list of all [=/top-level traversables=] whose [=associated user context=] is From 6bdad1a8202de10be3319667b1afe61f5e739cc5 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Fri, 14 Nov 2025 11:25:15 +0100 Subject: [PATCH 06/10] Fix "navigable screen settings" definition. --- index.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.bs b/index.bs index b1d2fbe9..ed2a5bcf 100644 --- a/index.bs +++ b/index.bs @@ -3220,7 +3220,7 @@ a [=struct/item=] named y which is an A [=remote end=] has a screen settings overrides which is [=struct=] an [=struct/item=] nameduser context screen settings, which is a weak map between [=user contexts=] and [=screen settings=], and a [=struct/item=] named -navigable screen settings, which is a weak map +navigable screen settings, which is a weak map between [=navigables=] and [=screen settings=]. A [=remote end=] has a timezone overrides map which is a weak map between From b2f06788bcfb539430ba3ec365dd1c4e405a59b7 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Fri, 14 Nov 2025 12:08:29 +0100 Subject: [PATCH 07/10] Remove unneeded loop over navigables --- index.bs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/index.bs b/index.bs index ed2a5bcf..eaf6bd12 100644 --- a/index.bs +++ b/index.bs @@ -3218,7 +3218,7 @@ a [=struct/item=] named x which is an a [=struct/item=] named y which is an integer. A [=remote end=] has a screen settings overrides which is [=struct=] -an [=struct/item=] nameduser context screen settings, +an [=struct/item=] named user context screen settings, which is a weak map between [=user contexts=] and [=screen settings=], and a [=struct/item=] named navigable screen settings, which is a weak map between [=navigables=] and [=screen settings=]. @@ -6566,12 +6566,6 @@ The [=remote end steps=] with |command parameters| are: 1. Otherwise, [=map/set=] |target|[|user context|] to |emulated screen area|. - 1. [=list/For each=] |top-level traversable| of the list of all - [=/top-level traversables=] whose [=associated user context=] is - |user context|: - - 1. [=list/Append=] |top-level traversable| to |navigables|. - 1. Return [=success=] with data null.
From da3ea69bdb15276e7be911d33b55fd05ef35539f Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Fri, 14 Nov 2025 12:15:32 +0100 Subject: [PATCH 08/10] Use "an item" instead "a item" --- index.bs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/index.bs b/index.bs index eaf6bd12..f975605d 100644 --- a/index.bs +++ b/index.bs @@ -3213,15 +3213,15 @@ A [=remote end=] has a locale overrides map which is a weak map betwe A screen settings is a [=struct=] with an [=struct/item=] named height which is an integer, -a [=struct/item=] named width which is an integer, -a [=struct/item=] named x which is an integer, -a [=struct/item=] named y which is an integer. +an [=struct/item=] named width which is an integer, +an [=struct/item=] named x which is an integer, +an [=struct/item=] named y which is an integer. A [=remote end=] has a screen settings overrides which is [=struct=] an [=struct/item=] named user context screen settings, -which is a weak map between [=user contexts=] and [=screen settings=], and a [=struct/item=] named -navigable screen settings, which is a weak map -between [=navigables=] and [=screen settings=]. +which is a weak map between [=user contexts=] and [=screen settings=], +and an [=struct/item=] named navigable screen settings, +which is a weak map between [=navigables=] and [=screen settings=]. A [=remote end=] has a timezone overrides map which is a weak map between [=navigables=] or [=user contexts=] and string. From c355d98017aadcfb8141adeb5710ecdfc14ba55b Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Mon, 17 Nov 2025 17:30:17 +0100 Subject: [PATCH 09/10] Have separate hooks for available and total screen areas. --- index.bs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/index.bs b/index.bs index f975605d..7eaa0b0b 100644 --- a/index.bs +++ b/index.bs @@ -6494,7 +6494,25 @@ emulates [=web-exposed screen area=] and [=web-exposed available screen area=] o
-The WebDriver BiDi emulated screen area steps given [=/navigable=] |navigable|: +The WebDriver BiDi emulated available screen area steps given [=/navigable=] |navigable|: + +1. Let |top-level traversable| be |navigable|’s [=navigable/top-level traversable=]. + +1. Let |user context| be |top-level traversable|'s [=associated user context=]. + +1. If [=screen settings overrides=] [=map/contains=] |top-level traversable|, return + [=screen settings overrides=][|top-level traversable|]. + +1. If [=screen settings overrides=] [=map/contains=] |user context|, return + [=screen settings overrides=][|user context|]. + +1. Return null + +
+ +
+ +The WebDriver BiDi emulated total screen area steps given [=/navigable=] |navigable|: 1. Let |top-level traversable| be |navigable|’s [=navigable/top-level traversable=]. From f77e4824a1c2d6c0d668ae0b0d5f3cbd4fb7e8d5 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Thu, 20 Nov 2025 16:44:32 +0100 Subject: [PATCH 10/10] Update index.bs Co-authored-by: Julian Descottes --- index.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.bs b/index.bs index 7eaa0b0b..aeaa1c1f 100644 --- a/index.bs +++ b/index.bs @@ -3217,7 +3217,7 @@ an [=struct/item=] named width which an [=struct/item=] named x which is an integer, an [=struct/item=] named y which is an integer. -A [=remote end=] has a screen settings overrides which is [=struct=] +A [=remote end=] has a screen settings overrides which is a [=struct=] with an [=struct/item=] named user context screen settings, which is a weak map between [=user contexts=] and [=screen settings=], and an [=struct/item=] named navigable screen settings,