diff --git a/testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html b/testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html
index b5c27a8647eb6..00e031b92d8c6 100644
--- a/testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html
+++ b/testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html
@@ -39,25 +39,6 @@
>
<
script
-src
-=
-"
-/
-webrtc
-/
-dictionary
--
-helper
-.
-js
-"
->
-<
-/
-script
->
-<
-script
>
test
(
@@ -74,6 +55,25 @@
navigator
)
;
+assert_true
+(
+"
+NavigatorUAData
+"
+in
+window
+)
+;
+assert_equals
+(
+typeof
+self
+.
+NavigatorUAData
+"
+function
+"
+)
}
"
navigator
diff --git a/testing/web-platform/tests/workers/WorkerNavigator_userAgentData.http.html b/testing/web-platform/tests/workers/WorkerNavigator_userAgentData.http.html
new file mode 100644
index 0000000000000..fd9efed98bda3
--- /dev/null
+++ b/testing/web-platform/tests/workers/WorkerNavigator_userAgentData.http.html
@@ -0,0 +1,152 @@
+<
+!
+DOCTYPE
+html
+>
+<
+title
+>
+WorkerNavigator
+.
+userAgentData
+<
+/
+title
+>
+<
+script
+src
+=
+"
+/
+resources
+/
+testharness
+.
+js
+"
+>
+<
+/
+script
+>
+<
+script
+src
+=
+"
+/
+resources
+/
+testharnessreport
+.
+js
+"
+>
+<
+/
+script
+>
+<
+script
+>
+promise_test
+(
+async
+(
+)
+=
+>
+{
+const
+e
+=
+await
+new
+Promise
+(
+(
+resolve
+reject
+)
+=
+>
+{
+const
+worker
+=
+new
+Worker
+(
+"
+.
+/
+support
+/
+WorkerNavigator
+.
+js
+"
+)
+;
+worker
+.
+onmessage
+=
+resolve
+;
+}
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+uaList
+undefined
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+mobile
+undefined
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+getHighEntropyValues
+undefined
+)
+;
+}
+"
+Test
+that
+userAgentData
+is
+not
+available
+in
+workers
+in
+non
+-
+secure
+contexts
+"
+)
+;
+<
+/
+script
+>
diff --git a/testing/web-platform/tests/workers/WorkerNavigator_userAgentData.https.html b/testing/web-platform/tests/workers/WorkerNavigator_userAgentData.https.html
new file mode 100644
index 0000000000000..026aa39e7db15
--- /dev/null
+++ b/testing/web-platform/tests/workers/WorkerNavigator_userAgentData.https.html
@@ -0,0 +1,317 @@
+<
+!
+DOCTYPE
+html
+>
+<
+title
+>
+WorkerNavigator
+.
+userAgentData
+<
+/
+title
+>
+<
+script
+src
+=
+"
+/
+resources
+/
+testharness
+.
+js
+"
+>
+<
+/
+script
+>
+<
+script
+src
+=
+"
+/
+resources
+/
+testharnessreport
+.
+js
+"
+>
+<
+/
+script
+>
+<
+script
+>
+promise_test
+(
+async
+(
+)
+=
+>
+{
+const
+e
+=
+await
+new
+Promise
+(
+(
+resolve
+reject
+)
+=
+>
+{
+const
+worker
+=
+new
+Worker
+(
+"
+.
+/
+support
+/
+WorkerNavigator
+.
+js
+"
+)
+;
+worker
+.
+onmessage
+=
+resolve
+;
+}
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+uaList
+.
+length
+navigator
+.
+userAgentData
+.
+uaList
+.
+length
+)
+;
+for
+(
+let
+i
+=
+0
+;
+i
+<
+e
+.
+data
+.
+uaList
+.
+length
+;
++
++
+i
+)
+{
+const
+workerUA
+=
+e
+.
+data
+.
+uaList
+[
+i
+]
+;
+const
+windowUA
+=
+navigator
+.
+userAgentData
+.
+uaList
+[
+i
+]
+;
+assert_equals
+(
+workerUA
+.
+brand
+windowUA
+.
+brand
+)
+;
+assert_equals
+(
+workerUA
+.
+version
+windowUA
+.
+version
+)
+;
+}
+assert_equals
+(
+e
+.
+data
+.
+mobile
+navigator
+.
+userAgentData
+.
+mobile
+)
+;
+const
+highEntropyValues
+=
+await
+navigator
+.
+userAgentData
+.
+getHighEntropyValues
+(
+[
+"
+platform
+"
+"
+platformVersion
+"
+"
+architecture
+"
+"
+model
+"
+"
+uaFullVersion
+"
+]
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+model
+highEntropyValues
+.
+model
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+platform
+highEntropyValues
+.
+platform
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+platformVersion
+highEntropyValues
+.
+platformVersion
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+architecture
+highEntropyValues
+.
+architecture
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+uaFullVersion
+highEntropyValues
+.
+uaFullVersion
+)
+;
+assert_equals
+(
+e
+.
+data
+.
+NavigatorUADataExposed
+true
+)
+;
+}
+"
+Test
+that
+userAgentData
+is
+available
+in
+workers
+in
+secure
+contexts
+"
+)
+;
+<
+/
+script
+>
diff --git a/testing/web-platform/tests/workers/support/WorkerNavigator.js b/testing/web-platform/tests/workers/support/WorkerNavigator.js
index b682bfa8d572b..7b3ce017bc26b 100644
--- a/testing/web-platform/tests/workers/support/WorkerNavigator.js
+++ b/testing/web-platform/tests/workers/support/WorkerNavigator.js
@@ -1,4 +1,11 @@
-var
+(
+async
+(
+)
+=
+>
+{
+const
obj
=
new
@@ -46,8 +53,126 @@ navigator
.
onLine
;
+if
+(
+navigator
+.
+userAgentData
+)
+{
+obj
+.
+uaList
+=
+navigator
+.
+userAgentData
+.
+uaList
+;
+obj
+.
+mobile
+=
+navigator
+.
+userAgentData
+.
+mobile
+;
+const
+highEntropyValues
+=
+await
+navigator
+.
+userAgentData
+.
+getHighEntropyValues
+(
+[
+"
+platform
+"
+"
+platformVersion
+"
+"
+architecture
+"
+"
+model
+"
+"
+uaFullVersion
+"
+]
+)
+;
+obj
+.
+platform
+=
+highEntropyValues
+.
+platform
+;
+obj
+.
+platformVersion
+=
+highEntropyValues
+.
+platformVersion
+;
+obj
+.
+architecture
+=
+highEntropyValues
+.
+architecture
+;
+obj
+.
+model
+=
+highEntropyValues
+.
+model
+;
+obj
+.
+uaFullVersion
+=
+highEntropyValues
+.
+uaFullVersion
+;
+obj
+.
+NavigatorUADataExposed
+=
+(
+typeof
+self
+.
+NavigatorUAData
+!
+=
+"
+undefined
+"
+)
+;
+}
postMessage
(
obj
)
;
+}
+)
+(
+)
+;