@@ -5829,10 +5829,20 @@ EmulationCommand = (
58295829 emulation.SetLocaleOverride //
58305830 emulation.SetScreenOrientationOverride //
58315831 emulation.SetScriptingEnabled //
5832- emulation.SetTimezoneOverride
5832+ emulation.SetTimezoneOverride //
5833+ emulation.SetUserAgentOverride
58335834)
58345835</pre>
58355836
5837+ A [=BiDi session=] has an <dfn for=session>emulated user agent</dfn> which is a
5838+ [=struct=] with an [=struct/item=] named
5839+ <dfn for="emulated user agent">default user agent</dfn> , which is a string or null,
5840+ an [=struct/item=] named
5841+ <dfn for="emulated user agent">user context user agent</dfn> , which is a weak map
5842+ between [=user contexts=] and string, and an [=struct/item=] named
5843+ <dfn for="emulated user agent">navigable user agent</dfn> , which is a weak map
5844+ between [=navigables=] and string.
5845+
58365846A [=remote end=] has a <dfn>forced colors mode theme overrides map</dfn> which is a weak map
58375847between [=user contexts=] and string or null.
58385848
@@ -6279,6 +6289,120 @@ The [=remote end steps=] with |command parameters| are:
62796289
62806290</div>
62816291
6292+ #### The emulation.setUserAgentOverride Command #### {#command-emulation-setUserAgentOverride}
6293+
6294+ The <dfn export for=commands>emulation.setUserAgentOverride</dfn> command modifies
6295+ User-Agent on the given top-level traversables or user contexts.
6296+
6297+ <dl>
6298+ <dt> Command Type</dt>
6299+ <dd>
6300+ <pre class="cddl" data-cddl-module="remote-cddl">
6301+ emulation.SetUserAgentOverride = (
6302+ method: "emulation.setUserAgentOverride",
6303+ params: emulation.SetUserAgentOverrideParameters
6304+ )
6305+
6306+ emulation.SetUserAgentOverrideParameters = {
6307+ userAgent: text / null,
6308+ ? contexts: [+browsingContext.BrowsingContext] ,
6309+ ? userContexts: [+browser.UserContext] ,
6310+ }
6311+ </pre>
6312+ </dd>
6313+ <dt> Result Type</dt>
6314+ <dd>
6315+ <code>
6316+ EmptyResult
6317+ </code>
6318+ </dd>
6319+ </dl>
6320+
6321+ <div algorithm>
6322+ The <dfn export>WebDriver BiDi emulated User-Agent</dfn> steps given
6323+ [=environment settings object=] |environment settings| are:
6324+
6325+ 1. Let |related navigables| be the result of [=get related navigables=] with
6326+ |environment settings|.
6327+
6328+ 1. For each |navigable| or |related navigables|:
6329+
6330+ 1. Let |top-level navigable| be |navigable|'s [=navigable/top-level traversable=] .
6331+
6332+ 1. Let |user context| be |top-level navigable|'s [=associated user context=] .
6333+
6334+ 1. For each |session| in [=active BiDi sessions=] :
6335+
6336+ 1. If |session|'s [=emulated user agent=]' s [=navigable user agent=] contains
6337+ |top-level navigable|, return |session|'s [=emulated user agent=]' s
6338+ [=navigable user agent=] [|top-level navigable|] .
6339+
6340+ 1. For each |session| in [=active BiDi sessions=] :
6341+
6342+ 1. If |session|'s [=emulated user agent=]' s [=user context user agent=]
6343+ contains |user context|, return |session|'s [=emulated user agent=]' s
6344+ [=user context user agent=] [|user context|] .
6345+
6346+ 1. For each |session| in [=active BiDi sessions=] :
6347+
6348+ 1. Let |default emulated user agent| be |session|'s [=emulated user agent=]' s
6349+ [=default user agent=] .
6350+
6351+ 1. If |default emulated user agent| is not null, return
6352+ |default emulated user agent|.
6353+
6354+ 1. Return null.
6355+
6356+ </div>
6357+
6358+ <div algorithm="remote end steps for emulation.setUserAgentOverride">
6359+
6360+ The [=remote end steps=] given |session| and |command parameters| are:
6361+
6362+ 1. If |command parameters| [=map/contains=] "<code> userContexts</code> "
6363+ and |command parameters| [=map/contains=] "<code> contexts</code> ",
6364+ return [=error=] with [=error code=] [=invalid argument=] .
6365+
6366+ 1. Let |emulated user agent| be |command parameters|["<code>userAgent</code>"] .
6367+
6368+ 1. If |command parameters| [=map/contains=] "<code> contexts</code> ":
6369+
6370+ 1. Let |navigables| be the result of [=trying=] to
6371+ [=get valid top-level traversables by ids=] with
6372+ |command parameters|["<code>contexts</code>"] .
6373+
6374+ 1. For each |navigable| of |navigables|:
6375+
6376+ 1. If |emulated user agent| is null, [=map/remove=] |navigable| from
6377+ |session|'s [=emulated user agent=]' s [=navigable user agent=] .
6378+
6379+ 1. Otherwise, [=map/set=] |session|'s [=emulated user agent=]' s
6380+ [=navigable user agent=] [|navigable|] to |emulated user agent|.
6381+
6382+ 1. Return [=success=] with data null.
6383+
6384+ 1. If |command parameters| [=map/contains=] "<code> userContexts</code> ":
6385+
6386+ 1. Let |user contexts| be the result of [=trying=] to [=get valid user contexts=]
6387+ with |command parameters|["<code>userContexts</code>"] .
6388+
6389+ 1. For each |user context| of |user contexts|:
6390+
6391+ 1. If |emulated user agent| is null, [=map/remove=] |user context| from
6392+ |session|'s [=emulated user agent=]' s [=user context user agent=] .
6393+
6394+ 1. Otherwise, [=map/set=] |session|'s [=emulated user agent=]' s
6395+ [=user context user agent=] [|user context|] to |emulated user agent|.
6396+
6397+ 1. Return [=success=] with data null.
6398+
6399+ 1. [=map/Set=] |session|'s [=emulated user agent=]' s [=default user agent=] to
6400+ |emulated user agent|.
6401+
6402+ 1. Return [=success=] with data null.
6403+
6404+ </div>
6405+
62826406#### The emulation.setScriptingEnabled Command #### {#command-emulation-setScriptingEnabled}
62836407
62846408The <dfn export for=commands>emulation.setScriptingEnabled</dfn> command emulates
0 commit comments