Skip to content

Commit 97123b7

Browse files
[testdriver] test_driver.bidi.user_agent_client_hints.set_client_hints_override (#57689)
1 parent 5f15435 commit 97123b7

File tree

7 files changed

+144
-2
lines changed

7 files changed

+144
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[set_client_hints_override.https.html]
2+
expected:
3+
if product != "chrome": ERROR
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<title>TestDriver bidi.user_agent_client_hints.set_client_hints_override</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/resources/testdriver.js?feature=bidi"></script>
7+
<script src="/resources/testdriver-vendor.js"></script>
8+
<script>
9+
const MOCK_CLIENT_HINTS = {
10+
brands: [
11+
{
12+
brand: "TestBrand",
13+
version: "123"
14+
}
15+
],
16+
mobile: false,
17+
platform: "TestPlatform",
18+
architecture: "TestArch",
19+
bitness: "64",
20+
model: "TestModel",
21+
platformVersion: "TestVersion",
22+
wow64: false
23+
};
24+
25+
promise_test(async t => {
26+
await test_driver.bidi.user_agent_client_hints.set_client_hints_override({
27+
clientHints: MOCK_CLIENT_HINTS
28+
});
29+
30+
let clientHints = await navigator.userAgentData.getHighEntropyValues([
31+
"architecture",
32+
"bitness",
33+
"model",
34+
"platformVersion",
35+
"uaFullVersion",
36+
"wow64"
37+
]);
38+
39+
assert_equals(clientHints.architecture, MOCK_CLIENT_HINTS.architecture);
40+
assert_equals(clientHints.bitness, MOCK_CLIENT_HINTS.bitness);
41+
assert_equals(clientHints.model, MOCK_CLIENT_HINTS.model);
42+
assert_equals(clientHints.platformVersion, MOCK_CLIENT_HINTS.platformVersion);
43+
assert_equals(clientHints.wow64, MOCK_CLIENT_HINTS.wow64);
44+
assert_equals(navigator.userAgentData.platform, MOCK_CLIENT_HINTS.platform);
45+
assert_equals(navigator.userAgentData.mobile, MOCK_CLIENT_HINTS.mobile);
46+
47+
await test_driver.bidi.user_agent_client_hints.set_client_hints_override({
48+
clientHints: null
49+
});
50+
51+
}, "test_driver.bidi.user_agent_client_hints.set_client_hints_override");
52+
</script>

resources/testdriver.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -985,6 +985,31 @@
985985
params);
986986
},
987987
},
988+
/**
989+
* `user_agent_client_hints <https://wicg.github.io/ua-client-hints/#automation>`_ module.
990+
*/
991+
user_agent_client_hints: {
992+
/**
993+
* Overrides the user agent client hints configuration for the specified browsing
994+
* contexts. Matches the `userAgentClientHints.setClientHintsOverride
995+
* <https://wicg.github.io/ua-client-hints/#emulation-setclienthintsoverride>`_
996+
* WebDriver BiDi command.
997+
*
998+
* @param {object} params - Parameters for the command.
999+
* @param {null|object} params.clientHints - The client hints to override.
1000+
* Matches the `userAgentClientHints.ClientHints` type.
1001+
* If null or omitted, the override will be removed.
1002+
* @param {null|Array.<(Context)>} [params.contexts] The
1003+
* optional contexts parameter specifies which browsing contexts
1004+
* to set the override on.
1005+
* @returns {Promise<void>} Resolves when the override is successfully set.
1006+
*/
1007+
set_client_hints_override: function (params) {
1008+
assertBidiIsEnabled();
1009+
return window.test_driver_internal.bidi.user_agent_client_hints.set_client_hints_override(
1010+
params);
1011+
}
1012+
},
9881013
/**
9891014
* `log <https://www.w3.org/TR/webdriver-bidi/#module-log>`_ module.
9901015
*/
@@ -2426,6 +2451,12 @@
24262451
"bidi.emulation.set_touch_override is not implemented by testdriver-vendor.js");
24272452
}
24282453
},
2454+
user_agent_client_hints: {
2455+
set_client_hints_override: function (params) {
2456+
throw new Error(
2457+
"bidi.user_agent_client_hints.set_client_hints_override is not implemented by testdriver-vendor.js");
2458+
}
2459+
},
24292460
log: {
24302461
entry_added: {
24312462
async subscribe() {

tools/wptrunner/wptrunner/executors/asyncactions.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,24 @@ async def __call__(self, payload):
288288
return await self.protocol.bidi_events.subscribe(events, contexts)
289289

290290

291+
class BidiUserAgentClientHintsSetClientHintsOverrideAction:
292+
name = "bidi.user_agent_client_hints.set_client_hints_override"
293+
294+
def __init__(self, logger, protocol):
295+
do_delayed_imports()
296+
self.logger = logger
297+
self.protocol = protocol
298+
299+
async def __call__(self, payload):
300+
client_hints = payload.get("clientHints", None)
301+
302+
contexts = payload.get("contexts", None)
303+
if contexts is not None:
304+
contexts = [get_browsing_context_id(context) for context in contexts]
305+
return await self.protocol.bidi_user_agent_client_hints.set_client_hints_override(
306+
client_hints, contexts)
307+
308+
291309
class BidiSessionUnsubscribeAction:
292310
name = "bidi.session.unsubscribe"
293311

@@ -340,8 +358,8 @@ async def __call__(self, payload):
340358
BidiEmulationSetLocaleOverrideAction,
341359
BidiEmulationSetScreenOrientationOverrideAction,
342360
BidiEmulationSetTouchOverrideAction,
361+
BidiUserAgentClientHintsSetClientHintsOverrideAction,
343362
BidiPermissionsSetPermissionAction,
344363
BidiSessionSubscribeAction,
345364
BidiSessionUnsubscribeAction,
346-
BidiPermissionsSetPermissionAction,
347-
BidiSessionSubscribeAction]
365+
BidiPermissionsSetPermissionAction]

tools/wptrunner/wptrunner/executors/executorwebdriver.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
BidiBluetoothProtocolPart,
4141
BidiBrowsingContextProtocolPart,
4242
BidiEmulationProtocolPart,
43+
BidiUserAgentClientHintsProtocolPart,
4344
BidiEventsProtocolPart,
4445
BidiPermissionsProtocolPart,
4546
BidiScriptProtocolPart,
@@ -352,6 +353,19 @@ def add_event_listener(self, name, fn):
352353
return self.webdriver.bidi_session.add_event_listener(name=name, fn=fn)
353354

354355

356+
class WebDriverBidiUserAgentClientHintsProtocolPart(BidiUserAgentClientHintsProtocolPart):
357+
def __init__(self, parent):
358+
super().__init__(parent)
359+
self.webdriver = None
360+
361+
def setup(self):
362+
self.webdriver = self.parent.webdriver
363+
364+
async def set_client_hints_override(self, client_hints, contexts):
365+
return await self.webdriver.bidi_session.user_agent_client_hints.set_client_hints_override(
366+
client_hints=client_hints, contexts=contexts)
367+
368+
355369
class WebDriverBidiScriptProtocolPart(BidiScriptProtocolPart):
356370
def __init__(self, parent):
357371
super().__init__(parent)
@@ -1131,6 +1145,7 @@ class WebDriverBidiProtocol(WebDriverProtocol):
11311145
WebDriverBidiPermissionsProtocolPart,
11321146
WebDriverBidiScriptProtocolPart,
11331147
WebDriverBidiWebExtensionsProtocolPart,
1148+
WebDriverBidiUserAgentClientHintsProtocolPart,
11341149
*(part for part in WebDriverProtocol.implements)
11351150
]
11361151

tools/wptrunner/wptrunner/executors/protocol.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,20 @@ async def set_touch_override(self,
656656
pass
657657

658658

659+
class BidiUserAgentClientHintsProtocolPart(ProtocolPart):
660+
"""Protocol part for User Agent Client Hints"""
661+
__metaclass__ = ABCMeta
662+
name = "bidi_user_agent_client_hints"
663+
664+
@abstractmethod
665+
async def set_client_hints_override(
666+
self,
667+
client_hints: Optional[Mapping[str, Any]],
668+
contexts: Optional[List[str]],
669+
user_contexts: Optional[List[str]]) -> None:
670+
pass
671+
672+
659673
class BidiScriptProtocolPart(ProtocolPart):
660674
"""Protocol part for executing BiDi scripts"""
661675
__metaclass__ = ABCMeta

tools/wptrunner/wptrunner/testdriver-extra.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,15 @@
425425
});
426426
}
427427

428+
window.test_driver_internal.bidi.user_agent_client_hints = {
429+
set_client_hints_override: function(params) {
430+
return create_action("bidi.user_agent_client_hints.set_client_hints_override", {
431+
contexts: [window],
432+
...(params ?? {})
433+
});
434+
}
435+
};
436+
428437
window.test_driver_internal.bidi.emulation.set_locale_override = function (params) {
429438
return create_action("bidi.emulation.set_locale_override", {
430439
// Default to the current window.

0 commit comments

Comments
 (0)