diff --git a/DEPS b/DEPS
index 00222a7..443b9ea 100644
--- a/DEPS
+++ b/DEPS
@@ -304,7 +304,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '486deb23bc2a4d3d09c66fef52c2ad64d8b4f761',
+  'skia_revision': '01aeec883a43908dd2c004b99ae74166c7852f8f',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -331,7 +331,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
-  'fuchsia_version': 'version:11.20221231.1.1',
+  'fuchsia_version': 'version:11.20230101.3.1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
@@ -383,7 +383,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '4f73ee63549e6c41c7e35da7950292ef67533fbf',
+  'devtools_frontend_revision': '5f28aa7cb4c6d48f6bd1e886cc067cd0294245b2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -419,7 +419,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': 'cb8ce4332c5d6102b8b489186f342ae01d5054be',
+  'dawn_revision': 'fd5a6650e2df6124f3676200e7bc598c455a16bc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -776,7 +776,7 @@
 
   'src/clank': {
     'url': 'https://chrome-internal.googlesource.com/clank/internal/apps.git' + '@' +
-    '7e9cec773034c1d5e310a79f63a3a1eaa74d250f',
+    '6b9e10aa883577f5a2f551c9c5ddb7dc1d74a58e',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -875,7 +875,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'DJIx394QXJarVqzGE_--L_GBpEH16eBd7l13-lBH-AwC',
+          'version': 'L3u8rlq4ZH-UzXfkGw5n1poE-sZk_6-HWCmKtBgr31QC',
         },
       ],
       'dep_type': 'cipd',
@@ -886,7 +886,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'tR7YVxaPngdJa1gr7niAyz4x3dgYAefxit7FKuJMGY0C',
+          'version': 'RK6DwcQzwyKKDFrMm-h3taATZ_8DQaOGhO8sykrJbwYC',
         },
       ],
       'dep_type': 'cipd',
@@ -897,7 +897,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'hkPpNURCKLYTSJx0aMLyvxIi_fttaxq48_z2zbexmAIC',
+          'version': 'QnXbdiRyOax_67sG_aKKIxFrmKiXjeuhIEjHFSkbigsC',
         },
       ],
       'dep_type': 'cipd',
@@ -1128,7 +1128,7 @@
     Var('boringssl_git') + '/boringssl.git' + '@' +  Var('boringssl_revision'),
 
   'src/third_party/breakpad/breakpad':
-    Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '80430d73aee1fe591bea1475ba3b7fc30c67dfc2',
+    Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '79326ebe9446add03e76b4422ff8036e812224d2',
 
   'src/third_party/byte_buddy': {
       'packages': [
@@ -1216,7 +1216,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '5c10c1429a344f538788740191eb641494d05467',
+      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + 'a5107464084c3eb4f23c2bb9f926487d34594502',
     'condition': 'checkout_src_internal',
   },
 
@@ -1830,7 +1830,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '030f44dcf868629f3b5776bd69207d342873ed3d',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '727080cbacd58a2f303ed8a03f0264fe1493e47a',
+    Var('webrtc_git') + '/src.git' + '@' + '7dd36d8e7b469445cf49c7b4c04a129e7f8fc024',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -1930,7 +1930,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'V41yABU6t_pHyRxZoPBgrHaKjL473Tx3BQ6Xtpq0f60C',
+        'version': 'gBgSCX8KqgzwHn-Of-z83DWbjiXM_pdNUysRO9bsSyYC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1941,7 +1941,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'OhmFXljzLY3219Q4VOUweIT0NqIl9FAZSMMH1_255vgC',
+        'version': 'qSpMzLYUPj4NfPW1TcC6QLVvr4WzVEJnbmkp6SbLZNEC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1952,7 +1952,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'kj9PkX2gTKeq2HVGTxByabxg0DUdQ6ikbqCGB8rLDtgC',
+        'version': 'XrvId1sFbQqG1JGflkqhJjamlCSwytU9Z0lfZYNincEC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/public/cpp/OWNERS b/ash/public/cpp/OWNERS
index 73a541cc..8a4ea66 100644
--- a/ash/public/cpp/OWNERS
+++ b/ash/public/cpp/OWNERS
@@ -1,5 +1,6 @@
 per-file *accelerator*=file://ash/accelerators/OWNERS
 per-file cast_config_controller*=file://chrome/browser/media/router/OWNERS
+per-file *clipboard*=file://ash/clipboard/OWNERS
 per-file *desk*template*=file://ash/wm/desks/templates/OWNERS
 per-file *login*=file://ash/login/OWNERS
 per-file *shelf*=file://ash/shelf/OWNERS
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index d4ff946..f9495f0 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-11.20221231.1.1
+11.20230102.0.1
diff --git a/chrome/VERSION b/chrome/VERSION
index 6852d57c..c722e94 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=111
 MINOR=0
-BUILD=5511
+BUILD=5515
 PATCH=0
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 386d56e..9bb3491 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2040,6 +2040,7 @@
     "//chrome/browser/ui/webui/usb_internals:mojo_bindings",
     "//chrome/browser/updates/announcement_notification",
     "//chrome/browser/video_tutorials",
+    "//chrome/browser/web_applications/mojom:mojom_web_apps_enum",
     "//chrome/browser/web_share_target",
     "//chrome/common:channel_info",
     "//chrome/common:version_header",
@@ -5158,7 +5159,6 @@
       "//chrome/browser/ash/system_extensions/api/window_management",
       "//chrome/browser/ash/system_web_apps",
       "//chrome/browser/ash/video_conference",
-      "//chrome/browser/chromeos",
       "//chrome/browser/enterprise/connectors/device_trust/attestation/ash",
       "//chrome/browser/nearby_sharing:share_target",
       "//chrome/browser/nearby_sharing/certificates",
@@ -5290,6 +5290,8 @@
       "//device/vr/public/mojom:isolated_xr_service",
       "//remoting/host/chromeos:features",
       "//ui/chromeos",
+      "//ui/chromeos/resources",
+      "//ui/chromeos/strings",
       "//ui/events/ozone",
       "//ui/ozone",
       "//ui/wm/public",
@@ -5297,7 +5299,6 @@
     allow_circular_includes_from += [
       "//chrome/browser/ash",
       "//chrome/browser/ash/crosapi",
-      "//chrome/browser/chromeos",
       "//chrome/browser/ash/system_web_apps",
       "//chrome/browser/ui/ash/system_web_apps",
     ]
@@ -5381,101 +5382,6 @@
       "apps/digital_goods/digital_goods_lacros.h",
       "chrome_browser_main_parts_lacros.cc",
       "chrome_browser_main_parts_lacros.h",
-      "chromeos/app_mode/app_session.cc",
-      "chromeos/app_mode/app_session.h",
-      "chromeos/app_mode/app_session_browser_window_handler.cc",
-      "chromeos/app_mode/app_session_browser_window_handler.h",
-      "chromeos/app_mode/app_session_metrics_service.cc",
-      "chromeos/app_mode/app_session_metrics_service.h",
-      "chromeos/app_mode/app_session_policies.cc",
-      "chromeos/app_mode/app_session_policies.h",
-      "chromeos/app_mode/chrome_kiosk_app_installer.cc",
-      "chromeos/app_mode/chrome_kiosk_app_installer.h",
-      "chromeos/app_mode/chrome_kiosk_app_launcher.cc",
-      "chromeos/app_mode/chrome_kiosk_app_launcher.h",
-      "chromeos/app_mode/chrome_kiosk_external_loader_broker.cc",
-      "chromeos/app_mode/chrome_kiosk_external_loader_broker.h",
-      "chromeos/app_mode/kiosk_app_external_loader.cc",
-      "chromeos/app_mode/kiosk_app_external_loader.h",
-      "chromeos/app_mode/kiosk_app_service_launcher.cc",
-      "chromeos/app_mode/kiosk_app_service_launcher.h",
-      "chromeos/app_mode/kiosk_settings_navigation_throttle.cc",
-      "chromeos/app_mode/kiosk_settings_navigation_throttle.h",
-      "chromeos/app_mode/startup_app_launcher_update_checker.cc",
-      "chromeos/app_mode/startup_app_launcher_update_checker.h",
-      "chromeos/extensions/desk_api/desk_api_extension_manager.cc",
-      "chromeos/extensions/desk_api/desk_api_extension_manager.h",
-      "chromeos/extensions/device_local_account_external_policy_loader.cc",
-      "chromeos/extensions/device_local_account_external_policy_loader.h",
-      "chromeos/extensions/echo_private/echo_private_api.cc",
-      "chromeos/extensions/echo_private/echo_private_api.h",
-      "chromeos/extensions/file_system_provider/file_system_provider_api.cc",
-      "chromeos/extensions/file_system_provider/file_system_provider_api.h",
-      "chromeos/extensions/file_system_provider/provider_function.cc",
-      "chromeos/extensions/file_system_provider/provider_function.h",
-      "chromeos/extensions/file_system_provider/service_worker_lifetime_manager.cc",
-      "chromeos/extensions/file_system_provider/service_worker_lifetime_manager.h",
-      "chromeos/extensions/info_private_api.cc",
-      "chromeos/extensions/info_private_api.h",
-      "chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros.cc",
-      "chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros.h",
-      "chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.cc",
-      "chromeos/extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.h",
-      "chromeos/extensions/wallpaper_api.cc",
-      "chromeos/extensions/wallpaper_api.h",
-      "chromeos/policy/dlp/clipboard_bubble.cc",
-      "chromeos/policy/dlp/clipboard_bubble.h",
-      "chromeos/policy/dlp/data_transfer_dlp_controller.cc",
-      "chromeos/policy/dlp/data_transfer_dlp_controller.h",
-      "chromeos/policy/dlp/dlp_browser_helper_lacros.cc",
-      "chromeos/policy/dlp/dlp_browser_helper_lacros.h",
-      "chromeos/policy/dlp/dlp_clipboard_bubble_constants.h",
-      "chromeos/policy/dlp/dlp_clipboard_notifier.cc",
-      "chromeos/policy/dlp/dlp_clipboard_notifier.h",
-      "chromeos/policy/dlp/dlp_confidential_contents.cc",
-      "chromeos/policy/dlp/dlp_confidential_contents.h",
-      "chromeos/policy/dlp/dlp_confidential_file.cc",
-      "chromeos/policy/dlp/dlp_confidential_file.h",
-      "chromeos/policy/dlp/dlp_content_manager.cc",
-      "chromeos/policy/dlp/dlp_content_manager.h",
-      "chromeos/policy/dlp/dlp_content_manager_lacros.cc",
-      "chromeos/policy/dlp/dlp_content_manager_lacros.h",
-      "chromeos/policy/dlp/dlp_content_observer.cc",
-      "chromeos/policy/dlp/dlp_content_observer.h",
-      "chromeos/policy/dlp/dlp_content_restriction_set.cc",
-      "chromeos/policy/dlp/dlp_content_restriction_set.h",
-      "chromeos/policy/dlp/dlp_content_tab_helper.cc",
-      "chromeos/policy/dlp/dlp_content_tab_helper.h",
-      "chromeos/policy/dlp/dlp_copy_or_move_hook_delegate.cc",
-      "chromeos/policy/dlp/dlp_copy_or_move_hook_delegate.h",
-      "chromeos/policy/dlp/dlp_data_transfer_notifier.cc",
-      "chromeos/policy/dlp/dlp_data_transfer_notifier.h",
-      "chromeos/policy/dlp/dlp_drag_drop_notifier.cc",
-      "chromeos/policy/dlp/dlp_drag_drop_notifier.h",
-      "chromeos/policy/dlp/dlp_file_access_copy_or_move_delegate_factory.cc",
-      "chromeos/policy/dlp/dlp_file_access_copy_or_move_delegate_factory.h",
-      "chromeos/policy/dlp/dlp_histogram_helper.cc",
-      "chromeos/policy/dlp/dlp_histogram_helper.h",
-      "chromeos/policy/dlp/dlp_notification_helper.cc",
-      "chromeos/policy/dlp/dlp_notification_helper.h",
-      "chromeos/policy/dlp/dlp_policy_constants.h",
-      "chromeos/policy/dlp/dlp_reporting_manager.cc",
-      "chromeos/policy/dlp/dlp_reporting_manager.h",
-      "chromeos/policy/dlp/dlp_rules_manager.h",
-      "chromeos/policy/dlp/dlp_rules_manager_factory.cc",
-      "chromeos/policy/dlp/dlp_rules_manager_factory.h",
-      "chromeos/policy/dlp/dlp_rules_manager_impl.cc",
-      "chromeos/policy/dlp/dlp_rules_manager_impl.h",
-      "chromeos/policy/dlp/dlp_scoped_file_access_delegate.cc",
-      "chromeos/policy/dlp/dlp_scoped_file_access_delegate.h",
-      "chromeos/policy/dlp/dlp_warn_dialog.cc",
-      "chromeos/policy/dlp/dlp_warn_dialog.h",
-      "chromeos/policy/dlp/dlp_warn_notifier.cc",
-      "chromeos/policy/dlp/dlp_warn_notifier.h",
-      "chromeos/reporting/device_reporting_settings_lacros.cc",
-      "chromeos/reporting/device_reporting_settings_lacros.h",
-      "chromeos/reporting/metric_reporting_manager_lacros.cc",
-      "chromeos/reporting/metric_reporting_manager_lacros.h",
       "feedback/show_feedback_page_lacros.cc",
       "lacros/account_manager/account_cache.cc",
       "lacros/account_manager/account_cache.h",
@@ -5647,7 +5553,6 @@
       "ui/lacros/window_utility.h",
     ]
     deps += [
-      ":dlp_policy_event_proto",
       "//chrome/browser/chromeos/extensions/vpn_provider",
       "//chrome/browser/chromeos/extensions/wm",
       "//chrome/browser/chromeos/launcher_search:search_util",
@@ -5672,14 +5577,6 @@
       "//ui/strings:ui_strings_grit",
     ]
 
-    if (enable_plugins) {
-      sources += [
-        "chromeos/app_mode/kiosk_session_plugin_handler.cc",
-        "chromeos/app_mode/kiosk_session_plugin_handler.h",
-        "chromeos/app_mode/kiosk_session_plugin_handler_delegate.h",
-      ]
-    }
-
     # component builds are not compatible on device.
     assert(!is_chromeos_device || !is_component_build)
   } else {
@@ -5736,54 +5633,6 @@
       "certificate_provider/sign_requests.h",
       "certificate_provider/thread_safe_certificate_map.cc",
       "certificate_provider/thread_safe_certificate_map.h",
-      "chromeos/arc/arc_external_protocol_dialog.cc",
-      "chromeos/arc/arc_external_protocol_dialog.h",
-      "chromeos/arc/arc_web_contents_data.cc",
-      "chromeos/arc/arc_web_contents_data.h",
-      "chromeos/arc/open_with_menu.cc",
-      "chromeos/arc/open_with_menu.h",
-      "chromeos/arc/start_smart_selection_action_menu.cc",
-      "chromeos/arc/start_smart_selection_action_menu.h",
-      "chromeos/extensions/contact_center_insights/contact_center_insights_extension_manager.cc",
-      "chromeos/extensions/contact_center_insights/contact_center_insights_extension_manager.h",
-      "chromeos/extensions/login_screen/login/cleanup/browser_cleanup_handler.cc",
-      "chromeos/extensions/login_screen/login/cleanup/browser_cleanup_handler.h",
-      "chromeos/extensions/login_screen/login/cleanup/cleanup_handler.h",
-      "chromeos/extensions/login_screen/login/cleanup/cleanup_manager.cc",
-      "chromeos/extensions/login_screen/login/cleanup/cleanup_manager.h",
-      "chromeos/extensions/login_screen/login/cleanup/extension_cleanup_handler.cc",
-      "chromeos/extensions/login_screen/login/cleanup/extension_cleanup_handler.h",
-      "chromeos/extensions/login_screen/login/external_logout_request/external_logout_request_event_handler.cc",
-      "chromeos/extensions/login_screen/login/external_logout_request/external_logout_request_event_handler.h",
-      "chromeos/extensions/login_screen/login/external_logout_request/external_logout_request_event_handler_factory.cc",
-      "chromeos/extensions/login_screen/login/external_logout_request/external_logout_request_event_handler_factory.h",
-      "chromeos/extensions/login_screen/login/login_api.cc",
-      "chromeos/extensions/login_screen/login/login_api.h",
-      "chromeos/extensions/login_screen/login/login_api_prefs.cc",
-      "chromeos/extensions/login_screen/login/login_api_prefs.h",
-      "chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_api.cc",
-      "chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_api.h",
-      "chromeos/extensions/login_screen/login_state/login_state_api.cc",
-      "chromeos/extensions/login_screen/login_state/login_state_api.h",
-      "chromeos/extensions/login_screen/login_state/session_state_changed_event_dispatcher.cc",
-      "chromeos/extensions/login_screen/login_state/session_state_changed_event_dispatcher.h",
-      "chromeos/reporting/metric_default_utils.cc",
-      "chromeos/reporting/metric_default_utils.h",
-      "chromeos/reporting/metric_reporting_manager_delegate_base.cc",
-      "chromeos/reporting/metric_reporting_manager_delegate_base.h",
-      "chromeos/reporting/network/network_bandwidth_sampler.cc",
-      "chromeos/reporting/network/network_bandwidth_sampler.h",
-      "chromeos/tablet_mode/chrome_content_browser_client_tablet_mode_part.cc",
-      "chromeos/tablet_mode/chrome_content_browser_client_tablet_mode_part.h",
-      "chromeos/tablet_mode/tablet_mode_page_behavior.cc",
-      "chromeos/tablet_mode/tablet_mode_page_behavior.h",
-      "chromeos/video_conference/video_conference_app_permissions.h",
-      "chromeos/video_conference/video_conference_manager_client.cc",
-      "chromeos/video_conference/video_conference_manager_client.h",
-      "chromeos/video_conference/video_conference_media_listener.cc",
-      "chromeos/video_conference/video_conference_media_listener.h",
-      "chromeos/video_conference/video_conference_web_app.cc",
-      "chromeos/video_conference/video_conference_web_app.h",
       "download/notification/download_item_notification.cc",
       "download/notification/download_item_notification.h",
       "download/notification/download_notification_manager.cc",
@@ -5826,6 +5675,7 @@
     ]
     deps += [
       "//ash/webui/projector_app/public/cpp",
+      "//chrome/browser/chromeos",
       "//chrome/browser/chromeos/extensions/telemetry",
 
       # This is a dependency only to allow `allow_circular_includes_from` to
@@ -5868,6 +5718,7 @@
     ]
 
     allow_circular_includes_from += [
+      "//chrome/browser/chromeos",
       "//chrome/browser/policy:onc",
 
       # TODO(b/262484731): Remove this when app service has its own target.
@@ -7830,25 +7681,6 @@
     deps += [ "//chrome/browser/lens/region_search" ]
   }
 
-  if (use_cups) {
-    if (is_chromeos) {
-      sources += [
-        "chromeos/printing/cups_wrapper.cc",
-        "chromeos/printing/cups_wrapper.h",
-        "chromeos/printing/cups_wrapper_impl.cc",
-        "chromeos/printing/printer_error_codes.cc",
-        "chromeos/printing/printer_error_codes.h",
-      ]
-      deps += [ "//chromeos/components/print_management/mojom" ]
-    }
-    if (is_chromeos_ash) {
-      deps += [
-        "//chrome/services/cups_proxy",
-        "//chrome/services/cups_proxy/public/mojom",
-      ]
-    }
-  }
-
   if (use_nss_certs) {
     sources += [
       "certificate_manager_model.cc",
@@ -8575,12 +8407,6 @@
   }
 }
 
-if (is_chromeos_lacros) {
-  proto_library("dlp_policy_event_proto") {
-    sources = [ "chromeos/policy/dlp/dlp_policy_event.proto" ]
-  }
-}
-
 if (is_chromeos_ash) {
   fuzzer_test("nearby_sharing_instantmessaging_stream_parser_fuzzer") {
     sources = [ "nearby_sharing/instantmessaging/stream_parser_fuzzer.cc" ]
diff --git a/chrome/browser/apps/app_preload_service/web_app_preload_installer.cc b/chrome/browser/apps/app_preload_service/web_app_preload_installer.cc
index 3250484c..138de70 100644
--- a/chrome/browser/apps/app_preload_service/web_app_preload_installer.cc
+++ b/chrome/browser/apps/app_preload_service/web_app_preload_installer.cc
@@ -9,7 +9,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_params.h"
@@ -106,7 +106,8 @@
 
   // Display mode
   install_info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  install_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  install_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
 
   return install_info;
 }
diff --git a/chrome/browser/apps/app_preload_service/web_app_preload_installer_unittest.cc b/chrome/browser/apps/app_preload_service/web_app_preload_installer_unittest.cc
index dd8b3f1..fccffe1 100644
--- a/chrome/browser/apps/app_preload_service/web_app_preload_installer_unittest.cc
+++ b/chrome/browser/apps/app_preload_service/web_app_preload_installer_unittest.cc
@@ -11,8 +11,8 @@
 #include "chrome/browser/apps/app_preload_service/proto/app_provisioning.pb.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/services/app_service/public/cpp/app_registry_cache.h"
@@ -179,7 +179,7 @@
   EXPECT_EQ(install_info->scope, "https://example.com/");
   EXPECT_EQ(install_info->display_mode, blink::mojom::DisplayMode::kStandalone);
   EXPECT_EQ(install_info->user_display_mode,
-            web_app::UserDisplayMode::kStandalone);
+            web_app::mojom::UserDisplayMode::kStandalone);
 }
 
 TEST_F(WebAppPreloadInstallerTest, ManifestToWebAppInstallInfoRelativeId) {
@@ -273,7 +273,7 @@
   EXPECT_EQ(install_info->scope, "https://example.com/");
   EXPECT_EQ(install_info->display_mode, blink::mojom::DisplayMode::kStandalone);
   EXPECT_EQ(install_info->user_display_mode,
-            web_app::UserDisplayMode::kStandalone);
+            web_app::mojom::UserDisplayMode::kStandalone);
 }
 
 TEST_F(WebAppPreloadInstallerTest, ManifestToWebAppInstallInfoInvalidStartUrl) {
diff --git a/chrome/browser/apps/app_service/browser_app_instance_tracker_browsertest.cc b/chrome/browser/apps/app_service/browser_app_instance_tracker_browsertest.cc
index 3005530..5e34339 100644
--- a/chrome/browser/apps/app_service/browser_app_instance_tracker_browsertest.cc
+++ b/chrome/browser/apps/app_service/browser_app_instance_tracker_browsertest.cc
@@ -288,8 +288,9 @@
                            WindowOpenDisposition::NEW_FOREGROUND_TAB);
   }
 
-  web_app::AppId InstallWebApp(const std::string& start_url,
-                               web_app::UserDisplayMode user_display_mode) {
+  web_app::AppId InstallWebApp(
+      const std::string& start_url,
+      web_app::mojom::UserDisplayMode user_display_mode) {
     auto info = std::make_unique<WebAppInstallInfo>();
     info->start_url = GURL(start_url);
     info->user_display_mode = user_display_mode;
@@ -299,11 +300,12 @@
   }
 
   web_app::AppId InstallWebAppOpeningAsTab(const std::string& start_url) {
-    return InstallWebApp(start_url, web_app::UserDisplayMode::kBrowser);
+    return InstallWebApp(start_url, web_app::mojom::UserDisplayMode::kBrowser);
   }
 
   web_app::AppId InstallWebAppOpeningAsWindow(const std::string& start_url) {
-    return InstallWebApp(start_url, web_app::UserDisplayMode::kStandalone);
+    return InstallWebApp(start_url,
+                         web_app::mojom::UserDisplayMode::kStandalone);
   }
 
   void UninstallWebApp(const web_app::AppId& app_id) {
diff --git a/chrome/browser/apps/app_service/metrics/app_platform_metrics_browsertest.cc b/chrome/browser/apps/app_service/metrics/app_platform_metrics_browsertest.cc
index 29139bf..0e45e56 100644
--- a/chrome/browser/apps/app_service/metrics/app_platform_metrics_browsertest.cc
+++ b/chrome/browser/apps/app_service/metrics/app_platform_metrics_browsertest.cc
@@ -12,8 +12,8 @@
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
 #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -29,7 +29,7 @@
  public:
   AppId InstallWebApp(const GURL& start_url,
                       blink::mojom::DisplayMode display_mode,
-                      web_app::UserDisplayMode user_display_mode) {
+                      web_app::mojom::UserDisplayMode user_display_mode) {
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = start_url;
     web_app_info->scope = start_url.GetWithoutFilename();
@@ -107,10 +107,10 @@
   const AppId standalone_app_id = InstallWebApp(
       GURL("https://standalone.example.com/"),
       blink::mojom::DisplayMode::kStandalone,
-      /*user_display_mode=*/web_app::UserDisplayMode::kStandalone);
+      /*user_display_mode=*/web_app::mojom::UserDisplayMode::kStandalone);
   const AppId browser_app_id = InstallWebApp(
       GURL("https://browser.example.com/"), blink::mojom::DisplayMode::kBrowser,
-      /*user_display_mode=*/web_app::UserDisplayMode::kStandalone);
+      /*user_display_mode=*/web_app::mojom::UserDisplayMode::kStandalone);
 
   // When container is specified, |user_display_mode| and |display_mode| are
   // ignored.
@@ -144,13 +144,13 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AppPlatformMetricsBrowserTest, TabbedWebApps) {
-  const AppId standalone_app_id =
-      InstallWebApp(GURL("https://standalone.example.com/"),
-                    blink::mojom::DisplayMode::kStandalone,
-                    /*user_display_mode=*/web_app::UserDisplayMode::kBrowser);
+  const AppId standalone_app_id = InstallWebApp(
+      GURL("https://standalone.example.com/"),
+      blink::mojom::DisplayMode::kStandalone,
+      /*user_display_mode=*/web_app::mojom::UserDisplayMode::kBrowser);
   const AppId browser_app_id = InstallWebApp(
       GURL("https://browser.example.com/"), blink::mojom::DisplayMode::kBrowser,
-      /*user_display_mode=*/web_app::UserDisplayMode::kBrowser);
+      /*user_display_mode=*/web_app::mojom::UserDisplayMode::kBrowser);
 
   // When container is specified, |user_display_mode| and |display_mode| are
   // ignored.
diff --git a/chrome/browser/apps/app_service/metrics/website_metrics_browsertest.cc b/chrome/browser/apps/app_service/metrics/website_metrics_browsertest.cc
index 923fed2..94ab9791 100644
--- a/chrome/browser/apps/app_service/metrics/website_metrics_browsertest.cc
+++ b/chrome/browser/apps/app_service/metrics/website_metrics_browsertest.cc
@@ -180,8 +180,9 @@
                            WindowOpenDisposition::NEW_BACKGROUND_TAB);
   }
 
-  web_app::AppId InstallWebApp(const std::string& start_url,
-                               web_app::UserDisplayMode user_display_mode) {
+  web_app::AppId InstallWebApp(
+      const std::string& start_url,
+      web_app::mojom::UserDisplayMode user_display_mode) {
     auto info = std::make_unique<WebAppInstallInfo>();
     info->start_url = GURL(start_url);
     info->user_display_mode = user_display_mode;
@@ -191,11 +192,12 @@
   }
 
   web_app::AppId InstallWebAppOpeningAsTab(const std::string& start_url) {
-    return InstallWebApp(start_url, web_app::UserDisplayMode::kBrowser);
+    return InstallWebApp(start_url, web_app::mojom::UserDisplayMode::kBrowser);
   }
 
   web_app::AppId InstallWebAppOpeningAsWindow(const std::string& start_url) {
-    return InstallWebApp(start_url, web_app::UserDisplayMode::kStandalone);
+    return InstallWebApp(start_url,
+                         web_app::mojom::UserDisplayMode::kStandalone);
   }
 
   void VerifyUrlInfo(const GURL& url,
diff --git a/chrome/browser/apps/app_service/publishers/publisher_unittest.cc b/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
index 061a877..dd4fe6d7 100644
--- a/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
+++ b/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
@@ -20,10 +20,10 @@
 #include "chrome/browser/extensions/extension_service_test_base.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager_impl.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/test_web_app_url_loader.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/account_id/account_id.h"
 #include "components/app_constants/constants.h"
@@ -318,7 +318,8 @@
     web_app_info->title = base::UTF8ToUTF16(app_name);
     web_app_info->start_url = kAppUrl;
     web_app_info->scope = kAppUrl;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
 
     return web_app::test::InstallWebApp(profile(), std::move(web_app_info));
   }
diff --git a/chrome/browser/apps/app_service/web_contents_app_id_utils.cc b/chrome/browser/apps/app_service/web_contents_app_id_utils.cc
index 65fe82ad..56be4760 100644
--- a/chrome/browser/apps/app_service/web_contents_app_id_utils.cc
+++ b/chrome/browser/apps/app_service/web_contents_app_id_utils.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -97,7 +98,8 @@
       const web_app::WebApp* web_app =
           provider->registrar_unsafe().GetAppById(*app_id);
       DCHECK(web_app);
-      if (web_app->user_display_mode() == web_app::UserDisplayMode::kBrowser &&
+      if (web_app->user_display_mode() ==
+              web_app::mojom::UserDisplayMode::kBrowser &&
           !web_app->is_uninstalling()) {
         return app_id;
       }
diff --git a/chrome/browser/apps/app_shim/web_app_shim_manager_delegate_mac_unittest.cc b/chrome/browser/apps/app_shim/web_app_shim_manager_delegate_mac_unittest.cc
index cc664e5..424e53e 100644
--- a/chrome/browser/apps/app_shim/web_app_shim_manager_delegate_mac_unittest.cc
+++ b/chrome/browser/apps/app_shim/web_app_shim_manager_delegate_mac_unittest.cc
@@ -11,11 +11,11 @@
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -467,7 +467,8 @@
     web_app_info->title = u"WebAppTestWithShortcutMenuItems";
     web_app_info->scope = web_app_info->start_url;
     web_app_info->description = web_app_info->title;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
 
     shortcut_info1.name = u"shortcut_info1";
     shortcut_info1.url = GURL(".");
diff --git a/chrome/browser/apps/intent_helper/intent_picker_internal.cc b/chrome/browser/apps/intent_helper/intent_picker_internal.cc
index eec07f5..94510b0 100644
--- a/chrome/browser/apps/intent_helper/intent_picker_internal.cc
+++ b/chrome/browser/apps/intent_helper/intent_picker_internal.cc
@@ -12,7 +12,7 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/intent_picker_tab_helper.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -79,7 +79,7 @@
 
   auto* const provider = web_app::WebAppProvider::GetForWebApps(profile);
   if (provider->registrar_unsafe().GetAppUserDisplayMode(*app_id) ==
-      web_app::UserDisplayMode::kBrowser) {
+      web_app::mojom::UserDisplayMode::kBrowser) {
     return apps;
   }
 
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index 77776efe..3415462 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -27,6 +27,8 @@
     defines += [ "USE_CRAS" ]
   }
 
+  public_configs = [ "//build/config/linux/nss" ]
+
   sources = [
     "accessibility/accessibility_event_rewriter_delegate_impl.cc",
     "accessibility/accessibility_event_rewriter_delegate_impl.h",
@@ -3991,7 +3993,10 @@
     "//ui/wm",
   ]
 
-  data_deps = [ ":mojo_service_manager_policy" ]
+  data_deps = [
+    ":dbus_service_files",
+    ":mojo_service_manager_policy",
+  ]
 
   if (enable_hibernate) {
     deps += [ "//chromeos/ash/components/dbus/hiberman" ]
@@ -4071,6 +4076,42 @@
   }
 }
 
+action("dbus_service_files") {
+  sources = [
+    "dbus/org.chromium.ChromeFeaturesService.conf",
+    "dbus/org.chromium.ComponentUpdaterService.conf",
+    "dbus/org.chromium.CryptohomeKeyDelegate.conf",
+    "dbus/org.chromium.DlpFilesPolicyService.conf",
+    "dbus/org.chromium.DriveFileStreamService.conf",
+    "dbus/org.chromium.EncryptedReportingUploadService.conf",
+    "dbus/org.chromium.FuseBoxService.conf",
+    "dbus/org.chromium.KioskAppService.conf",
+    "dbus/org.chromium.LibvdaService.conf",
+    "dbus/org.chromium.LockToSingleUser.conf",
+    "dbus/org.chromium.MachineLearningDecisionService.conf",
+    "dbus/org.chromium.MetricsEventService.conf",
+    "dbus/org.chromium.MojoConnectionService.conf",
+    "dbus/org.chromium.NetworkProxyService.conf",
+    "dbus/org.chromium.PrintersService.conf",
+    "dbus/org.chromium.ProfilerStatusService.conf",
+    "dbus/org.chromium.ScreenLockService.conf",
+    "dbus/org.chromium.SmbFsService.conf",
+    "dbus/org.chromium.VirtualFileRequestService.conf",
+    "dbus/vm/org.chromium.PluginVmService.conf",
+    "dbus/vm/org.chromium.VmApplicationsService.conf",
+    "dbus/vm/org.chromium.VmDiskManagementService.conf",
+    "dbus/vm/org.chromium.VmLaunchService.conf",
+    "dbus/vm/org.chromium.VmPermissionService.conf",
+    "dbus/vm/org.chromium.VmSKForwardingService.conf",
+  ]
+  output_conf_file = "$root_out_dir/dbus/chrome_dbus_services.conf"
+  outputs = [ output_conf_file ]
+
+  script = "//chromeos/tools/concat_dbus_conf_files.py"
+  args = [ rebase_path(output_conf_file, root_build_dir) ]
+  args += rebase_path(sources, root_build_dir)
+}
+
 copy("mojo_service_manager_policy") {
   sources = [ "net/network_health/network_health_service_policy.json" ]
   outputs = [ "$root_out_dir/mojo_service_manager/{{source_file_part}}" ]
@@ -5727,6 +5768,7 @@
     "//url",
 
     # Gather unit tests from subdirectories.
+    ":test_with_shadow_variables",
     "//chrome/browser/ash/crosapi:unit_tests",
     "//chrome/browser/ash/login/oobe_quick_start:unit_tests",
     "//chrome/browser/ash/telemetry_extension:unit_tests",
diff --git a/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl.cc b/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl.cc
index dfcd84f..e9825df 100644
--- a/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl.cc
+++ b/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl.cc
@@ -15,7 +15,7 @@
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/external_install_options.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -249,7 +249,7 @@
                   << "Trying to install PWA for " << install_url
                   << ". Num attempts so far # " << num_attempts_so_far;
   web_app::ExternalInstallOptions options(
-      install_url, web_app::UserDisplayMode::kStandalone,
+      install_url, web_app::mojom::UserDisplayMode::kStandalone,
       web_app::ExternalInstallSource::kInternalDefault);
   options.override_previous_user_uninstall = true;
   // The ServiceWorker does not load in time for the installability check, so
diff --git a/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl_unittest.cc b/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl_unittest.cc
index c68a56f..fe15e46 100644
--- a/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl_unittest.cc
+++ b/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl_unittest.cc
@@ -22,10 +22,10 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/web_applications/external_install_options.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_externally_managed_app_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
@@ -46,7 +46,7 @@
 
 web_app::ExternalInstallOptions GetInstallOptionsForUrl(const GURL& url) {
   web_app::ExternalInstallOptions options(
-      url, web_app::UserDisplayMode::kStandalone,
+      url, web_app::mojom::UserDisplayMode::kStandalone,
       web_app::ExternalInstallSource::kInternalDefault);
   options.override_previous_user_uninstall = true;
   options.bypass_service_worker_check = true;
diff --git a/chrome/browser/ash/app_list/app_service/app_service_app_model_builder_unittest.cc b/chrome/browser/ash/app_list/app_service/app_service_app_model_builder_unittest.cc
index c8ada23..61017af 100644
--- a/chrome/browser/ash/app_list/app_service/app_service_app_model_builder_unittest.cc
+++ b/chrome/browser/ash/app_list/app_service/app_service_app_model_builder_unittest.cc
@@ -44,9 +44,9 @@
 #include "chrome/browser/extensions/install_tracker.h"
 #include "chrome/browser/extensions/install_tracker_factory.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -347,7 +347,8 @@
     web_app_info->title = base::UTF8ToUTF16(app_name);
     web_app_info->start_url = kAppUrl;
     web_app_info->scope = kAppUrl;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
 
     return web_app::test::InstallWebApp(profile(), std::move(web_app_info));
   }
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
index fc9d5d6d..0d1ad7c 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
@@ -88,7 +88,8 @@
   delegate_->OnAppInstalling();
 
   web_app::ExternalInstallOptions options(
-      GetCurrentApp()->install_url(), web_app::UserDisplayMode::kStandalone,
+      GetCurrentApp()->install_url(),
+      web_app::mojom::UserDisplayMode::kStandalone,
       web_app::ExternalInstallSource::kKiosk);
   // When the install URL redirects to another URL a placeholder will be
   // installed. This happens if a web app requires authentication.
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc
index 00df4bf..afa9c7a 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc
@@ -22,12 +22,12 @@
 #include "chrome/browser/ui/web_applications/web_app_launch_manager.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/test/fake_externally_managed_app_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -179,7 +179,7 @@
                    web_app::ExternallyManagedAppManager::InstallResult>
             install_result;
         web_app::ExternalInstallOptions install_options(
-            GURL(kAppInstallUrl), web_app::UserDisplayMode::kStandalone,
+            GURL(kAppInstallUrl), web_app::mojom::UserDisplayMode::kStandalone,
             web_app::ExternalInstallSource::kKiosk);
 
         externally_managed_app_manager().Install(install_options,
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_browser_controller_ash_browsertest.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_browser_controller_ash_browsertest.cc
index 801e127..11aa3cd 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_browser_controller_ash_browsertest.cc
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_browser_controller_ash_browsertest.cc
@@ -20,8 +20,8 @@
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_install_utils.h"
@@ -120,7 +120,8 @@
     install_info->start_url = start_url;
     install_info->scope = start_url.GetWithoutFilename();
     install_info->title = u"App Name";
-    install_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    install_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
 
     base::RunLoop run_loop;
     auto* provider = web_app::WebAppProvider::GetForTest(browser()->profile());
diff --git a/chrome/browser/ash/apps/apk_web_app_installer.cc b/chrome/browser/ash/apps/apk_web_app_installer.cc
index 23a6f87..bb63657 100644
--- a/chrome/browser/ash/apps/apk_web_app_installer.cc
+++ b/chrome/browser/ash/apps/apk_web_app_installer.cc
@@ -14,7 +14,7 @@
 #include "chrome/browser/ash/crosapi/web_app_service_ash.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_install_utils.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -107,7 +107,7 @@
   }
   web_app_install_info_->display_mode = blink::mojom::DisplayMode::kStandalone;
   web_app_install_info_->user_display_mode =
-      web_app::UserDisplayMode::kStandalone;
+      web_app::mojom::UserDisplayMode::kStandalone;
 
   is_web_only_twa_ = web_app_info->is_web_only_twa;
   sha256_fingerprint_ = web_app_info->certificate_sha256_fingerprint;
diff --git a/chrome/browser/ash/apps/apk_web_app_installer_browsertest.cc b/chrome/browser/ash/apps/apk_web_app_installer_browsertest.cc
index ebaf78d..adff180f 100644
--- a/chrome/browser/ash/apps/apk_web_app_installer_browsertest.cc
+++ b/chrome/browser/ash/apps/apk_web_app_installer_browsertest.cc
@@ -27,10 +27,10 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/web_applications/app_registrar_observer.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_icon_generator.h"
@@ -72,7 +72,7 @@
   web_app_install_info->scope = url.Resolve("scope");
   web_app_install_info->display_mode = web_app::DisplayMode::kBrowser;
   web_app_install_info->user_display_mode =
-      web_app::UserDisplayMode::kStandalone;
+      web_app::mojom::UserDisplayMode::kStandalone;
 
   const std::vector<SquareSizePx> sizes_px{web_app::icon_size::k256,
                                            web_app::icon_size::k512};
@@ -136,7 +136,7 @@
 
   // User preferences:
   EXPECT_EQ(web_app->user_display_mode(),
-            web_app::UserDisplayMode::kStandalone);
+            web_app::mojom::UserDisplayMode::kStandalone);
 }
 
 }  // namespace
diff --git a/chrome/browser/ash/login/app_mode/test/web_kiosk_browsertest.cc b/chrome/browser/ash/login/app_mode/test/web_kiosk_browsertest.cc
index d55d959..8990291f 100644
--- a/chrome/browser/ash/login/app_mode/test/web_kiosk_browsertest.cc
+++ b/chrome/browser/ash/login/app_mode/test/web_kiosk_browsertest.cc
@@ -36,7 +36,7 @@
 #include "chrome/browser/ui/webui/ash/login/signin_screen_handler.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -140,7 +140,8 @@
           auto* provider =
               web_app::WebAppProvider::GetForLocalAppsUnchecked(profile);
           web_app::ExternalInstallOptions install_options(
-              GURL(kAppInstallUrl), web_app::UserDisplayMode::kStandalone,
+              GURL(kAppInstallUrl),
+              web_app::mojom::UserDisplayMode::kStandalone,
               web_app::ExternalInstallSource::kKiosk);
           install_options.install_placeholder = true;
           provider->externally_managed_app_manager().InstallNow(
diff --git a/chrome/browser/ash/system_extensions/api/window_management/cros_window_browsertest.cc b/chrome/browser/ash/system_extensions/api/window_management/cros_window_browsertest.cc
index 916b77b4..2e3f4d7 100644
--- a/chrome/browser/ash/system_extensions/api/window_management/cros_window_browsertest.cc
+++ b/chrome/browser/ash/system_extensions/api/window_management/cros_window_browsertest.cc
@@ -258,7 +258,7 @@
     // in a tab in regular browser window.
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = start_url;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kBrowser;
+    web_app_info->user_display_mode = web_app::mojom::UserDisplayMode::kBrowser;
     const web_app::AppId app_id = web_app::test::InstallWebApp(
         browser()->profile(), std::move(web_app_info));
     web_app::AppReadinessWaiter(browser()->profile(), app_id).Await();
diff --git a/chrome/browser/ash/system_web_apps/system_web_app_manager.cc b/chrome/browser/ash/system_web_apps/system_web_app_manager.cc
index e74a539..c236619 100644
--- a/chrome/browser/ash/system_web_apps/system_web_app_manager.cc
+++ b/chrome/browser/ash/system_web_apps/system_web_app_manager.cc
@@ -67,8 +67,8 @@
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/manifest_update_manager.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -168,7 +168,7 @@
              content::kChromeUIUntrustedScheme);
 
   web_app::ExternalInstallOptions install_options(
-      delegate.GetInstallUrl(), web_app::UserDisplayMode::kStandalone,
+      delegate.GetInstallUrl(), web_app::mojom::UserDisplayMode::kStandalone,
       web_app::ExternalInstallSource::kSystemInstalled);
   install_options.only_use_app_info_factory = true;
   // This can be Unretained because it's referring to the delegate owning this
diff --git a/chrome/browser/ash/system_web_apps/system_web_app_manager_unittest.cc b/chrome/browser/ash/system_web_apps/system_web_app_manager_unittest.cc
index 39b50cf5..7a0f579 100644
--- a/chrome/browser/ash/system_web_apps/system_web_app_manager_unittest.cc
+++ b/chrome/browser/ash/system_web_apps/system_web_app_manager_unittest.cc
@@ -22,12 +22,12 @@
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_delegate_map.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_externally_managed_app_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/test_web_app_url_loader.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -295,7 +295,7 @@
 
   // We should only try to install the app in the System App list.
   web_app::ExternalInstallOptions options(
-      AppUrl1(), web_app::UserDisplayMode::kStandalone,
+      AppUrl1(), web_app::mojom::UserDisplayMode::kStandalone,
       web_app::ExternalInstallSource::kSystemInstalled);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
diff --git a/chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.cc b/chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.cc
index 8b09640..e393bfa 100644
--- a/chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.cc
+++ b/chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.cc
@@ -17,7 +17,7 @@
 #include "chrome/browser/ash/system_web_apps/test_support/test_system_web_app_url_data_source.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
@@ -349,7 +349,7 @@
   info->title = u"Test System App";
   info->theme_color = 0xFF00FF00;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
   info->install_url = GURL("chrome://test-system-app/pwa.html");
   return info;
 }
@@ -536,7 +536,8 @@
             info->title = u"Test System App";
             info->theme_color = 0xFF00FF00;
             info->display_mode = blink::mojom::DisplayMode::kStandalone;
-            info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+            info->user_display_mode =
+                web_app::mojom::UserDisplayMode::kStandalone;
             info->install_url = GURL("chrome://initiating-app/pwa.html");
             return info;
           })));
@@ -718,7 +719,7 @@
         info->title = u"Test System App";
         info->theme_color = 0xFF00FF00;
         info->display_mode = blink::mojom::DisplayMode::kStandalone;
-        info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+        info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
         return info;
       }));
 
diff --git a/chrome/browser/ash/web_applications/camera_app/camera_system_web_app_info.cc b/chrome/browser/ash/web_applications/camera_app/camera_system_web_app_info.cc
index 37db5c2..1f38a508 100644
--- a/chrome/browser/ash/web_applications/camera_app/camera_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/camera_app/camera_system_web_app_info.cc
@@ -10,7 +10,7 @@
 #include "ash/webui/grit/ash_camera_app_resources.h"
 #include "chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_constants.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "components/prefs/pref_service.h"
@@ -47,7 +47,7 @@
       cros_styles::ColorName::kGoogleGrey900, /*is_dark_mode=*/true,
       /*use_debug_colors=*/false);
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
   return info;
 }
 
diff --git a/chrome/browser/ash/web_applications/connectivity_diagnostics_system_web_app_info.cc b/chrome/browser/ash/web_applications/connectivity_diagnostics_system_web_app_info.cc
index 8da5412e..5d1e4a0 100644
--- a/chrome/browser/ash/web_applications/connectivity_diagnostics_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/connectivity_diagnostics_system_web_app_info.cc
@@ -9,7 +9,7 @@
 #include "ash/webui/connectivity_diagnostics/url_constants.h"
 #include "ash/webui/grit/connectivity_diagnostics_resources.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chromeos/strings/grit/chromeos_strings.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
@@ -32,7 +32,7 @@
   info->theme_color = 0xFFFFFFFF;
   info->background_color = 0xFFFFFFFF;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/demo_mode_web_app_info.cc b/chrome/browser/ash/web_applications/demo_mode_web_app_info.cc
index 286d12531..58d700b51 100644
--- a/chrome/browser/ash/web_applications/demo_mode_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/demo_mode_web_app_info.cc
@@ -10,7 +10,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ash/login/demo_mode/demo_session.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chromeos/constants/chromeos_features.h"
 
@@ -28,7 +28,7 @@
   info->theme_color = 0xFF4285F4;
   info->background_color = 0xFFFFFFFF;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/diagnostics_system_web_app_info.cc b/chrome/browser/ash/web_applications/diagnostics_system_web_app_info.cc
index 45d36cb..44b0707 100644
--- a/chrome/browser/ash/web_applications/diagnostics_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/diagnostics_system_web_app_info.cc
@@ -11,7 +11,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
 #include "chrome/browser/ui/webui/ash/diagnostics_dialog.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
 #include "url/gurl.h"
@@ -36,7 +36,7 @@
   info->background_color = info->theme_color;
   info->dark_mode_background_color = info->dark_mode_theme_color;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/eche_app_info.cc b/chrome/browser/ash/web_applications/eche_app_info.cc
index 5c7c53368..225cad3 100644
--- a/chrome/browser/ash/web_applications/eche_app_info.cc
+++ b/chrome/browser/ash/web_applications/eche_app_info.cc
@@ -11,7 +11,7 @@
 #include "ash/webui/grit/ash_eche_bundle_resources.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
@@ -38,7 +38,7 @@
   info->theme_color = 0xFFFFFFFF;
   info->background_color = 0xFFFFFFFF;
   info->display_mode = blink::mojom::DisplayMode::kMinimalUi;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/face_ml_system_web_app_info.cc b/chrome/browser/ash/web_applications/face_ml_system_web_app_info.cc
index b8e9aac25..24e14c5 100644
--- a/chrome/browser/ash/web_applications/face_ml_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/face_ml_system_web_app_info.cc
@@ -12,7 +12,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
@@ -53,7 +53,7 @@
   }
 
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
   return info;
 }
 
diff --git a/chrome/browser/ash/web_applications/file_manager_web_app_info.cc b/chrome/browser/ash/web_applications/file_manager_web_app_info.cc
index ba741da..fd4598d 100644
--- a/chrome/browser/ash/web_applications/file_manager_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/file_manager_web_app_info.cc
@@ -11,7 +11,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ash/file_manager/file_tasks.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/generated_resources.h"
@@ -75,7 +75,7 @@
   info->background_color = info->theme_color;
   info->dark_mode_background_color = info->dark_mode_theme_color;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   // NOTE: when adding new formats to the extension list below, don't
   // forget to also update file_manager/manifest.json.
diff --git a/chrome/browser/ash/web_applications/firmware_update_system_web_app_info.cc b/chrome/browser/ash/web_applications/firmware_update_system_web_app_info.cc
index abf12f20..31bcdd8 100644
--- a/chrome/browser/ash/web_applications/firmware_update_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/firmware_update_system_web_app_info.cc
@@ -11,7 +11,7 @@
 #include "ash/webui/grit/ash_firmware_update_app_resources.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -44,7 +44,7 @@
       {{"app_icon_192.png", 192, IDR_ASH_FIRMWARE_UPDATE_APP_APP_ICON_192_PNG}},
       *info);
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
   info->theme_color =
       web_app::GetDefaultBackgroundColor(/*use_dark_mode=*/false);
   info->dark_mode_theme_color = GetDarkModeBackgroundColor();
diff --git a/chrome/browser/ash/web_applications/help_app/help_app_web_app_info.cc b/chrome/browser/ash/web_applications/help_app/help_app_web_app_info.cc
index bb4d3a2..5d0727a 100644
--- a/chrome/browser/ash/web_applications/help_app/help_app_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/help_app/help_app_web_app_info.cc
@@ -10,7 +10,7 @@
 #include "ash/webui/grit/ash_help_app_resources.h"
 #include "ash/webui/help_app_ui/url_constants.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/generated_resources.h"
@@ -57,7 +57,7 @@
   }
 
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
   return info;
 }
 
diff --git a/chrome/browser/ash/web_applications/media_app/media_web_app_info.cc b/chrome/browser/ash/web_applications/media_app/media_web_app_info.cc
index c6364281..5d9e5f9 100644
--- a/chrome/browser/ash/web_applications/media_app/media_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/media_app/media_web_app_info.cc
@@ -25,7 +25,7 @@
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chromeos/grit/chromeos_media_app_bundle_resources.h"
@@ -273,7 +273,7 @@
   }
 
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   // Add handlers for image+video and audio. We keep them separate since their
   // UX are sufficiently different (we don't want audio files to have a carousel
diff --git a/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.cc b/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.cc
index 4c7000b..bb6b490 100644
--- a/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.cc
@@ -18,7 +18,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/common/pref_names.h"
@@ -55,7 +55,7 @@
        {"app_icon_256.png", 256, IDR_ASH_OS_FEEDBACK_APP_ICON_256_PNG}},
       *info);
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/os_flags_system_web_app_info.cc b/chrome/browser/ash/web_applications/os_flags_system_web_app_info.cc
index 67083be..ff9b09a 100644
--- a/chrome/browser/ash/web_applications/os_flags_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/os_flags_system_web_app_info.cc
@@ -6,7 +6,7 @@
 
 #include "ash/public/cpp/resources/grit/ash_public_unscaled_resources.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chrome/grit/generated_resources.h"
@@ -43,7 +43,7 @@
   info->dark_mode_theme_color =
       web_app::GetDefaultBackgroundColor(/*use_dark_mode=*/true);
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/os_settings_web_app_info.cc b/chrome/browser/ash/web_applications/os_settings_web_app_info.cc
index f1c68f9..421ea17 100644
--- a/chrome/browser/ash/web_applications/os_settings_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/os_settings_web_app_info.cc
@@ -9,7 +9,7 @@
 #include "ash/constants/ash_features.h"
 #include "ash/public/cpp/resources/grit/ash_public_unscaled_resources.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/webui_url_constants.h"
@@ -38,7 +38,7 @@
   info->background_color = info->theme_color;
   info->dark_mode_background_color = info->dark_mode_theme_color;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
   return info;
 }
 
diff --git a/chrome/browser/ash/web_applications/os_url_handler_system_web_app_info.cc b/chrome/browser/ash/web_applications/os_url_handler_system_web_app_info.cc
index 9bfb780..bb81907 100644
--- a/chrome/browser/ash/web_applications/os_url_handler_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/os_url_handler_system_web_app_info.cc
@@ -12,7 +12,7 @@
 #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chrome/grit/generated_resources.h"
@@ -60,7 +60,7 @@
   info->dark_mode_theme_color =
       web_app::GetDefaultBackgroundColor(/*use_dark_mode=*/true);
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.cc
index 616b804..b733268 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.cc
@@ -12,7 +12,7 @@
 #include "chrome/browser/ash/web_applications/personalization_app/personalization_app_utils.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
 #include "chrome/browser/ui/browser.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chromeos/strings/grit/chromeos_strings.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
@@ -66,7 +66,7 @@
       *info);
 
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/print_management_web_app_info.cc b/chrome/browser/ash/web_applications/print_management_web_app_info.cc
index 7859817..bf8a496 100644
--- a/chrome/browser/ash/web_applications/print_management_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/print_management_web_app_info.cc
@@ -9,7 +9,7 @@
 #include "ash/webui/grit/ash_print_management_resources.h"
 #include "ash/webui/print_management/url_constants.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chromeos/strings/grit/chromeos_strings.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -34,7 +34,7 @@
   info->dark_mode_background_color = info->dark_mode_theme_color;
 
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/projector_system_web_app_info.cc b/chrome/browser/ash/web_applications/projector_system_web_app_info.cc
index ace0d38..4b98bcb 100644
--- a/chrome/browser/ash/web_applications/projector_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/projector_system_web_app_info.cc
@@ -8,7 +8,7 @@
 #include "ash/webui/projector_app/public/cpp/projector_app_constants.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
 #include "chrome/browser/ui/ash/projector/projector_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/generated_resources.h"
 #include "third_party/skia/include/core/SkColor.h"
@@ -57,7 +57,7 @@
   info->dark_mode_theme_color =
       web_app::GetDefaultBackgroundColor(/*use_dark_mode=*/true);
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/sample_system_web_app_info.cc b/chrome/browser/ash/web_applications/sample_system_web_app_info.cc
index 01420dc9..e7c13f6a 100644
--- a/chrome/browser/ash/web_applications/sample_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/sample_system_web_app_info.cc
@@ -10,7 +10,7 @@
 #include "ash/webui/sample_system_web_app_ui/url_constants.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
@@ -37,7 +37,7 @@
   info->dark_mode_theme_color = 0xFF11ff00;
   info->dark_mode_background_color = 0xFFff8888;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   info->share_target = apps::ShareTarget();
   info->share_target->action =
diff --git a/chrome/browser/ash/web_applications/scanning_system_web_app_info.cc b/chrome/browser/ash/web_applications/scanning_system_web_app_info.cc
index fdb7cb67f..4a11585 100644
--- a/chrome/browser/ash/web_applications/scanning_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/scanning_system_web_app_info.cc
@@ -9,7 +9,7 @@
 #include "ash/webui/grit/ash_scanning_app_resources.h"
 #include "ash/webui/scanning/url_constants.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chromeos/strings/grit/chromeos_strings.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
@@ -41,7 +41,7 @@
   info->background_color = info->theme_color;
   info->dark_mode_background_color = info->dark_mode_theme_color;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/shimless_rma_system_web_app_info.cc b/chrome/browser/ash/web_applications/shimless_rma_system_web_app_info.cc
index fb43f00..f111455 100644
--- a/chrome/browser/ash/web_applications/shimless_rma_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/shimless_rma_system_web_app_info.cc
@@ -11,7 +11,7 @@
 #include "ash/webui/grit/ash_shimless_rma_resources.h"
 #include "ash/webui/shimless_rma/url_constants.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -29,7 +29,7 @@
   info->theme_color = 0xFFFFFFFF;
   info->background_color = 0xFFFFFFFF;
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/ash/web_applications/shortcut_customization_system_web_app_info.cc b/chrome/browser/ash/web_applications/shortcut_customization_system_web_app_info.cc
index 96931e95..746508c 100644
--- a/chrome/browser/ash/web_applications/shortcut_customization_system_web_app_info.cc
+++ b/chrome/browser/ash/web_applications/shortcut_customization_system_web_app_info.cc
@@ -10,7 +10,7 @@
 #include "ash/webui/grit/ash_shortcut_customization_app_resources.h"
 #include "ash/webui/shortcut_customization_ui/url_constants.h"
 #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -36,7 +36,7 @@
         IDR_ASH_SHORTCUT_CUSTOMIZATION_APP_APP_ICON_192_PNG}},
       *info);
   info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
 
   return info;
 }
diff --git a/chrome/browser/banners/app_banner_manager_desktop.cc b/chrome/browser/banners/app_banner_manager_desktop.cc
index 872cf7b..b8a89dc 100644
--- a/chrome/browser/banners/app_banner_manager_desktop.cc
+++ b/chrome/browser/banners/app_banner_manager_desktop.cc
@@ -17,7 +17,7 @@
 #include "chrome/browser/ui/intent_picker_tab_helper.h"
 #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h"
 #include "chrome/browser/web_applications/extensions/bookmark_app_util.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_install_manager_observer.h"
@@ -181,7 +181,7 @@
   // TODO(crbug.com/1205529): Showing an install button when it's already
   // installed is confusing.
   auto display_mode = registrar().GetAppUserDisplayMode(app_id);
-  return display_mode == web_app::UserDisplayMode::kBrowser;
+  return display_mode == web_app::mojom::UserDisplayMode::kBrowser;
 }
 
 void AppBannerManagerDesktop::ShowBannerUi(WebappInstallSource install_source) {
@@ -217,7 +217,7 @@
       registrar().FindAppWithUrlInScope(validated_url_);
   if (app_id.has_value() && *app_id == installed_app_id &&
       registrar().GetAppUserDisplayMode(*app_id) ==
-          web_app::UserDisplayMode::kStandalone) {
+          web_app::mojom::UserDisplayMode::kStandalone) {
     OnInstall(registrar().GetEffectiveDisplayModeFromManifest(*app_id));
     SetInstallableWebAppCheckResult(InstallableWebAppCheckResult::kNo);
   }
diff --git a/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc b/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc
index 87044eae..6818e58 100644
--- a/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc
+++ b/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc
@@ -28,7 +28,7 @@
 #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/common/chrome_features.h"
@@ -299,7 +299,7 @@
   web_app::ExternalInstallOptions options =
       web_app::CreateInstallOptions(GetBannerURL());
   options.install_source = web_app::ExternalInstallSource::kExternalPolicy;
-  options.user_display_mode = web_app::UserDisplayMode::kBrowser;
+  options.user_display_mode = web_app::mojom::UserDisplayMode::kBrowser;
   web_app::ExternallyManagedAppManagerInstall(browser()->profile(), options);
 
   // Run promotability check.
@@ -328,7 +328,7 @@
   web_app::ExternalInstallOptions options =
       web_app::CreateInstallOptions(GetBannerURL());
   options.install_source = web_app::ExternalInstallSource::kExternalPolicy;
-  options.user_display_mode = web_app::UserDisplayMode::kBrowser;
+  options.user_display_mode = web_app::mojom::UserDisplayMode::kBrowser;
   web_app::ExternallyManagedAppManagerInstall(profile, options);
 
   // Uninstall web app by policy.
@@ -442,7 +442,7 @@
       web_app::CreateInstallOptions(GetBannerURLWithManifest(
           "/banners/manifest_display_override_contains_browser.json"));
   options.install_source = web_app::ExternalInstallSource::kExternalPolicy;
-  options.user_display_mode = web_app::UserDisplayMode::kBrowser;
+  options.user_display_mode = web_app::mojom::UserDisplayMode::kBrowser;
   web_app::ExternallyManagedAppManagerInstall(browser()->profile(), options);
 
   // Run promotability check.
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index 8da1364..38230a9 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -303,7 +303,7 @@
 #include "chromeos/ash/services/hotspot_config/public/mojom/cros_hotspot_config.mojom.h"
 #include "chromeos/ash/services/multidevice_setup/multidevice_setup_service.h"
 #include "chromeos/ash/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
-#include "chromeos/components/print_management/mojom/printing_manager.mojom.h"
+#include "chromeos/components/print_management/mojom/printing_manager.mojom.h"  // nogncheck
 #include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"  // nogncheck
 #include "chromeos/services/network_health/public/mojom/network_diagnostics.mojom.h"  // nogncheck
 #include "chromeos/services/network_health/public/mojom/network_health.mojom.h"  // nogncheck
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 0431d3bf..f56a1e9b 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -2,599 +2,19 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//build/config/chromebox_for_meetings/buildflags.gni")
 import("//build/config/chromeos/ui_mode.gni")
-import("//build/config/ui.gni")
-import("//chromeos/ash/components/hibernate/buildflags.gni")
-import("//chromeos/components/sensors/buildflags.gni")
+import("//build/config/ozone.gni")
 import("//extensions/buildflags/buildflags.gni")
-import("//media/media_options.gni")
 import("//ppapi/buildflags/buildflags.gni")
 import("//printing/buildflags/buildflags.gni")
 import("//third_party/protobuf/proto_library.gni")
 
-assert(is_chromeos_ash)
+assert(enable_extensions)
+assert(is_chromeos)
 assert(use_ozone)
 
 source_set("chromeos") {
-  assert(enable_extensions, "ChromeOS Chrome has to be built with extensions")
-
   configs += [ "//build/config/compiler:wexit_time_destructors" ]
-  public_configs = [ "//build/config/linux/nss" ]
-
-  public_deps = [
-    "//ash/resources/vector_icons",
-    "//ash/strings",
-    "//chrome:extra_resources",
-    "//chrome:resources",
-    "//chrome:strings",
-    "//chrome/app/resources:platform_locale_settings",
-    "//chrome/app/theme:chrome_unscaled_resources",
-    "//chrome/app/theme:theme_resources",
-    "//chrome/browser/ash/power/ml:user_activity_ukm_logger_helpers",
-    "//chrome/browser/google",
-    "//chrome/browser/ui/webui/ash/crostini_installer:mojo_bindings",
-    "//chrome/browser/ui/webui/ash/emoji:mojo_bindings",
-    "//chromeos/ash/components/dbus:vm_applications_apps_proto",
-    "//chromeos/ash/components/dbus:vm_disk_management_proto",
-    "//chromeos/ash/components/dbus:vm_launch_proto",
-    "//chromeos/ash/components/dbus:vm_permission_service_proto",
-    "//chromeos/ash/components/dbus:vm_sk_forwarding_proto",
-    "//chromeos/ash/components/dbus/anomaly_detector:proto",
-    "//chromeos/ash/components/dbus/cicerone:cicerone_proto",
-    "//chromeos/ash/components/dbus/concierge:concierge_proto",
-    "//chromeos/ash/components/dbus/seneschal:seneschal_proto",
-    "//chromeos/ash/components/metrics",
-    "//chromeos/ash/services/assistant/public/mojom",
-    "//chromeos/dbus/power:power_manager_proto",
-    "//chromeos/strings",
-    "//components/live_caption:constants",
-    "//components/policy/proto",
-    "//components/reporting/resources:resource_manager",
-    "//components/signin/core/browser",
-    "//components/startup_metric_utils/browser:browser",
-    "//mojo/public/cpp/bindings",
-    "//third_party/private-join-and-compute/src:ec_commutative_cipher",
-    "//third_party/private_membership:private_membership",
-    "//third_party/securemessage/proto",
-    "//ui/accessibility/mojom",
-    "//ui/chromeos/resources",
-    "//ui/chromeos/strings",
-    "//ui/chromeos/styles:cros_styles_views",
-    "//ui/file_manager/base/gn:file_types_data_cpp",
-    "//ui/resources",
-    "//ui/strings",
-  ]
-
-  deps = [
-    ":dlp_policy_event_proto",
-    "../ash/guest_os:guest_os_diagnostics_mojom",
-    "//apps",
-    "//ash",
-    "//ash/components/arc",
-    "//ash/components/arc/enterprise",
-    "//ash/components/arc/input_overlay/resources:resources_grit",
-    "//ash/components/arc/media_session",
-    "//ash/components/arc/mojom",
-    "//ash/constants",
-    "//ash/keyboard/ui",
-    "//ash/public/cpp",
-    "//ash/public/cpp/external_arc",
-    "//ash/public/mojom",
-    "//ash/quick_pair/common",
-    "//ash/quick_pair/feature_status_tracker",
-    "//ash/quick_pair/proto:fastpair_proto",
-    "//ash/webui/camera_app_ui",
-    "//ash/webui/camera_app_ui:document_scanning",
-    "//ash/webui/connectivity_diagnostics",
-    "//ash/webui/demo_mode_app_ui",
-    "//ash/webui/diagnostics_ui",
-    "//ash/webui/eche_app_ui",
-    "//ash/webui/face_ml_app_ui",
-    "//ash/webui/file_manager:file_manager_ui",
-    "//ash/webui/file_manager:file_manager_untrusted_ui",
-    "//ash/webui/file_manager/resources:file_manager_swa_resources_grit",
-    "//ash/webui/file_manager/untrusted_resources:file_manager_untrusted_resources_grit",
-    "//ash/webui/firmware_update_ui",
-    "//ash/webui/guest_os_installer",
-    "//ash/webui/guest_os_installer/mojom",
-    "//ash/webui/help_app_ui",
-    "//ash/webui/media_app_ui",
-    "//ash/webui/media_app_ui:buildflags",
-    "//ash/webui/os_feedback_ui",
-    "//ash/webui/os_feedback_ui/backend",
-    "//ash/webui/os_feedback_ui/mojom",
-    "//ash/webui/personalization_app",
-    "//ash/webui/personalization_app/mojom",
-    "//ash/webui/personalization_app/proto",
-    "//ash/webui/print_management",
-    "//ash/webui/print_management/resources:resources_grit",
-    "//ash/webui/projector_app",
-    "//ash/webui/resources:color_internals_resources_grit",
-    "//ash/webui/resources:connectivity_diagnostics_resources_grit",
-    "//ash/webui/resources:demo_mode_app_resources_grit",
-    "//ash/webui/resources:diagnostics_app_resources_grit",
-    "//ash/webui/resources:eche_bundle_resources_grit",
-    "//ash/webui/resources:face_ml_app_bundle_resources_grit",
-    "//ash/webui/resources:face_ml_app_resources_grit",
-    "//ash/webui/resources:face_ml_app_untrusted_resources_grit",
-    "//ash/webui/resources:files_internals_resources_grit",
-    "//ash/webui/resources:firmware_update_app_resources_grit",
-    "//ash/webui/resources:help_app_resources_grit",
-    "//ash/webui/resources:media_app_bundle_resources_grit",
-    "//ash/webui/resources:media_app_resources_grit",
-    "//ash/webui/resources:os_feedback_resources_grit",
-    "//ash/webui/resources:os_feedback_untrusted_resources_grit",
-    "//ash/webui/resources:personalization_app_resources_grit",
-    "//ash/webui/resources:projector_app_bundle_resources_grit",
-    "//ash/webui/resources:projector_app_trusted_resources_grit",
-    "//ash/webui/resources:projector_app_untrusted_resources_grit",
-    "//ash/webui/resources:scanning_app_resources_grit",
-    "//ash/webui/resources:shimless_rma_resources_grit",
-    "//ash/webui/resources:shortcut_customization_app_resources_grit",
-    "//ash/webui/resources:system_extensions_internals_resources_grit",
-    "//ash/webui/scanning",
-    "//ash/webui/scanning/mojom",
-    "//ash/webui/shimless_rma",
-    "//ash/webui/shimless_rma/backend",
-    "//ash/webui/shortcut_customization_ui",
-    "//base",
-    "//build:branding_buildflags",
-    "//build:chromeos_buildflags",
-    "//build/config/chromebox_for_meetings:buildflags",
-    "//chrome/app:command_ids",
-    "//chrome/app/vector_icons",
-    "//chrome/browser:browser_process",
-    "//chrome/browser:browser_themes",
-    "//chrome/browser:theme_properties",
-    "//chrome/browser/apps/platform_apps",
-    "//chrome/browser/apps/platform_apps/api",
-    "//chrome/browser/ash/arc/input_overlay/db/proto:proto",
-    "//chrome/browser/ash/crosapi",
-    "//chrome/browser/ash/crostini:crostini_installer_types_mojom",
-    "//chrome/browser/ash/fusebox:fusebox_proto",
-    "//chrome/browser/ash/login/oobe_quick_start",
-    "//chrome/browser/ash/nearby:bluetooth_adapter_manager",
-    "//chrome/browser/ash/power/ml/smart_dim",
-    "//chrome/browser/ash/system_web_apps",
-    "//chrome/browser/ash/system_web_apps/types:types",
-    "//chrome/browser/ash/wilco_dtc_supportd:mojo_utils",
-    "//chrome/browser/browsing_data:constants",
-    "//chrome/browser/chromeos/launcher_search:search_util",
-    "//chrome/browser/devtools",
-    "//chrome/browser/extensions",
-    "//chrome/browser/favicon",
-    "//chrome/browser/image_decoder",
-    "//chrome/browser/metrics/structured",
-    "//chrome/browser/nearby_sharing/common",
-    "//chrome/browser/nearby_sharing/logging",
-    "//chrome/browser/policy:onc",
-    "//chrome/browser/policy/messaging_layer/proto:crd_event_proto",
-    "//chrome/browser/profiles",
-    "//chrome/browser/profiles:profile",
-    "//chrome/browser/resource_coordinator:tab_metrics_event_proto",
-    "//chrome/browser/resources/chromeos:app_icon_resources",
-    "//chrome/browser/resources/chromeos/cloud_upload:resources_grit",
-    "//chrome/browser/resources/settings:resources_grit",
-    "//chrome/browser/ui/ash/system_web_apps",
-    "//chrome/browser/ui/webui/ash/crostini_upgrader:mojo_bindings",
-    "//chrome/browser/ui/webui/bluetooth_internals:mojo_bindings",
-    "//chrome/browser/ui/webui/settings/chromeos/constants:mojom",
-    "//chrome/browser/web_applications",
-    "//chrome/browser/web_applications/extensions:extensions",
-    "//chrome/browser/webshare:storage",
-    "//chrome/common",
-    "//chrome/common/extensions/api",
-    "//chrome/services/file_util/public/cpp",
-    "//chrome/services/keymaster/public/mojom",
-    "//chrome/services/media_gallery_util/public/cpp",
-    "//chrome/services/media_gallery_util/public/mojom",
-    "//chrome/services/printing/public/mojom",
-    "//chrome/services/wilco_dtc_supportd/public/mojom",
-    "//chromeos:chromeos_export",
-    "//chromeos/ash/components/account_manager",
-    "//chromeos/ash/components/assistant:buildflags",
-    "//chromeos/ash/components/attestation",
-    "//chromeos/ash/components/audio",
-    "//chromeos/ash/components/browser_context_helper",
-    "//chromeos/ash/components/cryptohome",
-    "//chromeos/ash/components/dbus",
-    "//chromeos/ash/components/dbus:metrics_event_proto",
-    "//chromeos/ash/components/dbus:plugin_vm_service_proto",
-    "//chromeos/ash/components/dbus/anomaly_detector",
-    "//chromeos/ash/components/dbus/attestation",
-    "//chromeos/ash/components/dbus/attestation:attestation_proto",
-    "//chromeos/ash/components/dbus/audio",
-    "//chromeos/ash/components/dbus/authpolicy",
-    "//chromeos/ash/components/dbus/authpolicy:authpolicy_proto",
-    "//chromeos/ash/components/dbus/biod",
-    "//chromeos/ash/components/dbus/cdm_factory_daemon",
-    "//chromeos/ash/components/dbus/chunneld",
-    "//chromeos/ash/components/dbus/cicerone",
-    "//chromeos/ash/components/dbus/concierge",
-    "//chromeos/ash/components/dbus/constants",
-    "//chromeos/ash/components/dbus/cros_disks",
-    "//chromeos/ash/components/dbus/cros_healthd",
-    "//chromeos/ash/components/dbus/cryptohome",
-    "//chromeos/ash/components/dbus/cryptohome:attestation_proto",
-    "//chromeos/ash/components/dbus/cryptohome:cryptohome_proto",
-    "//chromeos/ash/components/dbus/cups_proxy",
-    "//chromeos/ash/components/dbus/debug_daemon",
-    "//chromeos/ash/components/dbus/dlcservice",
-    "//chromeos/ash/components/dbus/dlcservice:dlcservice_proto",
-    "//chromeos/ash/components/dbus/easy_unlock",
-    "//chromeos/ash/components/dbus/federated",
-    "//chromeos/ash/components/dbus/fwupd",
-    "//chromeos/ash/components/dbus/gnubby",
-    "//chromeos/ash/components/dbus/hermes",
-    "//chromeos/ash/components/dbus/human_presence",
-    "//chromeos/ash/components/dbus/image_loader",
-    "//chromeos/ash/components/dbus/kerberos",
-    "//chromeos/ash/components/dbus/kerberos:kerberos_proto",
-    "//chromeos/ash/components/dbus/lorgnette_manager",
-    "//chromeos/ash/components/dbus/lorgnette_manager:lorgnette_proto",
-    "//chromeos/ash/components/dbus/media_analytics",
-    "//chromeos/ash/components/dbus/media_analytics:media_perception_proto",
-    "//chromeos/ash/components/dbus/oobe_config",
-    "//chromeos/ash/components/dbus/oobe_config:proto",
-    "//chromeos/ash/components/dbus/os_install",
-    "//chromeos/ash/components/dbus/patchpanel",
-    "//chromeos/ash/components/dbus/patchpanel:patchpanel_proto",
-    "//chromeos/ash/components/dbus/pciguard",
-    "//chromeos/ash/components/dbus/resourced",
-    "//chromeos/ash/components/dbus/rgbkbd",
-    "//chromeos/ash/components/dbus/rmad",
-    "//chromeos/ash/components/dbus/seneschal",
-    "//chromeos/ash/components/dbus/services",
-    "//chromeos/ash/components/dbus/session_manager",
-    "//chromeos/ash/components/dbus/session_manager:login_manager_proto",
-    "//chromeos/ash/components/dbus/shill",
-    "//chromeos/ash/components/dbus/smbprovider",
-    "//chromeos/ash/components/dbus/spaced",
-    "//chromeos/ash/components/dbus/system_clock",
-    "//chromeos/ash/components/dbus/system_proxy",
-    "//chromeos/ash/components/dbus/system_proxy:system_proxy_proto",
-    "//chromeos/ash/components/dbus/typecd",
-    "//chromeos/ash/components/dbus/update_engine",
-    "//chromeos/ash/components/dbus/update_engine:proto",
-    "//chromeos/ash/components/dbus/upstart",
-    "//chromeos/ash/components/dbus/userdataauth",
-    "//chromeos/ash/components/dbus/userdataauth:userdataauth_proto",
-    "//chromeos/ash/components/dbus/virtual_file_provider",
-    "//chromeos/ash/components/dbus/vm_plugin_dispatcher",
-    "//chromeos/ash/components/dbus/vm_plugin_dispatcher:proto",
-    "//chromeos/ash/components/device_activity",
-    "//chromeos/ash/components/disks",
-    "//chromeos/ash/components/drivefs",
-    "//chromeos/ash/components/drivefs/mojom",
-    "//chromeos/ash/components/enhanced_network_tts/mojom",
-    "//chromeos/ash/components/feature_usage",
-    "//chromeos/ash/components/fwupd",
-    "//chromeos/ash/components/geolocation",
-    "//chromeos/ash/components/hibernate:buildflags",
-    "//chromeos/ash/components/hid_detection",
-    "//chromeos/ash/components/install_attributes",
-    "//chromeos/ash/components/language/language_packs",
-    "//chromeos/ash/components/language/public/mojom",
-    "//chromeos/ash/components/local_search_service/public/cpp",
-    "//chromeos/ash/components/login/auth",
-    "//chromeos/ash/components/login/integrity",
-    "//chromeos/ash/components/login/login_state",
-    "//chromeos/ash/components/login/session",
-    "//chromeos/ash/components/memory",
-    "//chromeos/ash/components/multidevice",
-    "//chromeos/ash/components/multidevice:stub_multidevice_util",
-    "//chromeos/ash/components/multidevice/logging",
-    "//chromeos/ash/components/network",
-    "//chromeos/ash/components/network/portal_detector",
-    "//chromeos/ash/components/peripheral_notification",
-    "//chromeos/ash/components/phonehub",
-    "//chromeos/ash/components/phonehub/proto",
-    "//chromeos/ash/components/policy",
-    "//chromeos/ash/components/power",
-    "//chromeos/ash/components/proximity_auth",
-    "//chromeos/ash/components/scanning",
-    "//chromeos/ash/components/settings",
-    "//chromeos/ash/components/smbfs",
-    "//chromeos/ash/components/smbfs/mojom",
-    "//chromeos/ash/components/string_matching",
-    "//chromeos/ash/components/sync_wifi",
-    "//chromeos/ash/components/system",
-    "//chromeos/ash/components/tether",
-    "//chromeos/ash/components/timezone",
-    "//chromeos/ash/components/tpm",
-    "//chromeos/ash/components/tpm:buildflags",
-    "//chromeos/ash/services/assistant:lib",
-    "//chromeos/ash/services/assistant/public/cpp",
-    "//chromeos/ash/services/bluetooth_config:in_process_bluetooth_config",
-    "//chromeos/ash/services/cros_healthd/private/cpp",
-    "//chromeos/ash/services/cros_healthd/public/cpp",
-    "//chromeos/ash/services/cros_healthd/public/mojom",
-    "//chromeos/ash/services/device_sync",
-    "//chromeos/ash/services/device_sync:stub_device_sync",
-    "//chromeos/ash/services/device_sync/public/cpp",
-    "//chromeos/ash/services/ime:constants",
-    "//chromeos/ash/services/ime/public/cpp:structs",
-    "//chromeos/ash/services/ime/public/mojom",
-    "//chromeos/ash/services/multidevice_setup",
-    "//chromeos/ash/services/multidevice_setup/public/cpp",
-    "//chromeos/ash/services/multidevice_setup/public/cpp:android_sms_app_helper_delegate",
-    "//chromeos/ash/services/multidevice_setup/public/cpp:android_sms_pairing_state_tracker",
-    "//chromeos/ash/services/multidevice_setup/public/cpp:auth_token_validator",
-    "//chromeos/ash/services/multidevice_setup/public/cpp:oobe_completion_tracker",
-    "//chromeos/ash/services/multidevice_setup/public/cpp:prefs",
-    "//chromeos/ash/services/nearby/public/cpp",
-    "//chromeos/ash/services/nearby/public/mojom",
-    "//chromeos/ash/services/quick_pair/public/mojom",
-    "//chromeos/ash/services/rollback_network_config/public/mojom",
-    "//chromeos/ash/services/secure_channel",
-    "//chromeos/ash/services/secure_channel/public/cpp/client",
-    "//chromeos/ash/services/secure_channel/public/mojom",
-    "//chromeos/components/cdm_factory_daemon:cdm_factory_daemon_browser",
-    "//chromeos/components/certificate_provider:certificate_provider",
-    "//chromeos/components/disks:prefs",
-    "//chromeos/components/mojo_bootstrap",
-    "//chromeos/components/onc",
-    "//chromeos/components/print_management/mojom",
-    "//chromeos/components/quick_answers",
-    "//chromeos/components/quick_answers/public/cpp:cpp",
-    "//chromeos/components/quick_answers/public/cpp:prefs",
-    "//chromeos/components/remote_apps/mojom",
-    "//chromeos/components/sensors",
-    "//chromeos/components/sensors:buildflags",
-    "//chromeos/components/sensors/mojom",
-    "//chromeos/components/sharesheet:constants",
-    "//chromeos/crosapi/cpp",
-    "//chromeos/crosapi/mojom",
-    "//chromeos/dbus/constants",
-    "//chromeos/dbus/dlp",
-    "//chromeos/dbus/dlp:dlp_proto",
-    "//chromeos/dbus/ip_peripheral",
-    "//chromeos/dbus/machine_learning",
-    "//chromeos/dbus/missive",
-    "//chromeos/dbus/permission_broker",
-    "//chromeos/dbus/power",
-    "//chromeos/dbus/tpm_manager",
-    "//chromeos/dbus/tpm_manager:tpm_manager_proto",
-    "//chromeos/dbus/u2f",
-    "//chromeos/dbus/u2f:u2f_proto",
-    "//chromeos/ime:gencode",
-    "//chromeos/printing",
-    "//chromeos/services/machine_learning/public/cpp",
-    "//chromeos/services/machine_learning/public/mojom",
-    "//chromeos/services/network_config:in_process_instance",
-    "//chromeos/services/network_config/public/cpp:cpp",
-    "//chromeos/services/network_health/public/mojom",
-    "//chromeos/startup:constants",
-    "//chromeos/ui/base",
-    "//chromeos/ui/frame",
-    "//chromeos/ui/wm",
-    "//chromeos/utils",
-    "//chromeos/version",
-    "//components/app_constants",
-    "//components/app_restore",
-    "//components/arc",
-    "//components/arc/common",
-    "//components/arc/common:arc_intent_helper_constants",
-    "//components/autofill/core/browser",
-    "//components/browser_sync",
-    "//components/captive_portal/core",
-    "//components/component_updater:crl_set_remover",
-    "//components/consent_auditor:consent_auditor",
-    "//components/constrained_window",
-    "//components/content_settings/core/browser",
-    "//components/country_codes",
-    "//components/crash/core/app",
-    "//components/crx_file",
-    "//components/device_event_log",
-    "//components/download/content/public",
-    "//components/drive",
-    "//components/drive:drive_chromeos",
-    "//components/embedder_support:browser_util",
-    "//components/enterprise",
-    "//components/exo",
-    "//components/exo/server",
-    "//components/favicon/core",
-    "//components/feedback",
-    "//components/feedback/content",
-    "//components/flags_ui",
-    "//components/gcm_driver",
-    "//components/google/core/common",
-    "//components/guest_os",
-    "//components/guest_os:prefs",
-    "//components/guest_view/browser",
-    "//components/image_fetcher/core",
-    "//components/invalidation/impl",
-    "//components/keep_alive_registry",
-    "//components/keyed_service/content",
-    "//components/keyed_service/core",
-    "//components/language/core/browser",
-    "//components/language/core/common",
-    "//components/login",
-    "//components/metrics:serialization",
-    "//components/metrics/structured:neutrino_logging",
-    "//components/metrics/structured:neutrino_logging_util",
-    "//components/omnibox/browser",
-    "//components/onc",
-    "//components/ownership",
-    "//components/password_manager/core/browser",
-    "//components/password_manager/core/browser:hash_password_manager",
-    "//components/performance_manager",
-    "//components/permissions",
-    "//components/policy:generated",
-    "//components/policy/core/browser",
-    "//components/policy/core/common",
-    "//components/policy/core/common:common_constants",
-    "//components/pref_registry",
-    "//components/prefs",
-    "//components/printing/browser",
-    "//components/printing/common:mojo_interfaces",
-    "//components/proxy_config",
-    "//components/quirks",
-    "//components/renderer_context_menu",
-    "//components/reporting/client:report_queue",
-    "//components/reporting/client:report_queue_configuration",
-    "//components/reporting/client:report_queue_factory",
-    "//components/reporting/client:report_queue_provider",
-    "//components/reporting/metrics:metrics_data_collection",
-    "//components/reporting/proto:interface_proto",
-    "//components/reporting/proto:metric_data_proto",
-    "//components/reporting/proto:record_constants",
-    "//components/reporting/proto:status_proto",
-    "//components/reporting/storage:storage_module",
-    "//components/reporting/storage_selector",
-    "//components/reporting/util:backoff_settings",
-    "//components/reporting/util:status",
-    "//components/reporting/util:task_runner_context",
-    "//components/rlz",
-    "//components/safe_browsing/core/browser/db:metadata_proto",
-    "//components/safe_browsing/core/common/proto:csd_proto",
-    "//components/services/app_service:lib",
-    "//components/services/app_service/public/cpp:app_types",
-    "//components/services/app_service/public/cpp:app_update",
-    "//components/services/app_service/public/cpp:icon_types",
-    "//components/services/app_service/public/cpp:instance_update",
-    "//components/services/app_service/public/cpp:intents",
-    "//components/services/app_service/public/cpp:types",
-    "//components/services/unzip/content:content",
-    "//components/services/unzip/public/cpp:cpp",
-    "//components/session_manager/core",
-    "//components/signin/public/identity_manager",
-    "//components/signin/public/webdata",
-    "//components/soda",
-    "//components/soda:constants",
-    "//components/spellcheck/browser:browser",
-    "//components/spellcheck/common:spellcheck_result",
-    "//components/storage_monitor",
-    "//components/strings",
-    "//components/supervised_user/core/common",
-    "//components/sync",
-    "//components/sync_device_info",
-    "//components/sync_preferences",
-    "//components/sync_sessions",
-    "//components/tracing:startup_tracing",
-    "//components/translate/core/browser",
-    "//components/ukm",
-    "//components/ukm/content",
-    "//components/unified_consent",
-    "//components/update_client:update_client",
-    "//components/user_manager",
-    "//components/user_prefs:user_prefs",
-    "//components/vector_icons",
-    "//components/webapps/browser",
-    "//extensions/browser/api:api_implementations",
-    "//extensions/browser/updater",
-    "//media/capture/video/chromeos/public:public",
-    "//remoting/host/chromeos:features",
-
-    # This depends directly on the variations target, rather than just
-    # transitively via the common target because the proto sources need to
-    # be generated before code in this target can start building.
-    "//components/variations",
-    "//components/viz/host",
-    "//components/web_modal",
-    "//components/web_resource",
-    "//components/webdata/common",
-    "//components/zoom",
-    "//content/public/browser",
-    "//content/public/common",
-    "//crypto",
-    "//dbus",
-    "//device/bluetooth",
-    "//extensions/browser",
-    "//extensions/browser/kiosk",
-    "//extensions/common",
-    "//extensions/common:mojom",
-    "//google_apis/common",
-    "//google_apis/drive",
-    "//gpu",
-    "//gpu/ipc/host",
-    "//gpu/ipc/service",
-    "//media",
-    "//media/capture:capture_lib",
-    "//media/capture:capture_switches",
-    "//media/mojo/mojom",
-    "//mojo/public/cpp/platform",
-    "//mojo/public/cpp/system",
-    "//net",
-
-    # TODO: care about enable_printing and enable_print_preview.
-    "//printing",
-    "//printing/backend",
-    "//printing/mojom",
-    "//remoting/host/chromeos:host_event_reporter_impl",
-    "//remoting/host/chromeos:remoting_service",
-    "//remoting/protocol",
-    "//remoting/protocol:errors",
-    "//services/audio/public/cpp",
-    "//services/data_decoder/public/cpp",
-    "//services/device/public/cpp/usb",
-    "//services/device/public/mojom",
-    "//services/device/public/mojom:usb",
-    "//services/metrics/public/cpp:ukm_builders",
-    "//services/preferences/public/mojom",
-    "//services/resource_coordinator/public/cpp:resource_coordinator_cpp",
-    "//services/service_manager/public/cpp",
-    "//skia",
-    "//storage/browser",
-    "//storage/common",
-    "//third_party/blink/public/common",
-    "//third_party/boringssl",
-    "//third_party/ced",
-    "//third_party/icu",
-    "//third_party/libaddressinput",
-    "//third_party/libipp",
-    "//third_party/metrics_proto",
-    "//third_party/protobuf:protobuf_lite",
-    "//third_party/protobuf:protoc($host_toolchain)",
-    "//third_party/re2",
-    "//third_party/zlib",
-    "//third_party/zlib/google:compression_utils",
-    "//ui/accessibility",
-    "//ui/aura",
-    "//ui/base",
-    "//ui/base:features",
-    "//ui/base/idle",
-    "//ui/base/ime/ash",
-    "//ui/chromeos",
-    "//ui/chromeos/events",
-    "//ui/compositor",
-    "//ui/content_accelerators",
-    "//ui/display",
-    "//ui/display/manager",
-    "//ui/events:dom_keycode_converter",
-    "//ui/events/blink",
-    "//ui/events/devices",
-    "//ui/events/platform",
-    "//ui/file_manager",
-    "//ui/gfx:gfx",
-    "//ui/gfx:gfx_switches",
-    "//ui/message_center",
-    "//ui/message_center/public/cpp",
-    "//ui/ozone",
-    "//ui/shell_dialogs",
-    "//ui/snapshot",
-    "//ui/views",
-    "//ui/views/controls/webview",
-    "//ui/web_dialogs",
-    "//ui/webui",
-    "//ui/wm",
-    "//ui/wm/public",
-    "//url",
-  ]
-
-  data_deps = [ ":dbus_service_files" ]
-
-  allow_circular_includes_from = [
-    "//chrome/browser/apps/platform_apps/api",
-    "//chrome/browser/ash/crosapi",
-    "//chrome/browser/extensions",
-    "//chrome/browser/web_applications",
-    "//chrome/browser/ash/system_web_apps",
-    "//chrome/browser/ui/ash/system_web_apps",
-    "//chrome/browser/policy:onc",
-  ]
-
   sources = [
     "app_mode/app_session.cc",
     "app_mode/app_session.h",
@@ -620,10 +40,43 @@
     "app_mode/startup_app_launcher_update_checker.h",
     "app_mode/web_kiosk_browser_controller_base.cc",
     "app_mode/web_kiosk_browser_controller_base.h",
+    "arc/arc_external_protocol_dialog.cc",
+    "arc/arc_external_protocol_dialog.h",
+    "arc/arc_web_contents_data.cc",
+    "arc/arc_web_contents_data.h",
+    "arc/open_with_menu.cc",
+    "arc/open_with_menu.h",
+    "arc/start_smart_selection_action_menu.cc",
+    "arc/start_smart_selection_action_menu.h",
+    "extensions/contact_center_insights/contact_center_insights_extension_manager.cc",
+    "extensions/contact_center_insights/contact_center_insights_extension_manager.h",
     "extensions/device_local_account_external_policy_loader.cc",
     "extensions/device_local_account_external_policy_loader.h",
+    "extensions/file_system_provider/service_worker_lifetime_manager.cc",
+    "extensions/file_system_provider/service_worker_lifetime_manager.h",
     "extensions/info_private_api.cc",
     "extensions/info_private_api.h",
+    "extensions/login_screen/login/cleanup/browser_cleanup_handler.cc",
+    "extensions/login_screen/login/cleanup/browser_cleanup_handler.h",
+    "extensions/login_screen/login/cleanup/cleanup_handler.h",
+    "extensions/login_screen/login/cleanup/cleanup_manager.cc",
+    "extensions/login_screen/login/cleanup/cleanup_manager.h",
+    "extensions/login_screen/login/cleanup/extension_cleanup_handler.cc",
+    "extensions/login_screen/login/cleanup/extension_cleanup_handler.h",
+    "extensions/login_screen/login/external_logout_request/external_logout_request_event_handler.cc",
+    "extensions/login_screen/login/external_logout_request/external_logout_request_event_handler.h",
+    "extensions/login_screen/login/external_logout_request/external_logout_request_event_handler_factory.cc",
+    "extensions/login_screen/login/external_logout_request/external_logout_request_event_handler_factory.h",
+    "extensions/login_screen/login/login_api.cc",
+    "extensions/login_screen/login/login_api.h",
+    "extensions/login_screen/login/login_api_prefs.cc",
+    "extensions/login_screen/login/login_api_prefs.h",
+    "extensions/login_screen/login_screen_storage/login_screen_storage_api.cc",
+    "extensions/login_screen/login_screen_storage/login_screen_storage_api.h",
+    "extensions/login_screen/login_state/login_state_api.cc",
+    "extensions/login_screen/login_state/login_state_api.h",
+    "extensions/login_screen/login_state/session_state_changed_event_dispatcher.cc",
+    "extensions/login_screen/login_state/session_state_changed_event_dispatcher.h",
     "policy/dlp/clipboard_bubble.cc",
     "policy/dlp/clipboard_bubble.h",
     "policy/dlp/data_transfer_dlp_controller.cc",
@@ -670,6 +123,23 @@
     "policy/dlp/dlp_warn_dialog.h",
     "policy/dlp/dlp_warn_notifier.cc",
     "policy/dlp/dlp_warn_notifier.h",
+    "reporting/metric_default_utils.cc",
+    "reporting/metric_default_utils.h",
+    "reporting/metric_reporting_manager_delegate_base.cc",
+    "reporting/metric_reporting_manager_delegate_base.h",
+    "reporting/network/network_bandwidth_sampler.cc",
+    "reporting/network/network_bandwidth_sampler.h",
+    "tablet_mode/chrome_content_browser_client_tablet_mode_part.cc",
+    "tablet_mode/chrome_content_browser_client_tablet_mode_part.h",
+    "tablet_mode/tablet_mode_page_behavior.cc",
+    "tablet_mode/tablet_mode_page_behavior.h",
+    "video_conference/video_conference_app_permissions.h",
+    "video_conference/video_conference_manager_client.cc",
+    "video_conference/video_conference_manager_client.h",
+    "video_conference/video_conference_media_listener.cc",
+    "video_conference/video_conference_media_listener.h",
+    "video_conference/video_conference_web_app.cc",
+    "video_conference/video_conference_web_app.h",
 
     # Extension API implementations.
     "extensions/desk_api/desk_api_extension_manager.cc",
@@ -680,43 +150,106 @@
     "extensions/file_system_provider/file_system_provider_api.h",
     "extensions/file_system_provider/provider_function.cc",
     "extensions/file_system_provider/provider_function.h",
-    "extensions/file_system_provider/service_worker_lifetime_manager.cc",
-    "extensions/file_system_provider/service_worker_lifetime_manager.h",
-    "extensions/login_screen/login/cleanup/cleanup_manager_ash.cc",
-    "extensions/login_screen/login/cleanup/cleanup_manager_ash.h",
-    "extensions/login_screen/login/cleanup/clipboard_cleanup_handler.cc",
-    "extensions/login_screen/login/cleanup/clipboard_cleanup_handler.h",
-    "extensions/login_screen/login/cleanup/files_cleanup_handler.cc",
-    "extensions/login_screen/login/cleanup/files_cleanup_handler.h",
-    "extensions/login_screen/login/cleanup/lacros_cleanup_handler.cc",
-    "extensions/login_screen/login/cleanup/lacros_cleanup_handler.h",
-    "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler.cc",
-    "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler.h",
     "extensions/login_screen/login/errors.cc",
     "extensions/login_screen/login/errors.h",
-    "extensions/login_screen/login/external_logout_done/external_logout_done_event_handler.cc",
-    "extensions/login_screen/login/external_logout_done/external_logout_done_event_handler.h",
-    "extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.cc",
-    "extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.h",
-    "extensions/login_screen/login/login_api_lock_handler.cc",
-    "extensions/login_screen/login/login_api_lock_handler.h",
-    "extensions/login_screen/login/shared_session_handler.cc",
-    "extensions/login_screen/login/shared_session_handler.h",
     "extensions/wallpaper_api.cc",
     "extensions/wallpaper_api.h",
   ]
-
-  defines = []
-  if (use_cras) {
-    defines += [ "USE_CRAS" ]
-  }
-
-  if (use_libfuzzer) {
-    deps += [
-      "//components/exo/wayland:ui_controls_protocol_stub",
-      "//components/exo/wayland:weston_test_stub",
-    ]
-  }
+  allow_circular_includes_from = [ "//chrome/browser/extensions" ]
+  public_deps = [
+    ":dlp_policy_event_proto",
+    "//base",
+    "//build:chromeos_buildflags",
+    "//chrome/browser/extensions",
+    "//chrome/browser/image_decoder",
+    "//chrome/browser/profiles:profile",
+    "//chrome/browser/web_applications",
+    "//chrome/common/extensions/api",
+    "//chromeos/crosapi/mojom",
+    "//chromeos/dbus/dlp:dlp_proto",
+    "//chromeos/dbus/power",
+    "//components/account_id",
+    "//components/arc/common",
+    "//components/file_access",
+    "//components/keyed_service/content",
+    "//components/keyed_service/core",
+    "//components/prefs",
+    "//components/renderer_context_menu",
+    "//components/reporting/client:report_queue",
+    "//components/reporting/client:report_queue_configuration",
+    "//components/reporting/metrics:metrics_data_collection",
+    "//components/reporting/util:status",
+    "//components/services/app_service/public/cpp:app_types",
+    "//components/services/app_service/public/cpp:app_update",
+    "//components/url_matcher",
+    "//content/public/browser",
+    "//extensions/browser",
+    "//extensions/common",
+    "//mojo/public/cpp/bindings",
+    "//ppapi/buildflags",
+    "//services/network/public/cpp",
+    "//storage/browser",
+    "//third_party/abseil-cpp:absl",
+    "//ui/base",
+    "//ui/base/clipboard",
+    "//ui/base/data_transfer_policy",
+    "//ui/base/metadata",
+    "//ui/display",
+    "//ui/gfx",
+    "//ui/gfx/geometry",
+    "//ui/views",
+    "//url",
+  ]
+  deps = [
+    "//chrome/app:command_ids",
+    "//chrome/app:generated_resources",
+    "//chrome/app/vector_icons",
+    "//chrome/browser:browser_process",
+    "//chrome/browser:resources",
+    "//chrome/browser/browsing_data:constants",
+    "//chrome/browser/favicon",
+    "//chrome/browser/resources:component_extension_resources",
+    "//chrome/common",
+    "//chrome/common:chrome_features",
+    "//chrome/common:constants",
+    "//chrome/common:non_code_constants",
+    "//chromeos/dbus/dlp",
+    "//chromeos/ui/base",
+    "//components/app_constants",
+    "//components/arc/common:arc_intent_helper_constants",
+    "//components/policy/core/common:common_constants",
+    "//components/pref_registry",
+    "//components/reporting/client:report_queue_factory",
+    "//components/reporting/proto:metric_data_proto",
+    "//components/services/app_service/public/cpp:intents",
+    "//components/strings:components_strings",
+    "//components/sync/protocol",
+    "//components/sync_device_info",
+    "//components/vector_icons",
+    "//content/public/common",
+    "//extensions/browser/updater",
+    "//extensions/common:common_constants",
+    "//extensions/common:mojom",
+    "//net",
+    "//services/data_decoder/public/cpp",
+    "//services/network/public/cpp:cpp_base",
+    "//services/network/public/mojom",
+    "//services/network/public/mojom:url_loader_base",
+    "//skia",
+    "//third_party/blink/public/common:headers",
+    "//third_party/blink/public/mojom/service_worker:storage",
+    "//ui/base:types",
+    "//ui/base:ui_data_pack",
+    "//ui/base/ime",
+    "//ui/chromeos/strings",
+    "//ui/chromeos/styles:cros_styles_views",
+    "//ui/color:color_headers",
+    "//ui/compositor",
+    "//ui/events:event_constants",
+    "//ui/gfx/codec",
+    "//ui/message_center/public/cpp",
+    "//ui/native_theme",
+  ]
 
   if (enable_plugins) {
     sources += [
@@ -725,108 +258,114 @@
       "app_mode/kiosk_session_plugin_handler_delegate.h",
     ]
   }
-}
 
-action("dbus_service_files") {
-  sources = [
-    "../ash/dbus/org.chromium.ChromeFeaturesService.conf",
-    "../ash/dbus/org.chromium.ComponentUpdaterService.conf",
-    "../ash/dbus/org.chromium.CryptohomeKeyDelegate.conf",
-    "../ash/dbus/org.chromium.DlpFilesPolicyService.conf",
-    "../ash/dbus/org.chromium.DriveFileStreamService.conf",
-    "../ash/dbus/org.chromium.EncryptedReportingUploadService.conf",
-    "../ash/dbus/org.chromium.FuseBoxService.conf",
-    "../ash/dbus/org.chromium.KioskAppService.conf",
-    "../ash/dbus/org.chromium.LibvdaService.conf",
-    "../ash/dbus/org.chromium.LockToSingleUser.conf",
-    "../ash/dbus/org.chromium.MachineLearningDecisionService.conf",
-    "../ash/dbus/org.chromium.MetricsEventService.conf",
-    "../ash/dbus/org.chromium.MojoConnectionService.conf",
-    "../ash/dbus/org.chromium.NetworkProxyService.conf",
-    "../ash/dbus/org.chromium.PrintersService.conf",
-    "../ash/dbus/org.chromium.ProfilerStatusService.conf",
-    "../ash/dbus/org.chromium.ScreenLockService.conf",
-    "../ash/dbus/org.chromium.SmbFsService.conf",
-    "../ash/dbus/org.chromium.VirtualFileRequestService.conf",
-    "../ash/dbus/vm/org.chromium.PluginVmService.conf",
-    "../ash/dbus/vm/org.chromium.VmApplicationsService.conf",
-    "../ash/dbus/vm/org.chromium.VmDiskManagementService.conf",
-    "../ash/dbus/vm/org.chromium.VmLaunchService.conf",
-    "../ash/dbus/vm/org.chromium.VmPermissionService.conf",
-    "../ash/dbus/vm/org.chromium.VmSKForwardingService.conf",
-  ]
-  output_conf_file = "$root_out_dir/dbus/chrome_dbus_services.conf"
-  outputs = [ output_conf_file ]
+  if (is_chromeos_ash) {
+    sources += [
+      "extensions/login_screen/login/cleanup/cleanup_manager_ash.cc",
+      "extensions/login_screen/login/cleanup/cleanup_manager_ash.h",
+      "extensions/login_screen/login/cleanup/clipboard_cleanup_handler.cc",
+      "extensions/login_screen/login/cleanup/clipboard_cleanup_handler.h",
+      "extensions/login_screen/login/cleanup/files_cleanup_handler.cc",
+      "extensions/login_screen/login/cleanup/files_cleanup_handler.h",
+      "extensions/login_screen/login/cleanup/lacros_cleanup_handler.cc",
+      "extensions/login_screen/login/cleanup/lacros_cleanup_handler.h",
+      "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler.cc",
+      "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler.h",
+      "extensions/login_screen/login/external_logout_done/external_logout_done_event_handler.cc",
+      "extensions/login_screen/login/external_logout_done/external_logout_done_event_handler.h",
+      "extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.cc",
+      "extensions/login_screen/login/external_logout_done/external_logout_done_event_handler_factory.h",
+      "extensions/login_screen/login/login_api_lock_handler.cc",
+      "extensions/login_screen/login/login_api_lock_handler.h",
+      "extensions/login_screen/login/shared_session_handler.cc",
+      "extensions/login_screen/login/shared_session_handler.h",
+    ]
+    allow_circular_includes_from += [ "//chrome/browser/ash/crosapi" ]
+    public_deps += [
+      "//ash/constants",
+      "//chrome/browser/ash/crosapi",
+      "//components/services/app_service/public/cpp:instance_update",
+    ]
+    deps += [
+      "//ash",
+      "//ash/components/arc:arc_metrics_constants",
+      "//ash/public/cpp",
+      "//ash/webui/file_manager:constants",
+      "//ash/webui/file_manager:file_manager_ui",
+      "//ash/webui/file_manager:file_manager_untrusted_ui",
+      "//chrome/browser/ash/video_conference",
+      "//chromeos/ash/components/login/auth/public:authpublic",
+      "//chromeos/ash/components/settings",
+      "//components/session_manager:base",
+      "//components/session_manager/core",
+      "//components/user_manager",
+      "//crypto",
+      "//third_party/boringssl",
+      "//ui/aura",
+    ]
+  }
 
-  script = "//chromeos/tools/concat_dbus_conf_files.py"
-  args = [ rebase_path(output_conf_file, root_build_dir) ]
-  args += rebase_path(sources, root_build_dir)
+  if (is_chromeos_lacros) {
+    sources += [
+      "extensions/login_screen/login/cleanup/cleanup_manager_lacros.cc",
+      "extensions/login_screen/login/cleanup/cleanup_manager_lacros.h",
+      "extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.cc",
+      "extensions/login_screen/login/cleanup/cleanup_manager_lacros_factory.h",
+      "policy/dlp/dlp_browser_helper_lacros.cc",
+      "policy/dlp/dlp_browser_helper_lacros.h",
+      "policy/dlp/dlp_content_manager_lacros.cc",
+      "policy/dlp/dlp_content_manager_lacros.h",
+      "reporting/device_reporting_settings_lacros.cc",
+      "reporting/device_reporting_settings_lacros.h",
+      "reporting/metric_reporting_manager_lacros.cc",
+      "reporting/metric_reporting_manager_lacros.h",
+    ]
+    public_deps += [
+      "//chromeos/lacros",
+      "//ui/aura",
+    ]
+    deps += [
+      "//chromeos/startup",
+      "//components/keyed_service/content",
+      "//components/policy:generated",
+      "//ui/platform_window",
+    ]
+  }
+
+  if (use_cups) {
+    sources += [
+      "printing/cups_wrapper.cc",
+      "printing/cups_wrapper.h",
+      "printing/cups_wrapper_impl.cc",
+      "printing/printer_error_codes.cc",
+      "printing/printer_error_codes.h",
+    ]
+    public_deps += [ "//printing/backend" ]
+    deps += [
+      "//chromeos/components/print_management/mojom",
+      "//printing:printing_base",
+    ]
+  }
 }
 
 static_library("test_support") {
   testonly = true
-
   sources = [
     "policy/dlp/dlp_content_manager_test_helper.cc",
     "policy/dlp/dlp_content_manager_test_helper.h",
     "policy/dlp/mock_dlp_content_manager.cc",
     "policy/dlp/mock_dlp_content_manager.h",
   ]
-
-  deps = [
+  public_deps = [
     ":chromeos",
-    "//ash/constants",
-    "//ash/webui/personalization_app/mojom",
-    "//chrome/browser:browser_process",
-    "//chrome/browser/ash/system_web_apps",
-    "//chrome/browser/web_applications",
-    "//chrome/common:constants",
-    "//chrome/test:test_support",
-    "//chrome/test:test_support_ui",
-    "//chromeos/ash/components/attestation:test_support",
-    "//chromeos/ash/components/cryptohome",
-    "//chromeos/ash/components/dbus:test_support",
-    "//chromeos/ash/components/dbus/chunneld",
-    "//chromeos/ash/components/dbus/cicerone",
-    "//chromeos/ash/components/dbus/concierge",
-    "//chromeos/ash/components/dbus/cros_disks",
-    "//chromeos/ash/components/dbus/cryptohome",
-    "//chromeos/ash/components/dbus/cryptohome:cryptohome_proto",
-    "//chromeos/ash/components/dbus/dlcservice",
-    "//chromeos/ash/components/dbus/lorgnette_manager",
-    "//chromeos/ash/components/dbus/lorgnette_manager:lorgnette_proto",
-    "//chromeos/ash/components/dbus/seneschal",
-    "//chromeos/ash/components/dbus/session_manager",
-    "//chromeos/ash/components/dbus/userdataauth:userdataauth",
-    "//chromeos/ash/components/dbus/userdataauth:userdataauth_proto",
-    "//chromeos/ash/components/drivefs",
-    "//chromeos/ash/components/drivefs:test_support",
-    "//chromeos/ash/components/login/auth",
-    "//chromeos/ash/components/settings",
-    "//chromeos/ash/components/system",
-    "//chromeos/ash/services/ime:test_support",
-    "//chromeos/ash/services/multidevice_setup/public/cpp:test_support",
-    "//chromeos/printing",
-    "//components/crx_file",
-    "//components/drive",
-    "//components/exo",
-    "//components/policy/core/browser",
-    "//components/policy/core/common:test_support",
-    "//components/policy/proto",
-    "//components/policy/test_support",
-    "//components/reporting/client:test_support",
-    "//components/session_manager/core",
-    "//google_apis",
-    "//google_apis:test_support",
-    "//google_apis/common",
-    "//google_apis/common:test_support",
-    "//net",
-    "//net:test_support",
-    "//skia",
+    "//base",
+    "//build:chromeos_buildflags",
     "//testing/gmock",
-    "//testing/gtest",
-    "//url",
   ]
+
+  if (is_chromeos_ash) {
+    public_deps += [ "//chrome/browser/ash" ]
+  }
 }
 
 source_set("unit_tests") {
@@ -835,18 +374,11 @@
 
   sources = [
     "app_mode/app_session_policies_unittest.cc",
-    "app_mode/app_session_unittest.cc",
-    "app_mode/chrome_kiosk_app_launcher_unittest.cc",
-    "app_mode/kiosk_app_service_launcher_unittest.cc",
     "extensions/desk_api/desk_api_extension_manager_unittest.cc",
     "extensions/file_system_provider/service_worker_lifetime_manager_unittest.cc",
     "extensions/login_screen/login/cleanup/cleanup_manager_unittest.cc",
-    "extensions/login_screen/login/cleanup/extension_cleanup_handler_unittest.cc",
-    "extensions/login_screen/login/cleanup/lacros_cleanup_handler_unittest.cc",
     "extensions/login_screen/login/cleanup/mock_cleanup_handler.cc",
     "extensions/login_screen/login/cleanup/mock_cleanup_handler.h",
-    "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler_unittest.cc",
-    "extensions/login_screen/login/login_api_ash_unittest.cc",
     "policy/dlp/data_transfer_dlp_controller_unittest.cc",
     "policy/dlp/dlp_clipboard_notifier_unittest.cc",
     "policy/dlp/dlp_confidential_contents_unittest.cc",
@@ -868,7 +400,6 @@
     "policy/dlp/mock_dlp_rules_manager.h",
     "policy/dlp/mock_dlp_warn_notifier.cc",
     "policy/dlp/mock_dlp_warn_notifier.h",
-    "tablet_mode/chrome_content_browser_client_tablet_mode_part_unittest.cc",
 
     # TODO(zturner): Enable this on Windows. See
     # BrowserWithTestWindowTest::SetUp() for a comment explaining why this is
@@ -879,206 +410,100 @@
   deps = [
     ":chromeos",
     ":dlp_policy_event_proto",
-    ":test_support",
-    ":test_with_shadow_variables",
-    "//ash",
-    "//ash:test_support",
-    "//ash/components/arc:arc_test_support",
-    "//ash/components/arc:notification_test_support",
-    "//ash/constants",
-    "//ash/public/cpp",
-    "//ash/public/cpp:test_support",
-    "//ash/public/cpp/external_arc",
-    "//ash/public/cpp/external_arc:test_support",
-    "//ash/quick_pair/common",
-    "//ash/quick_pair/common:test_support",
-    "//ash/quick_pair/proto:fastpair_proto",
-    "//ash/quick_pair/repository:test_support",
-    "//ash/webui/eche_app_ui:test_support",
     "//base",
+    "//base/test:test_support",
     "//build:chromeos_buildflags",
-    "//chrome/app:command_ids",
-    "//chrome/browser/ash:arc_test_support",
-    "//chrome/browser/ash:user_event_reporter_helper_test_support",
-    "//chrome/browser/ash/system_web_apps",
-    "//chrome/browser/ash/video_conference:unit_tests",
-    "//chrome/browser/chromeos/launcher_search:unit_tests",
+    "//chrome/app:generated_resources",
+    "//chrome/browser/extensions",
+    "//chrome/browser/profiles:profile",
     "//chrome/browser/ui",
-    "//chrome/browser/ui:ash_test_support",
-    "//chrome/browser/web_applications",
     "//chrome/common",
-    "//chrome/services/keymaster/public/mojom",
-    "//chrome/services/wilco_dtc_supportd/public/mojom",
+    "//chrome/common:chrome_features",
+    "//chrome/common:constants",
+    "//chrome/common:non_code_constants",
     "//chrome/test:test_support",
-    "//chrome/test:test_support_ui",
-    "//chrome/test:test_support_unit",
-    "//chromeos/ash/components/attestation:test_support",
-    "//chromeos/ash/components/audio",
-    "//chromeos/ash/components/dbus:test_support",
-    "//chromeos/ash/components/dbus/anomaly_detector",
-    "//chromeos/ash/components/dbus/attestation",
-    "//chromeos/ash/components/dbus/attestation:attestation_proto",
-    "//chromeos/ash/components/dbus/authpolicy",
-    "//chromeos/ash/components/dbus/constants",
-    "//chromeos/ash/components/dbus/cros_disks",
-    "//chromeos/ash/components/dbus/cryptohome",
-    "//chromeos/ash/components/dbus/cryptohome:attestation_proto",
-    "//chromeos/ash/components/dbus/dlcservice",
-    "//chromeos/ash/components/dbus/gnubby",
-    "//chromeos/ash/components/dbus/lorgnette_manager:lorgnette_proto",
-    "//chromeos/ash/components/dbus/oobe_config",
-    "//chromeos/ash/components/dbus/services:test_support",
-    "//chromeos/ash/components/dbus/session_manager",
-    "//chromeos/ash/components/dbus/smbprovider",
-    "//chromeos/ash/components/dbus/smbprovider:proto",
-    "//chromeos/ash/components/dbus/system_clock",
-    "//chromeos/ash/components/dbus/update_engine",
-    "//chromeos/ash/components/dbus/upstart",
-    "//chromeos/ash/components/dbus/virtual_file_provider",
-    "//chromeos/ash/components/dbus/vm_plugin_dispatcher",
-    "//chromeos/ash/components/disks:test_support",
-    "//chromeos/ash/components/install_attributes:test_support",
-    "//chromeos/ash/components/login/auth",
-    "//chromeos/ash/components/login/login_state",
-    "//chromeos/ash/components/login/login_state:test_support",
-    "//chromeos/ash/components/multidevice:test_support",
-    "//chromeos/ash/components/network",
-    "//chromeos/ash/components/network:test_support",
-    "//chromeos/ash/components/network/portal_detector:test_support",
-    "//chromeos/ash/components/phonehub:test_support",
-    "//chromeos/ash/components/proximity_auth",
-    "//chromeos/ash/components/proximity_auth:test_support",
-    "//chromeos/ash/components/scanning",
-    "//chromeos/ash/components/settings",
-    "//chromeos/ash/components/sync_wifi:test_support",
-    "//chromeos/ash/components/system",
-    "//chromeos/ash/components/tether:test_support",
-    "//chromeos/ash/components/tpm",
-    "//chromeos/ash/services/device_sync:test_support",
-    "//chromeos/ash/services/device_sync/public/cpp:test_support",
-    "//chromeos/ash/services/multidevice_setup/public/cpp:prefs",
-    "//chromeos/ash/services/multidevice_setup/public/cpp:test_support",
-    "//chromeos/ash/services/nearby/public/cpp:test_support",
-    "//chromeos/ash/services/nearby/public/mojom",
-    "//chromeos/ash/services/secure_channel/public/cpp/client",
-    "//chromeos/ash/services/secure_channel/public/cpp/client:test_support",
-    "//chromeos/ash/services/secure_channel/public/mojom",
-    "//chromeos/components/sensors:test_support",
+    "//chromeos/crosapi/mojom",
     "//chromeos/dbus/dlp",
-    "//chromeos/dbus/missive",
-    "//chromeos/dbus/power",
-    "//chromeos/ime:gencode",
-    "//chromeos/services/machine_learning/public/cpp:stub",
-    "//chromeos/services/network_config:test_support",
-    "//chromeos/ui/frame:test_support",
-    "//components/account_manager_core:test_support",
-    "//components/app_constants",
-    "//components/arc",
-    "//components/arc/common",
-    "//components/arc/common:arc_test_support",
-    "//components/component_updater:test_support",
-    "//components/content_settings/core/browser",
-    "//components/crx_file",
-    "//components/download/public/background_service/test:test_support",
-    "//components/drive",
-    "//components/drive:test_support",
-    "//components/exo",
-    "//components/exo:test_support",
-    "//components/favicon/core/test:test_support",
-    "//components/invalidation/impl:test_support",
-    "//components/invalidation/public",
-    "//components/keyed_service/content",
-    "//components/language/core/browser",
-    "//components/onc",
-    "//components/policy:generated",
-    "//components/policy/core/common:test_support",
-    "//components/policy/proto",
-    "//components/pref_registry",
-    "//components/prefs:test_support",
-    "//components/renderer_context_menu",
-    "//components/reporting/metrics/fakes:test_support",
-    "//components/reporting/proto:metric_data_proto",
-    "//components/reporting/storage:missive_storage_module",
-    "//components/resources",
-    "//components/services/app_service/public/cpp:test_support",
-    "//components/session_manager/core",
-    "//components/sessions:test_support",
-    "//components/signin/public/identity_manager:test_support",
-    "//components/sync",
-    "//components/sync_preferences",
-    "//components/sync_sessions",
-    "//components/user_prefs",
-    "//components/variations:test_support",
+    "//components/account_id",
+    "//components/file_access",
+    "//components/keyed_service/core",
+    "//components/policy/core/common:common_constants",
+    "//components/prefs",
+    "//components/reporting/client:test_support",
+    "//components/reporting/util:status",
+    "//components/strings:components_strings",
+    "//content/public/browser",
     "//content/test:test_support",
-    "//dbus",
-    "//device/bluetooth",
-    "//google_apis:test_support",
-    "//google_apis/common",
-    "//google_apis/common:test_support",
-    "//google_apis/drive",
-    "//mojo/public/cpp/bindings",
-    "//mojo/public/cpp/system:system",
-    "//mojo/public/cpp/test_support:test_utils",
-    "//services/audio/public/cpp:test_support",
-    "//services/data_decoder/public/cpp:test_support",
-    "//services/device/public/cpp:test_support",
-    "//services/service_manager/public/cpp/test:test_support",
-    "//skia",
-    "//storage/browser:test_support",
+    "//extensions:test_support",
+    "//extensions/browser",
+    "//extensions/common",
+    "//extensions/common:common_constants",
+    "//storage/browser",
     "//testing/gmock",
     "//testing/gtest",
-    "//third_party/blink/public:blink_headers",
-    "//third_party/icu",
-    "//third_party/leveldatabase",
-    "//third_party/private_membership:private_membership_proto",
-    "//third_party/zlib/google:compression_utils",
-    "//ui/base:test_support",
-    "//ui/base/ime/ash",
-    "//ui/base/ime/init",
-    "//ui/chromeos/resources",
-    "//ui/display:test_support",
-    "//ui/events/devices:test_support",
-    "//ui/shell_dialogs",
+    "//third_party/abseil-cpp:absl",
+    "//ui/base",
+    "//ui/base/data_transfer_policy",
+    "//ui/views",
+    "//url",
   ]
 
   if (enable_plugins) {
     sources += [ "app_mode/kiosk_session_plugin_handler_unittest.cc" ]
   }
 
-  if (use_cups) {
-    sources +=
-        [ "extensions/printing_metrics/printing_metrics_api_unittest.cc" ]
-    deps += [ "//chrome/browser/chromeos/extensions/printing_metrics" ]
+  if (is_chromeos_ash) {
+    sources += [
+      "app_mode/app_session_unittest.cc",
+      "app_mode/chrome_kiosk_app_launcher_unittest.cc",
+      "app_mode/kiosk_app_service_launcher_unittest.cc",
+      "extensions/login_screen/login/cleanup/extension_cleanup_handler_unittest.cc",
+      "extensions/login_screen/login/cleanup/lacros_cleanup_handler_unittest.cc",
+      "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler_unittest.cc",
+      "extensions/login_screen/login/login_api_ash_unittest.cc",
+      "tablet_mode/chrome_content_browser_client_tablet_mode_part_unittest.cc",
+    ]
+    deps += [
+      "//ash:test_support",
+      "//ash/constants",
+      "//chrome/browser",
+      "//chrome/browser:browser_process",
+      "//chrome/browser/apps/app_service:test_support",
+      "//chrome/browser/ash",
+      "//chrome/browser/ash:test_support",
+      "//chrome/browser/extensions:test_support",
+      "//chromeos/ash/components/login/auth/public:authpublic",
+      "//chromeos/ash/components/settings",
+      "//chromeos/dbus/power",
+      "//components/history/core/test",
+      "//components/prefs:test_support",
+      "//components/services/app_service/public/cpp:app_types",
+      "//components/session_manager:base",
+      "//components/sync_preferences:test_support",
+      "//components/user_manager",
+      "//content/public/common",
+      "//extensions/common/api",
+      "//mojo/public/cpp/bindings",
+      "//ui/gfx/geometry",
+    ]
+
+    if (use_cups) {
+      sources +=
+          [ "extensions/printing_metrics/printing_metrics_api_unittest.cc" ]
+      deps += [
+        "//chrome/browser/ash:print_job_info_proto",
+        "//chrome/browser/chromeos/extensions/printing_metrics",
+        "//chrome/common/extensions/api",
+      ]
+    }
   }
-}
 
-config("allow_shadow_variables") {
-  cflags = [ "-Wno-shadow" ]
-}
-
-# TODO(b/247823913): Merge this target back into the unit_tests target above
-# when third_party/securemessage code stops generating -Wshadow warnings.
-source_set("test_with_shadow_variables") {
-  testonly = true
-
-  sources = [ "../ash/attestation/soft_bind_attestation_flow_impl_unittest.cc" ]
-
-  configs += [ ":allow_shadow_variables" ]
-
-  deps = [
-    ":chromeos",
-    "//base",
-    "//chrome/browser/ash",
-    "//chrome/test:test_support",
-    "//chromeos/ash/components/attestation:test_support",
-    "//chromeos/ash/components/settings",
-    "//content/test:test_support",
-    "//crypto",
-    "//net",
-    "//testing/gtest",
-    "//third_party/securemessage",
-    "//third_party/securemessage:securemessage_cpp_protobuf",
-  ]
+  if (is_chromeos_lacros) {
+    deps += [
+      "//chromeos/lacros",
+      "//chromeos/startup",
+    ]
+  }
 }
 
 proto_library("dlp_policy_event_proto") {
diff --git a/chrome/browser/chromeos/extensions/DEPS b/chrome/browser/chromeos/extensions/DEPS
index 23bb54f..dd866075 100644
--- a/chrome/browser/chromeos/extensions/DEPS
+++ b/chrome/browser/chromeos/extensions/DEPS
@@ -1,9 +1,26 @@
 include_rules = [
-  # TODO(https://crbug.com/1164001): extensions/ will be eventually split
-  # between Ash-only code that will be moved to chrome/browser/ash/extensions
-  # and generic code that will be used by both Ash and Lacros and remain here.
-  # The latter won't be able to depend on the directories below. Remove them
-  # once that is done.
-  "+ash",
-  "+chrome/browser/ash",
+  # Guarded by IS_CHROMEOS_ASH or in is_chromeos_ash sources.
+  "+chrome/browser/ash/crosapi",
 ]
+
+# Included in is_chromeos_ash blocks in //chrome/test targets.
+specific_include_rules = {
+  "contact_center_insights_extension_manager_ash_browsertest\.cc": [
+    "+chrome/browser/ash",
+  ],
+  "echo_private_apitest\.cc": [
+    "+chrome/browser/ash",
+  ],
+  "file_system_provider_apitest\.cc": [
+    "+chrome/browser/ash",
+  ],
+  "info_private_apitest\.cc": [
+    "+ash",
+    "+chrome/browser/ash/arc",
+  ],
+
+  # Guarded by IS_CHROMEOS_ASH.
+  "file_system_provider_api\.cc": [
+    "+chrome/browser/ash/guest_os",
+  ],
+}
diff --git a/chrome/browser/chromeos/extensions/file_system_provider/service_worker_lifetime_manager.cc b/chrome/browser/chromeos/extensions/file_system_provider/service_worker_lifetime_manager.cc
index b26a25a..ae4d7b5 100644
--- a/chrome/browser/chromeos/extensions/file_system_provider/service_worker_lifetime_manager.cc
+++ b/chrome/browser/chromeos/extensions/file_system_provider/service_worker_lifetime_manager.cc
@@ -10,7 +10,7 @@
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/process_manager.h"
 #include "extensions/browser/process_manager_factory.h"
-#include "third_party/blink/public/mojom/service_worker/service_worker_database.mojom-forward.h"
+#include "third_party/blink/public/mojom/service_worker/service_worker_database.mojom.h"
 
 namespace extensions::file_system_provider {
 
diff --git a/chrome/browser/chromeos/extensions/login_screen/DEPS b/chrome/browser/chromeos/extensions/login_screen/DEPS
new file mode 100644
index 0000000..39631d9
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/login_screen/DEPS
@@ -0,0 +1,8 @@
+include_rules = [
+  # In is_chromeos_ash sources.
+  "+chrome/browser/ash/login",
+  "+chrome/browser/ash/policy",
+  "+chrome/browser/ash/printing",
+  "+chrome/browser/ash/profiles",
+  "+chrome/browser/ash/settings",
+]
diff --git a/chrome/browser/chromeos/extensions/printing_metrics/DEPS b/chrome/browser/chromeos/extensions/printing_metrics/DEPS
new file mode 100644
index 0000000..51376a3
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/printing_metrics/DEPS
@@ -0,0 +1,6 @@
+specific_include_rules = {
+  ".*test\.c": [
+    # Guarded by IS_CHROMEOS_ASH or in is_chromeos_ash sources.
+    "+chrome/browser/ash/printing",
+  ],
+}
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/DEPS b/chrome/browser/chromeos/extensions/telemetry/api/DEPS
new file mode 100644
index 0000000..ec4003e
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/telemetry/api/DEPS
@@ -0,0 +1,11 @@
+include_rules = [
+  # Guarded by IS_CHROMEOS_ASH or in is_chromeos_ash sources.
+  "+chrome/browser/ash/telemetry_extension",
+]
+
+specific_include_rules = {
+  # Guarded by IS_CHROMEOS_ASH or in is_chromeos_ash sources.
+  ".*test\.cc": [
+    "+chrome/browser/ash/login/users/fake_chrome_user_manager.h",
+  ],
+}
diff --git a/chrome/browser/chromeos/extensions/wm/DEPS b/chrome/browser/chromeos/extensions/wm/DEPS
new file mode 100644
index 0000000..83bf602
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/wm/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # In is_chromeos_ash sources.
+  "+ash/public/cpp",
+  "+ash/wm/desks",
+]
diff --git a/chrome/browser/chromeos/office_web_app/office_web_app.cc b/chrome/browser/chromeos/office_web_app/office_web_app.cc
index b73b151b..2c11b649 100644
--- a/chrome/browser/chromeos/office_web_app/office_web_app.cc
+++ b/chrome/browser/chromeos/office_web_app/office_web_app.cc
@@ -9,7 +9,7 @@
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "components/webapps/browser/install_result_code.h"
@@ -43,7 +43,8 @@
   DCHECK(provider);
 
   web_app::ExternalInstallOptions options(
-      GURL(kMicrosoft365WebAppUrl), web_app::UserDisplayMode::kStandalone,
+      GURL(kMicrosoft365WebAppUrl),
+      web_app::mojom::UserDisplayMode::kStandalone,
       web_app::ExternalInstallSource::kInternalMicrosoft365Setup);
   options.fallback_app_name = kMicrosoft365FallbackName;
   options.add_to_quick_launch_bar = false;
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_copy_or_move_hook_delegate_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_copy_or_move_hook_delegate_unittest.cc
index 558dfec..6e0a7151 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_copy_or_move_hook_delegate_unittest.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_copy_or_move_hook_delegate_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/test/mock_callback.h"
 #include "base/test/test_future.h"
 #include "base/threading/thread_checker.h"
-#include "chrome/browser/ash/policy/dlp/dlp_files_controller.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_factory.h"
 #include "chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.h"
@@ -37,7 +36,6 @@
 #include "url/gurl.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-
 #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
 #include "chrome/browser/ash/policy/dlp/dlp_files_controller.h"
 
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_file_access_copy_or_move_delegate_factory_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_file_access_copy_or_move_delegate_factory_unittest.cc
index 55fc90a..6873d9b 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_file_access_copy_or_move_delegate_factory_unittest.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_file_access_copy_or_move_delegate_factory_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/chromeos/policy/dlp/dlp_file_access_copy_or_move_delegate_factory.h"
+
 #include "components/file_access/file_access_copy_or_move_delegate_factory.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc
index c844eff..c3e29dd 100644
--- a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc
+++ b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc
@@ -32,7 +32,7 @@
 #include "chrome/browser/ui/tab_helpers.h"
 #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h"
 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -275,7 +275,7 @@
     web_app_info->title = base::UTF8ToUTF16(title);
     web_app_info->start_url = launch_url;
     web_app_info->display_mode = web_app::DisplayMode::kBrowser;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kBrowser;
+    web_app_info->user_display_mode = web_app::mojom::UserDisplayMode::kBrowser;
 
     if (!image_result.image.IsEmpty()) {
       web_app_info->icon_bitmaps.any[image_result.image.Width()] =
@@ -360,11 +360,12 @@
   // add a "default" launch container enum value.
   auto* provider = web_app::WebAppProvider::GetForWebApps(profile);
   DCHECK(provider);
-  absl::optional<web_app::UserDisplayMode> display_mode =
+  absl::optional<web_app::mojom::UserDisplayMode> display_mode =
       provider->registrar_unsafe().GetAppUserDisplayMode(app_id);
   auto launch_container = apps::LaunchContainer::kLaunchContainerWindow;
-  if (display_mode == web_app::UserDisplayMode::kBrowser)
+  if (display_mode == web_app::mojom::UserDisplayMode::kBrowser) {
     launch_container = apps::LaunchContainer::kLaunchContainerTab;
+  }
 
   if (!apps::AppServiceProxyFactory::IsAppServiceAvailableForProfile(profile)) {
     // If the profile doesn't have an App Service Proxy available, that means
diff --git a/chrome/browser/lacros/browser_launcher_browsertest.cc b/chrome/browser/lacros/browser_launcher_browsertest.cc
index df8bf5ce..132583c 100644
--- a/chrome/browser/lacros/browser_launcher_browsertest.cc
+++ b/chrome/browser/lacros/browser_launcher_browsertest.cc
@@ -47,7 +47,8 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = start_url;
   web_app_info->scope = start_url.GetWithoutFilename();
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
   web_app_info->title = u"A Web App";
   return web_app::test::InstallWebApp(profile, std::move(web_app_info));
 }
diff --git a/chrome/browser/lacros/standalone_browser_test_controller.cc b/chrome/browser/lacros/standalone_browser_test_controller.cc
index 313f529..daa81617 100644
--- a/chrome/browser/lacros/standalone_browser_test_controller.cc
+++ b/chrome/browser/lacros/standalone_browser_test_controller.cc
@@ -12,7 +12,7 @@
 #include "chrome/browser/extensions/extension_keeplist_chromeos.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/speech/tts_crosapi_util.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -40,17 +40,17 @@
   }
 }
 
-web_app::UserDisplayMode WindowModeToUserDisplayMode(
+web_app::mojom::UserDisplayMode WindowModeToUserDisplayMode(
     apps::WindowMode window_mode) {
   switch (window_mode) {
     case apps::WindowMode::kBrowser:
-      return web_app::UserDisplayMode::kBrowser;
+      return web_app::mojom::UserDisplayMode::kBrowser;
     case apps::WindowMode::kTabbedWindow:
-      return web_app::UserDisplayMode::kTabbed;
+      return web_app::mojom::UserDisplayMode::kTabbed;
     case apps::WindowMode::kWindow:
-      return web_app::UserDisplayMode::kStandalone;
+      return web_app::mojom::UserDisplayMode::kStandalone;
     case apps::WindowMode::kUnknown:
-      return web_app::UserDisplayMode::kBrowser;
+      return web_app::mojom::UserDisplayMode::kBrowser;
   }
 }
 
diff --git a/chrome/browser/lacros/web_app_provider_bridge_lacros.cc b/chrome/browser/lacros/web_app_provider_bridge_lacros.cc
index 15ab1cce..1fadc68 100644
--- a/chrome/browser/lacros/web_app_provider_bridge_lacros.cc
+++ b/chrome/browser/lacros/web_app_provider_bridge_lacros.cc
@@ -9,7 +9,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/office_web_app/office_web_app.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
@@ -86,7 +86,8 @@
   install_info->title = arc_install_info->title;
   install_info->start_url = arc_install_info->start_url;
   install_info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  install_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  install_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
   install_info->theme_color = arc_install_info->theme_color;
   const SkBitmap& bitmap = *arc_install_info->icon.bitmap();
   install_info->icon_bitmaps.any[bitmap.width()] = bitmap;
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
index 7ae90951..25c709c 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -96,7 +96,7 @@
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/webui/history/foreign_session_handler.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -1651,7 +1651,7 @@
 
   // Only applies to apps that open in an app window.
   if (provider->registrar_unsafe().GetAppUserDisplayMode(*link_app_id) ==
-      web_app::UserDisplayMode::kBrowser) {
+      web_app::mojom::UserDisplayMode::kBrowser) {
     return;
   }
 
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
index 0766a67..e0757aac 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -266,8 +266,8 @@
     web_app_info->title = u"Test app 🐐";
     web_app_info->description = u"Test description 🐐";
     web_app_info->user_display_mode =
-        open_as_window ? web_app::UserDisplayMode::kStandalone
-                       : web_app::UserDisplayMode::kBrowser;
+        open_as_window ? web_app::mojom::UserDisplayMode::kStandalone
+                       : web_app::mojom::UserDisplayMode::kBrowser;
 
     return web_app::test::InstallWebApp(browser()->profile(),
                                         std::move(web_app_info));
diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc
index 20511ff..a23dd21f 100644
--- a/chrome/browser/sessions/session_restore_browsertest.cc
+++ b/chrome/browser/sessions/session_restore_browsertest.cc
@@ -67,8 +67,8 @@
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_tab_helper.h"
 #include "chrome/common/chrome_constants.h"
@@ -3305,7 +3305,8 @@
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = start_url;
     web_app_info->scope = start_url.GetWithoutFilename();
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     web_app_info->title = u"A Web App";
     return web_app::test::InstallWebApp(profile, std::move(web_app_info));
   }
@@ -3317,7 +3318,8 @@
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = start_url;
     web_app_info->scope = start_url.GetWithoutFilename();
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     web_app_info->display_override = {blink::mojom::DisplayMode::kTabbed};
     web_app_info->title = u"A Web App";
     web_app_info->tab_strip = std::move(tab_strip);
diff --git a/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc b/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc
index 97337c8..04811f8 100644
--- a/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc
@@ -6,8 +6,8 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/sync/test/integration/apps_helper.h"
 #include "chrome/browser/sync/test/integration/web_apps_sync_test_base.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcut.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_proto_utils.h"
@@ -78,7 +78,7 @@
     WebApp app(app_id);
     app.SetName(app_id);
     app.SetStartUrl(url);
-    app.SetUserDisplayMode(UserDisplayMode::kBrowser);
+    app.SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
     app.SetManifestId(manifest_id);
 
     WebApp::SyncFallbackData sync_fallback_data;
diff --git a/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc b/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc
index b5e4eb6..9e87c0b5 100644
--- a/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc
@@ -20,8 +20,8 @@
 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
 #include "chrome/browser/sync/test/integration/sync_integration_test_util.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
@@ -401,7 +401,7 @@
         web_app::GenerateAppId(absl::nullopt, kStartUrl);
     web_app::ExternalInstallOptions options(
         GURL("https://www.example.com/install_url"),
-        web_app::UserDisplayMode::kStandalone,
+        web_app::mojom::UserDisplayMode::kStandalone,
         web_app::ExternalInstallSource::kExternalDefault);
     options.user_type_allowlist = {"unmanaged"};
     options.uninstall_and_replace = {kHostedAppId0};
diff --git a/chrome/browser/sync/test/integration/two_client_web_apps_bmo_sync_test.cc b/chrome/browser/sync/test/integration/two_client_web_apps_bmo_sync_test.cc
index 0db2295..0739d58 100644
--- a/chrome/browser/sync/test/integration/two_client_web_apps_bmo_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_web_apps_bmo_sync_test.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcut_manager.h"
 #include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
@@ -22,7 +23,6 @@
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -244,12 +244,12 @@
   WebAppInstallInfo info;
   info.title = u"Test name";
   info.start_url = GURL("http://www.chromium.org/path");
-  info.user_display_mode = UserDisplayMode::kStandalone;
+  info.user_display_mode = mojom::UserDisplayMode::kStandalone;
 
   // Install web app to both profiles.
   AppId app_id = InstallApp(info, GetProfile(0));
   // The web app has a different open on the second profile.
-  info.user_display_mode = UserDisplayMode::kBrowser;
+  info.user_display_mode = mojom::UserDisplayMode::kBrowser;
   AppId app_id2 = InstallApp(info, GetProfile(1));
 
   EXPECT_EQ(app_id, app_id2);
@@ -287,7 +287,7 @@
   }
   WebAppProvider::GetForTest(GetProfile(1))
       ->sync_bridge_unsafe()
-      .SetAppUserDisplayMode(app_id, UserDisplayMode::kBrowser,
+      .SetAppUserDisplayMode(app_id, mojom::UserDisplayMode::kBrowser,
                              /*is_user_action=*/false);
 
   ASSERT_TRUE(AwaitWebAppQuiescence());
@@ -297,7 +297,7 @@
 
   // The change should have synced to profile 0.
   EXPECT_EQ(GetRegistrar(GetProfile(0)).GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kBrowser);
+            mojom::UserDisplayMode::kBrowser);
   // The user display settings is synced, so it should match.
   EXPECT_EQ(GetRegistrar(GetProfile(0)).GetAppUserDisplayMode(app_id),
             GetRegistrar(GetProfile(1)).GetAppUserDisplayMode(app_id));
@@ -379,14 +379,14 @@
   // on profile 0. So changes should propagate from profile 0 to profile 1 now.
   WebAppProvider::GetForTest(GetProfile(0))
       ->sync_bridge_unsafe()
-      .SetAppUserDisplayMode(app_id, UserDisplayMode::kBrowser,
+      .SetAppUserDisplayMode(app_id, mojom::UserDisplayMode::kBrowser,
                              /*is_user_action=*/false);
 
   ASSERT_TRUE(AwaitWebAppQuiescence());
 
   // Check that profile 1 has the display mode change.
   EXPECT_EQ(GetRegistrar(GetProfile(1)).GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kBrowser);
+            mojom::UserDisplayMode::kBrowser);
 
   // The user display settings is syned, so it should match.
   EXPECT_EQ(GetRegistrar(GetProfile(0)).GetAppUserDisplayMode(app_id),
diff --git a/chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc b/chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc
index d78f0aa..59f1a40 100644
--- a/chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc
@@ -14,9 +14,9 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -45,7 +45,7 @@
 
   void OnWebAppUserDisplayModeChanged(
       const AppId& app_id,
-      UserDisplayMode user_display_mode) override {
+      mojom::UserDisplayMode user_display_mode) override {
     run_loop_.Quit();
   }
 
@@ -419,7 +419,7 @@
   info.description = u"Test description";
   info.start_url = GURL("http://www.chromium.org/path");
   info.scope = GURL("http://www.chromium.org/");
-  info.user_display_mode = UserDisplayMode::kStandalone;
+  info.user_display_mode = mojom::UserDisplayMode::kStandalone;
   AppId app_id = apps_helper::InstallWebApp(GetProfile(0), info);
 
   EXPECT_EQ(install_observer.Wait(), app_id);
@@ -428,15 +428,16 @@
   auto* provider1 = WebAppProvider::GetForTest(GetProfile(1));
   WebAppRegistrar& registrar1 = provider1->registrar_unsafe();
   EXPECT_EQ(registrar1.GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
 
   DisplayModeChangeWaiter display_mode_change_waiter(registrar1);
   provider1->sync_bridge_unsafe().SetAppUserDisplayMode(
-      app_id, UserDisplayMode::kTabbed,
+      app_id, mojom::UserDisplayMode::kTabbed,
       /*is_user_action=*/true);
   display_mode_change_waiter.Wait();
 
-  EXPECT_EQ(registrar1.GetAppUserDisplayMode(app_id), UserDisplayMode::kTabbed);
+  EXPECT_EQ(registrar1.GetAppUserDisplayMode(app_id),
+            mojom::UserDisplayMode::kTabbed);
 }
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index fa8c32d..96f7e2ac 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -3157,7 +3157,6 @@
       "//chrome/browser/ash/login/oobe_quick_start",
       "//chrome/browser/ash/system_web_apps",
       "//chrome/browser/ash/video_conference",
-      "//chrome/browser/chromeos",
       "//chrome/browser/chromeos/extensions/vpn_provider",
       "//chrome/browser/chromeos/extensions/wm",
       "//chrome/browser/chromeos/launcher_search:search_util",
@@ -3320,6 +3319,8 @@
       "//ui/base/ime/ash",
       "//ui/chromeos",
       "//ui/chromeos/events",
+      "//ui/chromeos/resources",
+      "//ui/chromeos/strings",
       "//ui/chromeos/strings:strings_provider",
       "//ui/compositor_extra",
       "//ui/display/manager",
@@ -3336,7 +3337,6 @@
     allow_circular_includes_from += [
       "//chrome/browser/ash",
       "//chrome/browser/ash/crosapi",
-      "//chrome/browser/chromeos",
       "//chrome/browser/chromeos/extensions/wm",
     ]
 
@@ -3365,6 +3365,7 @@
   }
 
   if (is_chromeos) {
+    allow_circular_includes_from += [ "//chrome/browser/chromeos" ]
     sources += [
       "platform_keys_certificate_selector_chromeos.h",
       "tabs/existing_window_sub_menu_model_chromeos.cc",
@@ -3400,6 +3401,7 @@
     ]
     deps += [
       "//chrome/app:generated_resources",
+      "//chrome/browser/chromeos",
       "//chromeos/components/security_token_pin",
       "//chromeos/constants",
       "//chromeos/dbus/power",
diff --git a/chrome/browser/ui/ash/arc_open_url_delegate_impl_browsertest.cc b/chrome/browser/ui/ash/arc_open_url_delegate_impl_browsertest.cc
index 2135371..af8bc0c 100644
--- a/chrome/browser/ui/ash/arc_open_url_delegate_impl_browsertest.cc
+++ b/chrome/browser/ui/ash/arc_open_url_delegate_impl_browsertest.cc
@@ -22,8 +22,8 @@
 #include "chrome/browser/ui/settings_window_manager_chromeos.h"
 #include "chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h"
 #include "chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -157,7 +157,8 @@
   web_app_info->scope =
       https_server().GetURL(GetAppUrlHost(), GetAppScopePath());
   web_app_info->title = base::UTF8ToUTF16(GetAppName());
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
   apps::ShareTarget share_target;
   share_target.method = apps::ShareTarget::Method::kGet;
   share_target.action = app_url;
diff --git a/chrome/browser/ui/ash/desks/desks_client_browsertest.cc b/chrome/browser/ui/ash/desks/desks_client_browsertest.cc
index e2bd6c0..d6ae169 100644
--- a/chrome/browser/ui/ash/desks/desks_client_browsertest.cc
+++ b/chrome/browser/ui/ash/desks/desks_client_browsertest.cc
@@ -74,8 +74,8 @@
 #include "chrome/browser/ui/tabs/tab_group.h"
 #include "chrome/browser/ui/tabs/tab_group_model.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/test/base/chromeos/ash_browser_test_starter.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -527,7 +527,8 @@
     web_app_info->start_url = start_url;
     web_app_info->scope = start_url.GetWithoutFilename();
     if (!launch_in_browser)
-      web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+      web_app_info->user_display_mode =
+          web_app::mojom::UserDisplayMode::kStandalone;
     web_app_info->title = u"A Web App";
     const web_app::AppId app_id =
         web_app::test::InstallWebApp(profile(), std::move(web_app_info));
diff --git a/chrome/browser/ui/ash/shelf/app_service/web_app_shelf_browsertest.cc b/chrome/browser/ui/ash/shelf/app_service/web_app_shelf_browsertest.cc
index d9125217..cb489a0 100644
--- a/chrome/browser/ui/ash/shelf/app_service/web_app_shelf_browsertest.cc
+++ b/chrome/browser/ui/ash/shelf/app_service/web_app_shelf_browsertest.cc
@@ -18,9 +18,9 @@
 #include "chrome/browser/ui/browser_navigator_params.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/app_registry_cache_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
@@ -34,8 +34,9 @@
 
 class WebAppShelfBrowserTest : public InProcessBrowserTest {
  public:
-  web_app::AppId InstallTestWebApp(const GURL& start_url,
-                                   web_app::UserDisplayMode user_display_mode) {
+  web_app::AppId InstallTestWebApp(
+      const GURL& start_url,
+      web_app::mojom::UserDisplayMode user_display_mode) {
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = start_url;
     web_app_info->user_display_mode = user_display_mode;
@@ -72,11 +73,11 @@
   const GURL start_d = embedded_test_server()->GetURL("/simple.html");
 
   const web_app::AppId app_a =
-      InstallTestWebApp(start_a, web_app::UserDisplayMode::kBrowser);
+      InstallTestWebApp(start_a, web_app::mojom::UserDisplayMode::kBrowser);
   const web_app::AppId app_b =
-      InstallTestWebApp(start_b, web_app::UserDisplayMode::kBrowser);
+      InstallTestWebApp(start_b, web_app::mojom::UserDisplayMode::kBrowser);
   const web_app::AppId app_c =
-      InstallTestWebApp(start_c, web_app::UserDisplayMode::kStandalone);
+      InstallTestWebApp(start_c, web_app::mojom::UserDisplayMode::kStandalone);
 
   auto* const proxy = apps::AppServiceProxyFactory::GetForProfile(profile());
 
diff --git a/chrome/browser/ui/ash/shelf/app_shortcut_shelf_item_controller.cc b/chrome/browser/ui/ash/shelf/app_shortcut_shelf_item_controller.cc
index afa49ab..32806f9 100644
--- a/chrome/browser/ui/ash/shelf/app_shortcut_shelf_item_controller.cc
+++ b/chrome/browser/ui/ash/shelf/app_shortcut_shelf_item_controller.cc
@@ -30,7 +30,7 @@
 #include "chrome/browser/ui/tabs/tab_enums.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
@@ -563,7 +563,7 @@
     web_app::WebAppRegistrar& registrar = provider->registrar_unsafe();
     if (registrar.IsLocallyInstalled(app_id())) {
       return registrar.GetAppUserDisplayMode(app_id()) !=
-             web_app::UserDisplayMode::kBrowser;
+             web_app::mojom::UserDisplayMode::kBrowser;
     }
   }
   return false;
diff --git a/chrome/browser/ui/ash/shelf/chrome_shelf_controller_browsertest.cc b/chrome/browser/ui/ash/shelf/chrome_shelf_controller_browsertest.cc
index 0aaed8a6..ceafb3c 100644
--- a/chrome/browser/ui/ash/shelf/chrome_shelf_controller_browsertest.cc
+++ b/chrome/browser/ui/ash/shelf/chrome_shelf_controller_browsertest.cc
@@ -88,6 +88,7 @@
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_constants.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
@@ -95,7 +96,6 @@
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_id.h"
@@ -2430,7 +2430,7 @@
   WebAppProvider* provider = WebAppProvider::GetForTest(browser()->profile());
   DCHECK(provider);
   provider->sync_bridge_unsafe().SetAppUserDisplayMode(
-      web_app_id, web_app::UserDisplayMode::kStandalone,
+      web_app_id, web_app::mojom::UserDisplayMode::kStandalone,
       /*is_user_action=*/false);
 
   // The apps should be closed.
diff --git a/chrome/browser/ui/extensions/hosted_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
index 9094fc45e..16ff16d 100644
--- a/chrome/browser/ui/extensions/hosted_app_browsertest.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -41,9 +41,9 @@
 #include "chrome/browser/ui/web_applications/web_app_launch_utils.h"
 #include "chrome/browser/ui/web_applications/web_app_menu_model.h"
 #include "chrome/browser/web_applications/external_install_options.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_id.h"
@@ -214,7 +214,8 @@
       auto web_app_info = std::make_unique<WebAppInstallInfo>();
       web_app_info->start_url = start_url;
       web_app_info->scope = start_url.GetWithoutFilename();
-      web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+      web_app_info->user_display_mode =
+          web_app::mojom::UserDisplayMode::kStandalone;
       app_id_ =
           web_app::test::InstallWebApp(profile(), std::move(web_app_info));
 
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
index f490b1f..7aa1095c 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -75,9 +75,9 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -2037,7 +2037,8 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = start_url;
   web_app_info->scope = start_url.GetWithoutFilename();
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
   web_app_info->title = base::UTF8ToUTF16(app_name);
   return web_app::test::InstallWebApp(profile, std::move(web_app_info));
 }
@@ -2266,7 +2267,8 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = start_url;
   web_app_info->scope = start_url.GetWithoutFilename();
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
   web_app_info->title = u"A Web App";
   return web_app::test::InstallWebApp(profile, std::move(web_app_info));
 }
@@ -2489,7 +2491,7 @@
         std::make_unique<WebAppInstallInfo>();
     info->start_url = GURL(kStartUrl);
     info->title = kAppName;
-    info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
     base::test::TestFuture<const web_app::AppId&, webapps::InstallResultCode>
         result;
     provider->scheduler().InstallFromInfoWithParams(
@@ -2501,7 +2503,7 @@
     EXPECT_EQ(result.Get<webapps::InstallResultCode>(),
               webapps::InstallResultCode::kSuccessNewInstall);
     EXPECT_EQ(provider->registrar_unsafe().GetAppUserDisplayMode(kAppId),
-              web_app::UserDisplayMode::kStandalone);
+              web_app::mojom::UserDisplayMode::kStandalone);
   }
 }
 
@@ -2771,7 +2773,7 @@
         std::make_unique<WebAppInstallInfo>();
     info->start_url = GURL(kStartUrl);
     info->title = kAppName;
-    info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
     info->protocol_handlers = protocol_handlers;
     info->file_handlers = file_handlers;
     web_app::AppId app_id =
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc
index b441ac6..fa7772dc 100644
--- a/chrome/browser/ui/toolbar/app_menu_model.cc
+++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -47,7 +47,7 @@
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/web_applications/web_app_launch_utils.h"
 #include "chrome/browser/upgrade_detector/upgrade_detector.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_paths.h"
@@ -920,7 +920,7 @@
         web_app::WebAppProvider::GetForLocalAppsUnchecked(browser_->profile());
     // Only applies to apps that open in an app window.
     if (provider->registrar_unsafe().GetAppUserDisplayMode(*app_id) !=
-        web_app::UserDisplayMode::kBrowser) {
+        web_app::mojom::UserDisplayMode::kBrowser) {
       const std::u16string short_name = base::UTF8ToUTF16(
           provider->registrar_unsafe().GetAppShortName(*app_id));
       const std::u16string truncated_name = gfx::TruncateString(
diff --git a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc
index 1fffbc5..793aa59 100644
--- a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc
@@ -18,8 +18,8 @@
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "content/public/test/browser_test.h"
@@ -215,7 +215,8 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = start_url;
   web_app_info->scope = start_url;
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
   web_app::AppId app_id = web_app::test::InstallWebApp(browser()->profile(),
                                                        std::move(web_app_info));
   Browser* app_browser =
diff --git a/chrome/browser/ui/views/frame/glass_browser_frame_view_browsertest_win.cc b/chrome/browser/ui/views/frame/glass_browser_frame_view_browsertest_win.cc
index a82d2647..a463ec9 100644
--- a/chrome/browser/ui/views/frame/glass_browser_frame_view_browsertest_win.cc
+++ b/chrome/browser/ui/views/frame/glass_browser_frame_view_browsertest_win.cc
@@ -23,8 +23,8 @@
 #include "chrome/browser/ui/views/web_apps/frame_toolbar/web_app_toolbar_button_container.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -290,7 +290,8 @@
     web_app_info->start_url = start_url;
     web_app_info->scope = start_url.GetWithoutFilename();
     web_app_info->display_mode = blink::mojom::DisplayMode::kStandalone;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     web_app_info->title = u"A Web App";
     web_app_info->display_override = display_overrides;
 
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc
index c1e3e2e..52b72a75 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc
@@ -24,8 +24,8 @@
 #include "chrome/browser/ui/views/web_apps/frame_toolbar/web_app_toolbar_button_container.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
@@ -359,7 +359,8 @@
     web_app_info->start_url = start_url;
     web_app_info->scope = start_url.GetWithoutFilename();
     web_app_info->display_mode = blink::mojom::DisplayMode::kStandalone;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     web_app_info->title = u"A Web App";
     web_app_info->display_override = {
         blink::mojom::DisplayMode::kWindowControlsOverlay};
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc
index 6170e624..736cf35e 100644
--- a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc
+++ b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc
@@ -36,8 +36,8 @@
 #include "chrome/browser/ui/views/location_bar/intent_picker_view.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -213,7 +213,8 @@
     web_app_info->title = base::UTF8ToUTF16(app_name);
     web_app_info->start_url = url;
     web_app_info->scope = url;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     auto app_id =
         web_app::test::InstallWebApp(profile(), std::move(web_app_info));
     return app_id;
diff --git a/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc b/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
index a7e3b3d..c4faa6c1 100644
--- a/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
@@ -212,7 +212,8 @@
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = start_url;
     web_app_info->scope = start_url.GetWithoutFilename();
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     Install(std::move(web_app_info));
   }
 
@@ -220,7 +221,8 @@
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = start_url;
     web_app_info->scope = start_url.DeprecatedGetOriginAsURL();
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     Install(std::move(web_app_info));
   }
 
diff --git a/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc b/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
index 194aa4b..db694cc 100644
--- a/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
@@ -21,9 +21,9 @@
 #include "chrome/browser/ui/views/location_bar/intent_chip_button.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/app_registry_cache_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/test/base/ui_test_utils.h"
@@ -163,7 +163,8 @@
     web_app_info->scope = https_server().GetURL(app_host, "/");
     web_app_info->title = base::UTF8ToUTF16(GetAppName());
     web_app_info->description = u"Test description";
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
 
     overlapping_app_id_ =
         web_app::test::InstallWebApp(profile(), std::move(web_app_info));
diff --git a/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc b/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
index d012e3e..8d8460a 100644
--- a/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
+++ b/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
@@ -24,9 +24,9 @@
 #include "chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.h"
 #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h"
 #include "chrome/browser/web_applications/install_bounce_metric.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_prefs_utils.h"
@@ -384,7 +384,7 @@
   // Change launch container to open in tab.
   web_app::WebAppProvider::GetForTest(browser()->profile())
       ->sync_bridge_unsafe()
-      .SetAppUserDisplayMode(app_id, web_app::UserDisplayMode::kBrowser,
+      .SetAppUserDisplayMode(app_id, web_app::mojom::UserDisplayMode::kBrowser,
                              /*is_user_action=*/false);
 
   // Use a new tab because installed app may have opened in new window.
diff --git a/chrome/browser/ui/views/user_education/feature_promo_dialog_interactive_uitest.cc b/chrome/browser/ui/views/user_education/feature_promo_dialog_interactive_uitest.cc
index e2d5ccb2..4e4d07f 100644
--- a/chrome/browser/ui/views/user_education/feature_promo_dialog_interactive_uitest.cc
+++ b/chrome/browser/ui/views/user_education/feature_promo_dialog_interactive_uitest.cc
@@ -25,9 +25,9 @@
 #include "chrome/browser/ui/views/page_action/page_action_icon_controller.h"
 #include "chrome/browser/ui/views/page_action/page_action_icon_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/app_registry_cache_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_callback_app_identity.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
@@ -335,7 +335,8 @@
     web_app_info->title = base::UTF8ToUTF16(app_name);
     web_app_info->start_url = url;
     web_app_info->scope = url;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     auto app_id = web_app::test::InstallWebApp(browser()->profile(),
                                                std::move(web_app_info));
     web_app::AppReadinessWaiter(browser()->profile(), app_id).Await();
diff --git a/chrome/browser/ui/views/web_apps/file_handler_launch_dialog_browsertest.cc b/chrome/browser/ui/views/web_apps/file_handler_launch_dialog_browsertest.cc
index f86d3ae..ed8f73f 100644
--- a/chrome/browser/ui/views/web_apps/file_handler_launch_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/web_apps/file_handler_launch_dialog_browsertest.cc
@@ -20,8 +20,8 @@
 #include "chrome/browser/ui/startup/startup_browser_creator.h"
 #include "chrome/browser/ui/startup/web_app_startup_utils.h"
 #include "chrome/browser/ui/test/test_browser_dialog.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -108,7 +108,7 @@
         &WebAppProvider::GetForTest(browser()->profile())
              ->sync_bridge_unsafe());
     update->UpdateApp(app_id_)->SetUserDisplayMode(
-        UserDisplayMode::kStandalone);
+        mojom::UserDisplayMode::kStandalone);
   }
 
   const WebApp* GetApp() {
diff --git a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc
index d90bdbfd..54b9704 100644
--- a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc
+++ b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc
@@ -34,7 +34,7 @@
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/ui/web_applications/web_app_menu_model.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/chrome_features.h"
@@ -443,7 +443,8 @@
     web_app_info->scope = start_url.GetWithoutFilename();
     web_app_info->title = u"A borderless app";
     web_app_info->display_mode = web_app::DisplayMode::kStandalone;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
 
     if (uses_borderless) {
       web_app_info->display_override = {web_app::DisplayMode::kBorderless};
@@ -665,7 +666,8 @@
     web_app_info->scope = start_url.GetWithoutFilename();
     web_app_info->title = u"A window-controls-overlay app";
     web_app_info->display_mode = web_app::DisplayMode::kStandalone;
-    web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode =
+        web_app::mojom::UserDisplayMode::kStandalone;
     web_app_info->display_override = display_overrides;
 
     return helper()->InstallAndLaunchCustomWebApp(
diff --git a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_test_helper.cc b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_test_helper.cc
index 8d9ce81d..5996477 100644
--- a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_test_helper.cc
+++ b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_test_helper.cc
@@ -15,8 +15,8 @@
 #include "chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_view.h"
 #include "chrome/browser/ui/views/web_apps/frame_toolbar/web_app_toolbar_button_container.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/test/base/ui_test_utils.h"
@@ -43,7 +43,8 @@
   web_app_info->scope = start_url.GetWithoutFilename();
   web_app_info->title = u"A minimal-ui app";
   web_app_info->display_mode = web_app::DisplayMode::kMinimalUi;
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
 
   web_app::AppId app_id =
       web_app::test::InstallWebApp(browser->profile(), std::move(web_app_info));
diff --git a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_test_mixin.cc b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_test_mixin.cc
index 42dd2e5..ef649376 100644
--- a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_test_mixin.cc
+++ b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_test_mixin.cc
@@ -11,7 +11,7 @@
 #include "chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_view.h"
 #include "chrome/browser/ui/views/web_apps/frame_toolbar/web_app_toolbar_button_container.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "content/public/test/test_navigation_observer.h"
@@ -31,7 +31,8 @@
   web_app_info->scope = start_url.GetWithoutFilename();
   web_app_info->title = u"A minimal-ui app";
   web_app_info->display_mode = web_app::DisplayMode::kMinimalUi;
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
 
   web_app::AppId app_id =
       web_app::test::InstallWebApp(browser->profile(), std::move(web_app_info));
diff --git a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_minimal_ui_test.cc b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_minimal_ui_test.cc
index a6bc3753..4a6eb16 100644
--- a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_minimal_ui_test.cc
+++ b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_minimal_ui_test.cc
@@ -5,7 +5,7 @@
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "content/public/test/browser_test.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
@@ -24,7 +24,7 @@
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = GURL("https://example.org");
     web_app_info->display_mode = display_mode;
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     AppId app_id = InstallWebApp(std::move(web_app_info));
     Browser* browser = LaunchWebAppBrowser(app_id);
     return BrowserView::GetBrowserViewForBrowser(browser);
diff --git a/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc b/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc
index 812e89f..99ae90b 100644
--- a/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc
+++ b/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc
@@ -22,7 +22,7 @@
 #include "chrome/browser/ui/views/page_action/page_action_icon_view.h"
 #include "chrome/browser/ui/views/web_apps/web_app_info_image_source.h"
 #include "chrome/browser/ui/views/web_apps/web_app_views_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_prefs_utils.h"
@@ -102,7 +102,7 @@
   // PWAs should always be configured not to open in a browser tab.
   if (web_app_info_->user_display_mode.has_value()) {
     DCHECK_NE(*web_app_info_->user_display_mode,
-              web_app::UserDisplayMode::kBrowser);
+              web_app::mojom::UserDisplayMode::kBrowser);
   }
 
   const ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get();
@@ -140,8 +140,9 @@
     tabbed_window_checkbox_ = labels->AddChildView(
         std::make_unique<views::Checkbox>(l10n_util::GetStringUTF16(
             IDS_BOOKMARK_APP_BUBBLE_OPEN_AS_TABBED_WINDOW)));
-    tabbed_window_checkbox_->SetChecked(web_app_info_->user_display_mode ==
-                                        web_app::UserDisplayMode::kTabbed);
+    tabbed_window_checkbox_->SetChecked(
+        web_app_info_->user_display_mode ==
+        web_app::mojom::UserDisplayMode::kTabbed);
   }
 
   SetHighlightedButton(highlight_icon_button_);
@@ -190,8 +191,8 @@
   DCHECK(web_app_info_);
   web_app_info_->user_display_mode =
       tabbed_window_checkbox_ && tabbed_window_checkbox_->GetChecked()
-          ? web_app::UserDisplayMode::kTabbed
-          : web_app::UserDisplayMode::kStandalone;
+          ? web_app::mojom::UserDisplayMode::kTabbed
+          : web_app::mojom::UserDisplayMode::kStandalone;
 
   if (iph_state_ == chrome::PwaInProductHelpState::kShown) {
     web_app::AppId app_id = web_app::GenerateAppId(web_app_info_->manifest_id,
diff --git a/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view_browsertest.cc b/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view_browsertest.cc
index 2c9c289..f656071c 100644
--- a/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view_browsertest.cc
@@ -11,8 +11,8 @@
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -36,7 +36,7 @@
     auto app_info = std::make_unique<WebAppInstallInfo>();
     app_info->title = u"Test app 2";
     app_info->start_url = GURL("https://example2.com");
-    app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    app_info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
     return app_info;
   }
 
@@ -65,7 +65,7 @@
   app_info = std::make_unique<WebAppInstallInfo>();
   app_info->title = u"Test app 3";
   app_info->start_url = GURL("https://example3.com");
-  app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  app_info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
   chrome::ShowPWAInstallBubble(
       browser->tab_strip_model()->GetActiveWebContents(), std::move(app_info),
       base::DoNothing());
diff --git a/chrome/browser/ui/views/web_apps/web_app_confirmation_view.cc b/chrome/browser/ui/views/web_apps/web_app_confirmation_view.cc
index 70aecd2..aed3eaad 100644
--- a/chrome/browser/ui/views/web_apps/web_app_confirmation_view.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_confirmation_view.cc
@@ -14,7 +14,7 @@
 #include "build/build_config.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/web_apps/web_app_info_image_source.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/grit/generated_resources.h"
@@ -146,22 +146,25 @@
             .SetText(
                 l10n_util::GetStringUTF16(IDS_BOOKMARK_APP_BUBBLE_OPEN_AS_TAB))
             .SetGroup(kRadioGroupId)
-            .SetChecked(display_mode == web_app::UserDisplayMode::kBrowser),
+            .SetChecked(display_mode ==
+                        web_app::mojom::UserDisplayMode::kBrowser),
         views::Builder<views::View>(),  // Column skip.
         views::Builder<views::RadioButton>()
             .CopyAddressTo(&open_as_window_radio_)
             .SetText(l10n_util::GetStringUTF16(
                 IDS_BOOKMARK_APP_BUBBLE_OPEN_AS_WINDOW))
             .SetGroup(kRadioGroupId)
-            .SetChecked(display_mode != web_app::UserDisplayMode::kBrowser &&
-                        display_mode != web_app::UserDisplayMode::kTabbed),
+            .SetChecked(
+                display_mode != web_app::mojom::UserDisplayMode::kBrowser &&
+                display_mode != web_app::mojom::UserDisplayMode::kTabbed),
         views::Builder<views::View>(),  // Column skip.
         views::Builder<views::RadioButton>()
             .CopyAddressTo(&open_as_tabbed_window_radio_)
             .SetText(l10n_util::GetStringUTF16(
                 IDS_BOOKMARK_APP_BUBBLE_OPEN_AS_TABBED_WINDOW))
             .SetGroup(kRadioGroupId)
-            .SetChecked(display_mode == web_app::UserDisplayMode::kTabbed));
+            .SetChecked(display_mode ==
+                        web_app::mojom::UserDisplayMode::kTabbed));
   } else {
     builder.AddChildren(
         views::Builder<views::View>(),  // Column skip.
@@ -169,7 +172,8 @@
             .CopyAddressTo(&open_as_window_checkbox_)
             .SetText(l10n_util::GetStringUTF16(
                 IDS_BOOKMARK_APP_BUBBLE_OPEN_AS_WINDOW))
-            .SetChecked(display_mode != web_app::UserDisplayMode::kBrowser));
+            .SetChecked(display_mode !=
+                        web_app::mojom::UserDisplayMode::kBrowser));
   }
 
   std::move(builder).BuildChildren();
@@ -204,18 +208,19 @@
   web_app_info_->title = GetTrimmedTitle();
   if (ShowRadioButtons()) {
     if (open_as_tabbed_window_radio_->GetChecked()) {
-      web_app_info_->user_display_mode = web_app::UserDisplayMode::kTabbed;
+      web_app_info_->user_display_mode =
+          web_app::mojom::UserDisplayMode::kTabbed;
     } else {
       web_app_info_->user_display_mode =
           open_as_window_radio_->GetChecked()
-              ? web_app::UserDisplayMode::kStandalone
-              : web_app::UserDisplayMode::kBrowser;
+              ? web_app::mojom::UserDisplayMode::kStandalone
+              : web_app::mojom::UserDisplayMode::kBrowser;
     }
   } else {
     web_app_info_->user_display_mode =
         open_as_window_checkbox_->GetChecked()
-            ? web_app::UserDisplayMode::kStandalone
-            : web_app::UserDisplayMode::kBrowser;
+            ? web_app::mojom::UserDisplayMode::kStandalone
+            : web_app::mojom::UserDisplayMode::kBrowser;
   }
   std::move(callback_).Run(true, std::move(web_app_info_));
   return true;
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
index 6dd1fc72..ca14d17 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -67,6 +67,7 @@
 #include "chrome/browser/web_applications/app_service/web_app_publisher_helper.h"
 #include "chrome/browser/web_applications/commands/run_on_os_login_command.h"
 #include "chrome/browser/web_applications/manifest_update_manager.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/web_app_file_handler_registration.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcut.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_constants.h"
@@ -75,7 +76,6 @@
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_callback_app_identity.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
@@ -673,7 +673,7 @@
                    GURL app_scope,
                    apps::RunOnOsLoginMode run_on_os_login_mode,
                    blink::mojom::DisplayMode effective_display_mode,
-                   absl::optional<UserDisplayMode> user_display_mode,
+                   absl::optional<mojom::UserDisplayMode> user_display_mode,
                    std::string manifest_launcher_icon_filename,
                    bool installed_locally,
                    bool shortcut_created)
@@ -1767,7 +1767,8 @@
 #if BUILDFLAG(IS_CHROMEOS)
   auto& sync_bridge =
       WebAppProvider::GetForTest(profile())->sync_bridge_unsafe();
-  sync_bridge.SetAppUserDisplayMode(app_id, UserDisplayMode::kBrowser, true);
+  sync_bridge.SetAppUserDisplayMode(app_id, mojom::UserDisplayMode::kBrowser,
+                                    true);
   AppWindowModeWaiter(profile(), app_id, apps::WindowMode::kBrowser).Await();
 #else
   auto app_management_page_handler = CreateAppManagementPageHandler(profile());
@@ -1787,7 +1788,8 @@
 #if BUILDFLAG(IS_CHROMEOS)
   auto& sync_bridge =
       WebAppProvider::GetForTest(profile())->sync_bridge_unsafe();
-  sync_bridge.SetAppUserDisplayMode(app_id, UserDisplayMode::kStandalone, true);
+  sync_bridge.SetAppUserDisplayMode(app_id, mojom::UserDisplayMode::kStandalone,
+                                    true);
   AppWindowModeWaiter(profile(), app_id, apps::WindowMode::kWindow).Await();
 #else
   auto app_management_page_handler = CreateAppManagementPageHandler(profile());
@@ -2133,7 +2135,7 @@
   absl::optional<AppState> app_state =
       GetAppBySiteMode(after_state_change_action_state_.get(), profile(), site);
   ASSERT_TRUE(app_state.has_value());
-  EXPECT_EQ(app_state->user_display_mode, UserDisplayMode::kBrowser);
+  EXPECT_EQ(app_state->user_display_mode, mojom::UserDisplayMode::kBrowser);
   AfterStateCheckAction();
 }
 
@@ -2144,7 +2146,7 @@
   absl::optional<AppState> app_state =
       GetAppBySiteMode(after_state_change_action_state_.get(), profile(), site);
   ASSERT_TRUE(app_state.has_value());
-  EXPECT_EQ(app_state->user_display_mode, UserDisplayMode::kStandalone);
+  EXPECT_EQ(app_state->user_display_mode, mojom::UserDisplayMode::kStandalone);
   AfterStateCheckAction();
 }
 
@@ -2564,7 +2566,7 @@
 }
 
 void WebAppIntegrationTestDriver::CheckUserDisplayModeInternal(
-    UserDisplayMode user_display_mode) {
+    mojom::UserDisplayMode user_display_mode) {
   if (!BeforeStateCheckAction(__FUNCTION__))
     return;
   absl::optional<AppState> app_state = GetStateForAppId(
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h
index 1f7759c..0506e77 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h
@@ -149,7 +149,7 @@
            GURL app_scope,
            apps::RunOnOsLoginMode run_on_os_login_mode,
            blink::mojom::DisplayMode effective_display_mode,
-           absl::optional<UserDisplayMode> user_display_mode,
+           absl::optional<mojom::UserDisplayMode> user_display_mode,
            std::string manifest_launcher_icon_filename,
            bool is_installed_locally,
            bool is_shortcut_created);
@@ -162,7 +162,7 @@
   GURL scope;
   apps::RunOnOsLoginMode run_on_os_login_mode;
   blink::mojom::DisplayMode effective_display_mode;
-  absl::optional<UserDisplayMode> user_display_mode;
+  absl::optional<mojom::UserDisplayMode> user_display_mode;
   std::string manifest_launcher_icon_filename;
   bool is_installed_locally;
   bool is_shortcut_created;
@@ -319,7 +319,7 @@
   void CheckSiteHandlesFile(Site site, FileExtension file_extension);
   void CheckSiteNotHandlesFile(Site site, FileExtension file_extension);
   void CheckUserCannotSetRunOnOsLogin(Site site);
-  void CheckUserDisplayModeInternal(UserDisplayMode user_display_mode);
+  void CheckUserDisplayModeInternal(mojom::UserDisplayMode user_display_mode);
   void CheckWindowClosed();
   void CheckWindowCreated();
   void CheckWindowNotCreated();
diff --git a/chrome/browser/ui/views/web_apps/web_app_tab_strip_browsertest.cc b/chrome/browser/ui/views/web_apps/web_app_tab_strip_browsertest.cc
index d31e9e3..bc4328c 100644
--- a/chrome/browser/ui/views/web_apps/web_app_tab_strip_browsertest.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_tab_strip_browsertest.cc
@@ -21,8 +21,8 @@
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/ui/web_applications/web_app_launch_utils.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -79,7 +79,7 @@
     web_app_info->scope = start_url.GetWithoutFilename();
     web_app_info->title = u"Test app";
     web_app_info->background_color = kAppBackgroundColor;
-    web_app_info->user_display_mode = UserDisplayMode::kTabbed;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kTabbed;
     AppId app_id = test::InstallWebApp(profile, std::move(web_app_info));
 
     Browser* app_browser = LaunchWebAppBrowser(profile, app_id);
@@ -171,7 +171,7 @@
             [](content::WebContents*,
                std::unique_ptr<WebAppInstallInfo> web_app_info,
                WebAppInstallationAcceptanceCallback acceptance_callback) {
-              web_app_info->user_display_mode = UserDisplayMode::kTabbed;
+              web_app_info->user_display_mode = mojom::UserDisplayMode::kTabbed;
               std::move(acceptance_callback)
                   .Run(/*user_accepted=*/true, std::move(web_app_info));
             }),
diff --git a/chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_browsertest.cc b/chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_browsertest.cc
index b81c0ac7..71e583b2 100644
--- a/chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_browsertest.cc
@@ -18,10 +18,10 @@
 #include "chrome/browser/ui/test/test_browser_dialog.h"
 #include "chrome/browser/ui/views/web_apps/web_app_uninstall_dialog_view.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/keep_alive_registry/keep_alive_types.h"
@@ -45,7 +45,8 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = example_url;
   web_app_info->scope = example_url;
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
   return web_app::test::InstallWebApp(profile, std::move(web_app_info));
 }
 
diff --git a/chrome/browser/ui/web_applications/create_shortcut_browsertest.cc b/chrome/browser/ui/web_applications/create_shortcut_browsertest.cc
index 353fcb97..57d8bc5d 100644
--- a/chrome/browser/ui/web_applications/create_shortcut_browsertest.cc
+++ b/chrome/browser/ui/web_applications/create_shortcut_browsertest.cc
@@ -17,8 +17,8 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
@@ -80,7 +80,7 @@
   EXPECT_EQ(registrar().GetAppShortName(app_id), GetInstallableAppName());
   // Shortcut apps to PWAs should launch in a tab.
   EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kBrowser);
+            mojom::UserDisplayMode::kBrowser);
 
   EXPECT_EQ(0, user_action_tester.GetActionCount("InstallWebAppFromMenu"));
   EXPECT_EQ(1, user_action_tester.GetActionCount("CreateShortcut"));
@@ -127,7 +127,8 @@
   NavigateToURLAndWait(browser(), GetInstallableAppURL());
   AppId app_id = InstallShortcutAppForCurrentUrl();
   // Change launch container to open in window.
-  sync_bridge().SetAppUserDisplayMode(app_id, UserDisplayMode::kStandalone,
+  sync_bridge().SetAppUserDisplayMode(app_id,
+                                      mojom::UserDisplayMode::kStandalone,
                                       /*is_user_action=*/false);
 
   Browser* new_browser =
@@ -235,7 +236,7 @@
   EXPECT_EQ(registrar().GetAppShortName(app_id), GetInstallableAppName());
   // Shortcut apps to PWAs should launch in a tab.
   EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kBrowser);
+            mojom::UserDisplayMode::kBrowser);
   // TODO(crbug.com/1275945): We need to wait a bit longer for the
   // WebAppInstallTask to complete before starting another install.
   // Move the install/update/uninstall events out of
@@ -247,7 +248,7 @@
   InstallShortcutAppForCurrentUrl(/*open_as_window=*/true);
   // Re-install with enabling open_as_window should update user display mode.
   EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
 }
 
 IN_PROC_BROWSER_TEST_F(CreateShortcutBrowserTest, OpenShortcutWindowOnlyOnce) {
diff --git a/chrome/browser/ui/web_applications/lacros_web_app_shelf_browsertest.cc b/chrome/browser/ui/web_applications/lacros_web_app_shelf_browsertest.cc
index 470e417..71ed61e 100644
--- a/chrome/browser/ui/web_applications/lacros_web_app_shelf_browsertest.cc
+++ b/chrome/browser/ui/web_applications/lacros_web_app_shelf_browsertest.cc
@@ -19,11 +19,11 @@
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/app_registry_cache_waiter.h"
 #include "chrome/browser/web_applications/test/service_worker_registration_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_sync_bridge.h"
 #include "chrome/browser/web_applications/web_app_utils.h"
@@ -248,7 +248,7 @@
         app1_id, static_cast<uint32_t>(ShelfItemState::kActive)));
     waiter.PinOrUnpinItemInShelf(app1_id, /*pin=*/true);
     CloseAndWait(app_browser1);
-    sync_bridge.SetAppUserDisplayMode(app1_id, UserDisplayMode::kBrowser,
+    sync_bridge.SetAppUserDisplayMode(app1_id, mojom::UserDisplayMode::kBrowser,
                                       /*is_user_action=*/true);
     AppWindowModeWaiter(profile(), app1_id, apps::WindowMode::kBrowser).Await();
 
@@ -257,7 +257,7 @@
         app2_id, static_cast<uint32_t>(ShelfItemState::kActive)));
     waiter.PinOrUnpinItemInShelf(app2_id, /*pin=*/true);
     CloseAndWait(app_browser2);
-    sync_bridge.SetAppUserDisplayMode(app2_id, UserDisplayMode::kBrowser,
+    sync_bridge.SetAppUserDisplayMode(app2_id, mojom::UserDisplayMode::kBrowser,
                                       /*is_user_action=*/true);
     AppWindowModeWaiter(profile(), app2_id, apps::WindowMode::kBrowser).Await();
   }
@@ -380,7 +380,7 @@
 
   // Launch app1 in a browser tab (only).
   {
-    sync_bridge.SetAppUserDisplayMode(app1_id, UserDisplayMode::kBrowser,
+    sync_bridge.SetAppUserDisplayMode(app1_id, mojom::UserDisplayMode::kBrowser,
                                       /*is_user_action=*/false);
     AppWindowModeWaiter(profile(), app1_id, apps::WindowMode::kBrowser).Await();
 
diff --git a/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc b/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
index 5da92ed..5bacd4a 100644
--- a/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
+++ b/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
@@ -35,9 +35,9 @@
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/web_applications/commands/fetch_manifest_and_install_command.h"
 #include "chrome/browser/web_applications/external_install_options.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/service_worker_registration_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
@@ -98,7 +98,7 @@
     content::WebContents* initiator_web_contents,
     std::unique_ptr<WebAppInstallInfo> web_app_info,
     WebAppInstallationAcceptanceCallback acceptance_callback) {
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   std::move(acceptance_callback)
       .Run(
           /*user_accepted=*/true, std::move(web_app_info));
@@ -285,8 +285,8 @@
 ExternalInstallOptions CreateInstallOptions(
     const GURL& url,
     const ExternalInstallSource& source) {
-  ExternalInstallOptions install_options(url, UserDisplayMode::kStandalone,
-                                         source);
+  ExternalInstallOptions install_options(
+      url, mojom::UserDisplayMode::kStandalone, source);
   // Avoid creating real shortcuts in tests.
   install_options.add_to_applications_menu = false;
   install_options.add_to_desktop = false;
diff --git a/chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.cc b/chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.cc
index f166e46..c4e806e 100644
--- a/chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.cc
+++ b/chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.cc
@@ -19,9 +19,9 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/app_registry_cache_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -280,7 +280,8 @@
   web_app_info->scope = https_server_.GetURL(app_host, app_scope);
   web_app_info->title = base::UTF8ToUTF16(GetAppName());
   web_app_info->description = u"Test description";
-  web_app_info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode =
+      web_app::mojom::UserDisplayMode::kStandalone;
 
   AppId app_id = test::InstallWebApp(profile(), std::move(web_app_info));
   DCHECK(!app_id.empty());
diff --git a/chrome/browser/ui/web_applications/web_app_badging_browsertest.cc b/chrome/browser/ui/web_applications/web_app_badging_browsertest.cc
index 4d55c61..ed6cd25e 100644
--- a/chrome/browser/ui/web_applications/web_app_badging_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_badging_browsertest.cc
@@ -15,9 +15,9 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/app_registry_cache_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
@@ -54,7 +54,7 @@
     auto sub_app_info = std::make_unique<WebAppInstallInfo>();
     sub_app_info->start_url = sub_start_url;
     sub_app_info->scope = sub_start_url;
-    sub_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    sub_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     sub_app_id_ = InstallWebApp(std::move(sub_app_info));
 
     AppReadinessWaiter(profile(), cross_site_app_id_).Await();
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest.cc b/chrome/browser/ui/web_applications/web_app_browsertest.cc
index f974fcf..1546f39 100644
--- a/chrome/browser/ui/web_applications/web_app_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_browsertest.cc
@@ -58,10 +58,10 @@
 #include "chrome/browser/ui/web_applications/web_app_ui_utils.h"
 #include "chrome/browser/ui/window_sizer/window_sizer.h"
 #include "chrome/browser/web_applications/external_install_options.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcut.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
@@ -215,8 +215,8 @@
     web_app_info->scope = app_url;
     web_app_info->display_mode = display_mode;
     web_app_info->user_display_mode = open_as_window
-                                          ? UserDisplayMode::kStandalone
-                                          : UserDisplayMode::kBrowser;
+                                          ? mojom::UserDisplayMode::kStandalone
+                                          : mojom::UserDisplayMode::kBrowser;
     if (display_override_mode)
       web_app_info->display_override.push_back(*display_override_mode);
 
@@ -1073,7 +1073,7 @@
 
   // Installed PWAs should launch in their own window.
   EXPECT_EQ(provider->registrar_unsafe().GetAppUserDisplayMode(app_id),
-            web_app::UserDisplayMode::kStandalone);
+            web_app::mojom::UserDisplayMode::kStandalone);
 
   // Installed PWAs should have install time set.
   EXPECT_TRUE(provider->registrar_unsafe().GetAppInstallTime(app_id) >=
@@ -1096,7 +1096,8 @@
   // Change display mode to open in tab.
   auto* provider = WebAppProvider::GetForTest(profile());
   provider->sync_bridge_unsafe().SetAppUserDisplayMode(
-      app_id, web_app::UserDisplayMode::kBrowser, /*is_user_action=*/false);
+      app_id, web_app::mojom::UserDisplayMode::kBrowser,
+      /*is_user_action=*/false);
 
   Browser* const new_browser =
       NavigateInNewWindowAndAwaitInstallabilityCheck(GetInstallableAppURL());
@@ -1130,7 +1131,8 @@
   // Change display mode to open in tab.
   auto* provider = WebAppProvider::GetForTest(profile());
   provider->sync_bridge_unsafe().SetAppUserDisplayMode(
-      app_id, web_app::UserDisplayMode::kBrowser, /*is_user_action=*/false);
+      app_id, web_app::mojom::UserDisplayMode::kBrowser,
+      /*is_user_action=*/false);
 
   NavigateToURLAndWait(browser(), app_url);
   EXPECT_EQ(GetAppMenuCommandState(IDC_CREATE_SHORTCUT, browser()), kEnabled);
@@ -1715,7 +1717,7 @@
   web_app_info->start_url = app_url;
   web_app_info->scope = app_url.GetWithoutFilename();
   web_app_info->display_mode = DisplayMode::kBrowser;
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   web_app_info->title = u"A Shortcut App";
   const AppId app_id = InstallWebApp(std::move(web_app_info));
 
@@ -1735,7 +1737,7 @@
 
   auto* provider = WebAppProvider::GetForTest(profile());
   EXPECT_EQ(provider->registrar_unsafe().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
   EXPECT_EQ(provider->registrar_unsafe().GetAppEffectiveDisplayMode(app_id),
             DisplayMode::kMinimalUi);
   EXPECT_FALSE(
@@ -1943,7 +1945,7 @@
 
   WebAppProvider::GetForTest(profile())
       ->sync_bridge_unsafe()
-      .SetAppUserDisplayMode(app_id, web_app::UserDisplayMode::kBrowser,
+      .SetAppUserDisplayMode(app_id, web_app::mojom::UserDisplayMode::kBrowser,
                              /*is_user_action=*/false);
   EXPECT_EQ(browser()->tab_strip_model()->count(), 1);
   EXPECT_TRUE(chrome::ExecuteCommand(app_browser, IDC_NEW_WINDOW));
diff --git a/chrome/browser/ui/web_applications/web_app_controller_browsertest.cc b/chrome/browser/ui/web_applications/web_app_controller_browsertest.cc
index 0825a72..3ae9263 100644
--- a/chrome/browser/ui/web_applications/web_app_controller_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_controller_browsertest.cc
@@ -14,9 +14,9 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_callback_app_identity.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -72,7 +72,7 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = start_url;
   web_app_info->scope = start_url.GetWithoutFilename();
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   web_app_info->title = u"A Web App";
   return web_app::test::InstallWebApp(profile(), std::move(web_app_info));
 }
diff --git a/chrome/browser/ui/web_applications/web_app_dark_mode_browsertest.cc b/chrome/browser/ui/web_applications/web_app_dark_mode_browsertest.cc
index 388f84ca..7befdab 100644
--- a/chrome/browser/ui/web_applications/web_app_dark_mode_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_dark_mode_browsertest.cc
@@ -8,8 +8,8 @@
 #include "chrome/browser/ui/web_applications/web_app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
 #include "chrome/browser/web_applications/manifest_update_manager.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "components/embedder_support/switches.h"
@@ -40,7 +40,7 @@
     web_app_info->start_url = https_server()->GetURL("/hung");
     web_app_info->title = u"A Web App";
     web_app_info->display_mode = DisplayMode::kStandalone;
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     web_app_info->theme_color = SK_ColorBLUE;
     web_app_info->background_color = SK_ColorBLUE;
     web_app_info->dark_mode_theme_color = SK_ColorRED;
diff --git a/chrome/browser/ui/web_applications/web_app_dialog_utils.cc b/chrome/browser/ui/web_applications/web_app_dialog_utils.cc
index ef1cc6e..414dd56 100644
--- a/chrome/browser/ui/web_applications/web_app_dialog_utils.cc
+++ b/chrome/browser/ui/web_applications/web_app_dialog_utils.cc
@@ -16,7 +16,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
@@ -48,7 +48,7 @@
 
   switch (flow) {
     case WebAppInstallFlow::kInstallSite:
-      web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+      web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
       if (base::FeatureList::IsEnabled(
               webapps::features::kDesktopPWAsDetailedInstallDialog) &&
           webapps::AppBannerManager::FromWebContents(initiator_web_contents)
diff --git a/chrome/browser/ui/web_applications/web_app_engagement_browsertest.cc b/chrome/browser/ui/web_applications/web_app_engagement_browsertest.cc
index eee8102..49ede19 100644
--- a/chrome/browser/ui/web_applications/web_app_engagement_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_engagement_browsertest.cc
@@ -24,7 +24,7 @@
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/chrome_switches.h"
@@ -201,7 +201,7 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = example_url;
   web_app_info->scope = example_url;
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   AppId app_id = InstallWebAppAndCountApps(std::move(web_app_info));
 
   Browser* app_browser = LaunchWebAppBrowserAndWait(app_id);
@@ -234,7 +234,7 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = example_url;
   web_app_info->scope = example_url;
-  web_app_info->user_display_mode = UserDisplayMode::kBrowser;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kBrowser;
   AppId app_id = InstallWebAppAndCountApps(std::move(web_app_info));
 
   Browser* browser = LaunchBrowserForWebAppInTab(app_id);
@@ -270,7 +270,7 @@
   // If app has no scope then UrlHandlers::GetUrlHandlers are empty. Therefore,
   // the app is counted as installed via the Create Shortcut button.
   web_app_info->scope = GURL();
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   AppId app_id = InstallWebAppAndCountApps(std::move(web_app_info));
 
   Browser* browser = LaunchWebAppBrowserAndWait(app_id);
@@ -442,7 +442,7 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = start_url;
   web_app_info->scope = start_url;
-  web_app_info->user_display_mode = UserDisplayMode::kBrowser;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kBrowser;
   AppId app_id = InstallWebAppAndCountApps(std::move(web_app_info));
 
   Browser* browser = LaunchBrowserForWebAppInTab(app_id);
@@ -612,7 +612,7 @@
       embedded_test_server()->GetURL("/banners/manifest_test_page.html"));
 
   ExternalInstallOptions install_options = CreateInstallOptions(example_url);
-  install_options.user_display_mode = UserDisplayMode::kBrowser;
+  install_options.user_display_mode = mojom::UserDisplayMode::kBrowser;
   auto result =
       ExternallyManagedAppManagerInstall(browser()->profile(), install_options);
   ASSERT_EQ(webapps::InstallResultCode::kSuccessNewInstall, result.code);
diff --git a/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc b/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
index d74b4fe..a619fda 100644
--- a/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
@@ -16,9 +16,9 @@
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -259,7 +259,7 @@
   void InstallTestTabbedApp() {
     WebAppLinkCapturingBrowserTest::InstallTestApp("/web_apps/basic.html");
     provider().sync_bridge_unsafe().SetAppUserDisplayMode(
-        app_id_, UserDisplayMode::kTabbed, /*is_user_action=*/false);
+        app_id_, mojom::UserDisplayMode::kTabbed, /*is_user_action=*/false);
   }
 
  private:
diff --git a/chrome/browser/ui/web_applications/web_app_metrics_browsertest.cc b/chrome/browser/ui/web_applications/web_app_metrics_browsertest.cc
index d28406f3..aa045fe7 100644
--- a/chrome/browser/ui/web_applications/web_app_metrics_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_metrics_browsertest.cc
@@ -14,8 +14,8 @@
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
 #include "chrome/browser/ui/web_applications/web_app_metrics.h"
 #include "chrome/browser/web_applications/daily_metrics_helper.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
@@ -54,7 +54,7 @@
     web_app_info->start_url = GetInstallableAppURL();
     web_app_info->title = u"A Web App";
     web_app_info->display_mode = DisplayMode::kStandalone;
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     return web_app::test::InstallWebApp(profile(), std::move(web_app_info));
   }
 
@@ -111,7 +111,7 @@
   web_app_info->start_url = GetInstallableAppURL();
   web_app_info->title = u"A Web App";
   web_app_info->display_mode = DisplayMode::kStandalone;
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   web_app::test::InstallWebApp(profile(), std::move(web_app_info));
 
   AddBlankTabAndShow(browser());
@@ -154,7 +154,7 @@
   web_app_info->start_url = GetInstallableAppURL();
   web_app_info->title = u"A Web App";
   web_app_info->display_mode = DisplayMode::kStandalone;
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   AppId app_id =
       web_app::test::InstallWebApp(profile(), std::move(web_app_info));
 
diff --git a/chrome/browser/ui/web_applications/web_app_navigate_browsertest.cc b/chrome/browser/ui/web_applications/web_app_navigate_browsertest.cc
index bd59d017a..0d14f2a2 100644
--- a/chrome/browser/ui/web_applications/web_app_navigate_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_navigate_browsertest.cc
@@ -13,7 +13,7 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_tab_helper.h"
@@ -185,8 +185,8 @@
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = example_url;
   web_app_info->scope = example_url;
-  web_app_info->user_display_mode =
-      absl::make_optional<UserDisplayMode>(UserDisplayMode::kStandalone);
+  web_app_info->user_display_mode = absl::make_optional<mojom::UserDisplayMode>(
+      mojom::UserDisplayMode::kStandalone);
   AppId app_id = InstallWebApp(std::move(web_app_info));
 
   Browser* app_browser = LaunchWebAppBrowser(app_id);
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc
index 1342e8c..6e84d00 100644
--- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc
+++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc
@@ -27,10 +27,10 @@
 #include "chrome/browser/ui/web_applications/web_app_metrics.h"
 #include "chrome/browser/ui/webui/web_app_internals/web_app_internals_source.h"
 #include "chrome/browser/web_applications/extensions/web_app_extension_shortcut.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_sub_manager.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcut.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_callback_app_identity.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -120,22 +120,22 @@
 
 #endif  // BUILDFLAG(IS_WIN)
 
-UserDisplayMode GetExtensionUserDisplayMode(
+mojom::UserDisplayMode GetExtensionUserDisplayMode(
     Profile* profile,
     const extensions::Extension* extension) {
   // Platform apps always open in an app window and their user preference is
   // meaningless.
   if (extension->is_platform_app())
-    return UserDisplayMode::kStandalone;
+    return mojom::UserDisplayMode::kStandalone;
 
   switch (extensions::GetLaunchContainer(
       extensions::ExtensionPrefs::Get(profile), extension)) {
     case apps::LaunchContainer::kLaunchContainerWindow:
     case apps::LaunchContainer::kLaunchContainerPanelDeprecated:
-      return UserDisplayMode::kStandalone;
+      return mojom::UserDisplayMode::kStandalone;
     case apps::LaunchContainer::kLaunchContainerTab:
     case apps::LaunchContainer::kLaunchContainerNone:
-      return UserDisplayMode::kBrowser;
+      return mojom::UserDisplayMode::kBrowser;
   }
 }
 
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl_browsertest.cc b/chrome/browser/ui/web_applications/web_app_ui_manager_impl_browsertest.cc
index 28510dd..c33f0b75 100644
--- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl_browsertest.cc
@@ -14,11 +14,11 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -59,7 +59,7 @@
   AppId InstallWebApp(const GURL& start_url) {
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = start_url;
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     return web_app::test::InstallWebApp(profile(), std::move(web_app_info));
   }
 
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
index 8f33f7e..b8322c5 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -54,8 +54,8 @@
 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
 #include "chrome/browser/web_applications/extension_status_utils.h"
 #include "chrome/browser/web_applications/extensions/bookmark_app_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
@@ -945,16 +945,16 @@
   if (web_app_provider_->registrar_unsafe().IsInstalled(app_id)) {
     // Don't update the page; it already knows about the launch type change.
     base::AutoReset<bool> auto_reset(&ignore_changes_, true);
-    web_app::UserDisplayMode user_display_mode =
-        web_app::UserDisplayMode::kBrowser;
+    web_app::mojom::UserDisplayMode user_display_mode =
+        web_app::mojom::UserDisplayMode::kBrowser;
     switch (launch_type) {
       case extensions::LAUNCH_TYPE_FULLSCREEN:
       case extensions::LAUNCH_TYPE_WINDOW:
-        user_display_mode = web_app::UserDisplayMode::kStandalone;
+        user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
         break;
       case extensions::LAUNCH_TYPE_PINNED:
       case extensions::LAUNCH_TYPE_REGULAR:
-        user_display_mode = web_app::UserDisplayMode::kBrowser;
+        user_display_mode = web_app::mojom::UserDisplayMode::kBrowser;
         break;
       case extensions::LAUNCH_TYPE_INVALID:
       case extensions::NUM_LAUNCH_TYPES:
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index d807588e..c7a89d12 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -4,6 +4,7 @@
 
 import("//build/config/chromeos/ui_mode.gni")
 import("//chrome/browser/buildflags.gni")
+import("//mojo/public/tools/bindings/mojom.gni")
 
 source_set("web_applications") {
   sources = [
@@ -452,6 +453,7 @@
   }
 
   public_deps = [
+    "//chrome/browser/web_applications/mojom:mojom_web_apps_enum",
     "//chrome/browser/web_applications/proto",
     "//components/permissions:permissions",
     "//components/services/app_service/public/cpp:app_share_target",
diff --git a/chrome/browser/web_applications/adjustments/preinstalled_web_app_duplication_fixer_browsertest.cc b/chrome/browser/web_applications/adjustments/preinstalled_web_app_duplication_fixer_browsertest.cc
index 46d2011..29663a8 100644
--- a/chrome/browser/web_applications/adjustments/preinstalled_web_app_duplication_fixer_browsertest.cc
+++ b/chrome/browser/web_applications/adjustments/preinstalled_web_app_duplication_fixer_browsertest.cc
@@ -20,7 +20,7 @@
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
 
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/user_uninstalled_preinstalled_web_app_prefs.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -94,7 +94,8 @@
     InProcessBrowserTest::SetUpOnMainThread();
     test::WaitUntilReady(provider_);
 
-    ExternalInstallOptions options(install_url(), UserDisplayMode::kStandalone,
+    ExternalInstallOptions options(install_url(),
+                                   mojom::UserDisplayMode::kStandalone,
                                    ExternalInstallSource::kExternalDefault);
     options.user_type_allowlist = {"unmanaged"};
     options.uninstall_and_replace = {chrome_app_id()};
diff --git a/chrome/browser/web_applications/app_registrar_observer.h b/chrome/browser/web_applications/app_registrar_observer.h
index f703e099..cd413f0 100644
--- a/chrome/browser/web_applications/app_registrar_observer.h
+++ b/chrome/browser/web_applications/app_registrar_observer.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_WEB_APPLICATIONS_APP_REGISTRAR_OBSERVER_H_
 
 #include "base/observer_list_types.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 
@@ -54,7 +54,7 @@
                                           const base::Time& time) {}
   virtual void OnWebAppUserDisplayModeChanged(
       const AppId& app_id,
-      UserDisplayMode user_display_mode) {}
+      mojom::UserDisplayMode user_display_mode) {}
   virtual void OnWebAppRunOnOsLoginModeChanged(
       const AppId& app_id,
       RunOnOsLoginMode run_on_os_login_mode) {}
diff --git a/chrome/browser/web_applications/app_service/BUILD.gn b/chrome/browser/web_applications/app_service/BUILD.gn
index 5467ab5..4ad8262 100644
--- a/chrome/browser/web_applications/app_service/BUILD.gn
+++ b/chrome/browser/web_applications/app_service/BUILD.gn
@@ -49,6 +49,7 @@
       "//chrome/browser/ash",
       "//chrome/browser/ash/crosapi",
       "//chrome/browser/ash/system_web_apps",
+      "//chrome/browser/chromeos",
       "//components/app_restore",
       "//components/services/app_service/public/cpp:instance_update",
       "//extensions/browser/api/file_handlers",
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
index 318c563..bfd9902 100644
--- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
+++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
@@ -63,10 +63,10 @@
 #include "chrome/browser/ui/web_applications/web_app_launch_manager.h"
 #include "chrome/browser/ui/web_applications/web_app_ui_manager_impl.h"
 #include "chrome/browser/web_applications/locks/app_lock.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/os_integration/web_app_file_handler_manager.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_chromeos_data.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
@@ -129,7 +129,7 @@
 #include "chrome/browser/ash/system_web_apps/system_web_app_manager.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_data.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_delegate.h"
-#include "chrome/browser/chromeos/arc/arc_web_contents_data.h"
+#include "chrome/browser/chromeos/arc/arc_web_contents_data.h"  // nogncheck
 #include "components/app_restore/app_launch_info.h"
 #include "components/app_restore/full_restore_save_handler.h"
 #include "components/app_restore/full_restore_utils.h"
@@ -1287,24 +1287,25 @@
 
 void WebAppPublisherHelper::SetWindowMode(const std::string& app_id,
                                           apps::WindowMode window_mode) {
-  auto user_display_mode = UserDisplayMode::kStandalone;
+  auto user_display_mode = mojom::UserDisplayMode::kStandalone;
   switch (window_mode) {
     case apps::WindowMode::kBrowser:
-      user_display_mode = UserDisplayMode::kBrowser;
+      user_display_mode = mojom::UserDisplayMode::kBrowser;
       break;
     case apps::WindowMode::kUnknown:
     case apps::WindowMode::kWindow:
-      user_display_mode = UserDisplayMode::kStandalone;
+      user_display_mode = mojom::UserDisplayMode::kStandalone;
       break;
     case apps::WindowMode::kTabbedWindow:
-      user_display_mode = UserDisplayMode::kTabbed;
+      user_display_mode = mojom::UserDisplayMode::kTabbed;
       break;
   }
   provider_->scheduler().ScheduleCallbackWithLock(
       "WebAppPublisherHelper::SetWindowMode",
       std::make_unique<AppLockDescription, base::flat_set<AppId>>({app_id}),
       base::BindOnce(
-          [](AppId app_id, UserDisplayMode user_display_mode, AppLock& lock) {
+          [](AppId app_id, mojom::UserDisplayMode user_display_mode,
+             AppLock& lock) {
             lock.sync_bridge().SetAppUserDisplayMode(app_id, user_display_mode,
                                                      /*is_user_action=*/true);
           },
@@ -1495,7 +1496,7 @@
 
 void WebAppPublisherHelper::OnWebAppUserDisplayModeChanged(
     const AppId& app_id,
-    UserDisplayMode user_display_mode) {
+    mojom::UserDisplayMode user_display_mode) {
   PublishWindowModeUpdate(app_id,
                           registrar().GetAppEffectiveDisplayMode(app_id));
 }
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.h b/chrome/browser/web_applications/app_service/web_app_publisher_helper.h
index 63c7deb..46d4bc4ef 100644
--- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.h
+++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.h
@@ -24,7 +24,7 @@
 #include "chrome/browser/apps/app_service/launch_result_type.h"
 #include "chrome/browser/apps/app_service/paused_apps.h"
 #include "chrome/browser/web_applications/app_registrar_observer.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -349,7 +349,7 @@
       const base::Time& last_launch_time) override;
   void OnWebAppUserDisplayModeChanged(
       const AppId& app_id,
-      UserDisplayMode user_display_mode) override;
+      mojom::UserDisplayMode user_display_mode) override;
   void OnWebAppRunOnOsLoginModeChanged(
       const AppId& app_id,
       RunOnOsLoginMode run_on_os_login_mode) override;
diff --git a/chrome/browser/web_applications/commands/externally_managed_install_command_browsertest.cc b/chrome/browser/web_applications/commands/externally_managed_install_command_browsertest.cc
index b014d6f..718810ce 100644
--- a/chrome/browser/web_applications/commands/externally_managed_install_command_browsertest.cc
+++ b/chrome/browser/web_applications/commands/externally_managed_install_command_browsertest.cc
@@ -83,7 +83,7 @@
   EXPECT_TRUE(NavigateAndAwaitInstallabilityCheck(browser(), kWebAppUrl));
 
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kStandalone,
+      kWebAppUrl, mojom::UserDisplayMode::kStandalone,
       ExternalInstallSource::kExternalDefault);
   base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
   provider().command_manager().ScheduleCommand(
@@ -97,7 +97,7 @@
   EXPECT_EQ(result_code, webapps::InstallResultCode::kSuccessNewInstall);
   EXPECT_TRUE(provider().registrar_unsafe().IsLocallyInstalled(app_id));
   EXPECT_EQ(
-      UserDisplayMode::kStandalone,
+      mojom::UserDisplayMode::kStandalone,
       provider().registrar_unsafe().GetAppUserDisplayMode(app_id).value());
 }
 
@@ -109,7 +109,7 @@
   EXPECT_TRUE(NavigateAndAwaitInstallabilityCheck(browser(), kWebAppUrl));
 
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kBrowser,
+      kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kInternalDefault);
 
   base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
@@ -125,7 +125,7 @@
   EXPECT_EQ(result_code, webapps::InstallResultCode::kSuccessNewInstall);
   EXPECT_TRUE(provider().registrar_unsafe().IsLocallyInstalled(app_id));
   EXPECT_EQ(
-      UserDisplayMode::kBrowser,
+      mojom::UserDisplayMode::kBrowser,
       provider().registrar_unsafe().GetAppUserDisplayMode(app_id).value());
 }
 
@@ -137,7 +137,7 @@
   EXPECT_TRUE(NavigateAndAwaitInstallabilityCheck(browser(), kWebAppUrl));
 
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kBrowser,
+      kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
   base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
 
@@ -162,7 +162,7 @@
 
   base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kBrowser,
+      kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
   auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
 
@@ -188,7 +188,7 @@
 
   base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kBrowser,
+      kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
   // This should force the install_params to have a valid manifest, otherwise
   // install will not happen.
@@ -217,7 +217,7 @@
   base::test::TestFuture<const AppId&, webapps::InstallResultCode>
       future_first_install;
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kBrowser,
+      kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kInternalDefault);
 
   provider().command_manager().ScheduleCommand(
@@ -230,10 +230,11 @@
   webapps::InstallResultCode first_install_code = future_first_install.Get<1>();
   EXPECT_EQ(first_install_code, webapps::InstallResultCode::kSuccessNewInstall);
   EXPECT_TRUE(provider().registrar_unsafe().IsLocallyInstalled(first_app_id));
-  EXPECT_EQ(UserDisplayMode::kBrowser, provider()
-                                           .registrar_unsafe()
-                                           .GetAppUserDisplayMode(first_app_id)
-                                           .value());
+  EXPECT_EQ(mojom::UserDisplayMode::kBrowser,
+            provider()
+                .registrar_unsafe()
+                .GetAppUserDisplayMode(first_app_id)
+                .value());
 
   // Now install the same web_app with a different manifest (with updated file
   // handler information) and a different install_url.
@@ -246,7 +247,7 @@
   base::test::TestFuture<const AppId&, webapps::InstallResultCode>
       future_second_install;
   ExternalInstallOptions install_options_policy(
-      kWebAppUrlDifferentManifest, UserDisplayMode::kBrowser,
+      kWebAppUrlDifferentManifest, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
 
   provider().command_manager().ScheduleCommand(
@@ -262,10 +263,11 @@
   EXPECT_EQ(second_install_code,
             webapps::InstallResultCode::kSuccessNewInstall);
   EXPECT_TRUE(provider().registrar_unsafe().IsLocallyInstalled(second_app_id));
-  EXPECT_EQ(UserDisplayMode::kBrowser, provider()
-                                           .registrar_unsafe()
-                                           .GetAppUserDisplayMode(second_app_id)
-                                           .value());
+  EXPECT_EQ(mojom::UserDisplayMode::kBrowser,
+            provider()
+                .registrar_unsafe()
+                .GetAppUserDisplayMode(second_app_id)
+                .value());
 
   // Verify that the file handlers are correctly updated after a
   // second installation. The file handlers should match the ones in
@@ -321,7 +323,7 @@
   base::test::TestFuture<const AppId&, webapps::InstallResultCode>
       future_second_install;
   ExternalInstallOptions install_options_policy(
-      kWebAppUrlDifferentManifest, UserDisplayMode::kBrowser,
+      kWebAppUrlDifferentManifest, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
 
   provider().command_manager().ScheduleCommand(
@@ -337,10 +339,11 @@
   EXPECT_EQ(second_install_code,
             webapps::InstallResultCode::kSuccessNewInstall);
   EXPECT_TRUE(provider().registrar_unsafe().IsLocallyInstalled(second_app_id));
-  EXPECT_EQ(UserDisplayMode::kBrowser, provider()
-                                           .registrar_unsafe()
-                                           .GetAppUserDisplayMode(second_app_id)
-                                           .value());
+  EXPECT_EQ(mojom::UserDisplayMode::kBrowser,
+            provider()
+                .registrar_unsafe()
+                .GetAppUserDisplayMode(second_app_id)
+                .value());
 
   // Verify that the file handlers are correctly updated after a
   // second installation. The file handlers should match the ones in
diff --git a/chrome/browser/web_applications/commands/externally_managed_install_command_unittest.cc b/chrome/browser/web_applications/commands/externally_managed_install_command_unittest.cc
index aba583c..27d7029b 100644
--- a/chrome/browser/web_applications/commands/externally_managed_install_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/externally_managed_install_command_unittest.cc
@@ -14,12 +14,12 @@
 #include "chrome/browser/web_applications/commands/callback_command.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/locks/app_lock.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_data_retriever.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_data_retriever.h"
@@ -155,7 +155,7 @@
 
 TEST_F(ExternallyManagedInstallCommandTest, Success) {
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kStandalone,
+      kWebAppUrl, mojom::UserDisplayMode::kStandalone,
       ExternalInstallSource::kExternalDefault);
 
   auto data_retriever = std::make_unique<FakeDataRetriever>();
@@ -170,7 +170,7 @@
 
 TEST_F(ExternallyManagedInstallCommandTest, GetWebAppInstallInfoFailed) {
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kStandalone,
+      kWebAppUrl, mojom::UserDisplayMode::kStandalone,
       ExternalInstallSource::kExternalDefault);
 
   auto data_retriever = std::make_unique<FakeDataRetriever>();
@@ -190,7 +190,7 @@
     data_retriever->BuildDefaultDataToRetrieve(url, url);
 
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
-    web_app_info->user_display_mode = UserDisplayMode::kBrowser;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kBrowser;
     data_retriever->SetRendererWebAppInstallInfo(std::move(web_app_info));
 
     ExternalInstallOptions install_options(
@@ -198,7 +198,7 @@
         ExternalInstallSource::kExternalDefault);
     auto result = InstallAndWait(install_options, std::move(data_retriever));
 
-    EXPECT_EQ(UserDisplayMode::kBrowser,
+    EXPECT_EQ(mojom::UserDisplayMode::kBrowser,
               provider()
                   ->registrar_unsafe()
                   .GetAppById(result.installed_app_id)
@@ -210,7 +210,7 @@
     data_retriever->BuildDefaultDataToRetrieve(url, url);
 
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     data_retriever->SetRendererWebAppInstallInfo(std::move(web_app_info));
 
     ExternalInstallOptions install_options(
@@ -218,7 +218,7 @@
         ExternalInstallSource::kExternalDefault);
     auto result = InstallAndWait(install_options, std::move(data_retriever));
 
-    EXPECT_EQ(UserDisplayMode::kStandalone,
+    EXPECT_EQ(mojom::UserDisplayMode::kStandalone,
               provider()
                   ->registrar_unsafe()
                   .GetAppById(result.installed_app_id)
@@ -234,15 +234,15 @@
     data_retriever->BuildDefaultDataToRetrieve(url, url);
 
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     data_retriever->SetRendererWebAppInstallInfo(std::move(web_app_info));
 
     ExternalInstallOptions install_options(
-        url, UserDisplayMode::kBrowser,
+        url, mojom::UserDisplayMode::kBrowser,
         ExternalInstallSource::kExternalDefault);
     auto result = InstallAndWait(install_options, std::move(data_retriever));
 
-    EXPECT_EQ(UserDisplayMode::kBrowser,
+    EXPECT_EQ(mojom::UserDisplayMode::kBrowser,
               provider()
                   ->registrar_unsafe()
                   .GetAppById(result.installed_app_id)
@@ -254,15 +254,15 @@
     data_retriever->BuildDefaultDataToRetrieve(url, url);
 
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
-    web_app_info->user_display_mode = UserDisplayMode::kBrowser;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kBrowser;
     data_retriever->SetRendererWebAppInstallInfo(std::move(web_app_info));
 
     ExternalInstallOptions install_options(
-        url, UserDisplayMode::kStandalone,
+        url, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalDefault);
     auto result = InstallAndWait(install_options, std::move(data_retriever));
 
-    EXPECT_EQ(UserDisplayMode::kStandalone,
+    EXPECT_EQ(mojom::UserDisplayMode::kStandalone,
               provider()
                   ->registrar_unsafe()
                   .GetAppById(result.installed_app_id)
@@ -272,7 +272,7 @@
 
 TEST_F(ExternallyManagedInstallCommandTest, UpgradeLock) {
   ExternalInstallOptions install_options(
-      kWebAppUrl, UserDisplayMode::kStandalone,
+      kWebAppUrl, mojom::UserDisplayMode::kStandalone,
       ExternalInstallSource::kExternalDefault);
 
   auto data_retriever = std::make_unique<FakeDataRetriever>();
@@ -344,11 +344,11 @@
     data_retriever->BuildDefaultDataToRetrieve(kWebAppUrl, kWebAppScope);
 
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     data_retriever->SetRendererWebAppInstallInfo(std::move(web_app_info));
 
     ExternalInstallOptions install_options(
-        kWebAppUrl, UserDisplayMode::kStandalone,
+        kWebAppUrl, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalDefault);
     auto result = InstallAndWait(install_options, std::move(data_retriever));
 
@@ -383,7 +383,7 @@
     new_data_retriever->SetEmptyRendererWebAppInstallInfo();
 
     ExternalInstallOptions new_install_options(
-        kWebAppUrl, UserDisplayMode::kStandalone,
+        kWebAppUrl, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalPolicy);
     auto result =
         InstallAndWait(new_install_options, std::move(new_data_retriever));
@@ -419,7 +419,7 @@
     }
 
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
 
     auto data_retriever = std::make_unique<FakeDataRetriever>();
     data_retriever->BuildDefaultDataToRetrieve(kWebAppUrl, kWebAppScope);
@@ -431,7 +431,7 @@
     data_retriever->SetRendererWebAppInstallInfo(std::move(web_app_info));
 
     ExternalInstallOptions install_options(
-        kWebAppUrl, UserDisplayMode::kStandalone,
+        kWebAppUrl, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalDefault);
     auto result = InstallAndWait(install_options, std::move(data_retriever));
     const AppId& installed_app_id = result.installed_app_id;
@@ -472,7 +472,7 @@
     new_data_retriever->SetEmptyRendererWebAppInstallInfo();
 
     ExternalInstallOptions new_install_options(
-        kWebAppUrl, UserDisplayMode::kStandalone,
+        kWebAppUrl, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalPolicy);
     auto updated_result =
         InstallAndWait(new_install_options, std::move(new_data_retriever));
@@ -508,7 +508,7 @@
     }
 
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
 
     auto data_retriever = std::make_unique<FakeDataRetriever>();
     data_retriever->BuildDefaultDataToRetrieve(kWebAppUrl, kWebAppScope);
@@ -520,7 +520,7 @@
     data_retriever->SetRendererWebAppInstallInfo(std::move(web_app_info));
 
     ExternalInstallOptions install_options(
-        kWebAppUrl, UserDisplayMode::kStandalone,
+        kWebAppUrl, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalDefault);
     auto result = InstallAndWait(install_options, std::move(data_retriever));
     const AppId& installed_app_id = result.installed_app_id;
@@ -562,7 +562,7 @@
     new_data_retriever->SetEmptyRendererWebAppInstallInfo();
 
     ExternalInstallOptions new_install_options(
-        kWebAppUrl, UserDisplayMode::kStandalone,
+        kWebAppUrl, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalPolicy);
     auto updated_result =
         InstallAndWait(new_install_options, std::move(new_data_retriever));
diff --git a/chrome/browser/web_applications/commands/fetch_manifest_and_install_command.cc b/chrome/browser/web_applications/commands/fetch_manifest_and_install_command.cc
index 58ede447..68ebb2a 100644
--- a/chrome/browser/web_applications/commands/fetch_manifest_and_install_command.cc
+++ b/chrome/browser/web_applications/commands/fetch_manifest_and_install_command.cc
@@ -511,7 +511,7 @@
       app_lock_->install_finalizer().CanReparentTab(app_id, !error);
 
   if (can_reparent_tab &&
-      (web_app_info_->user_display_mode != UserDisplayMode::kBrowser)) {
+      (web_app_info_->user_display_mode != mojom::UserDisplayMode::kBrowser)) {
     app_lock_->install_finalizer().ReparentTab(app_id, !error,
                                                web_contents_.get());
   }
diff --git a/chrome/browser/web_applications/commands/fetch_manifest_and_install_command_browsertest.cc b/chrome/browser/web_applications/commands/fetch_manifest_and_install_command_browsertest.cc
index 2ba4939..652bfc42 100644
--- a/chrome/browser/web_applications/commands/fetch_manifest_and_install_command_browsertest.cc
+++ b/chrome/browser/web_applications/commands/fetch_manifest_and_install_command_browsertest.cc
@@ -11,8 +11,8 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -205,7 +205,7 @@
 
   {
     ScopedRegistryUpdate update(&provider().sync_bridge_unsafe());
-    web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+    web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
     web_app->SetIsLocallyInstalled(false);
     update->CreateApp(std::move(web_app));
   }
@@ -213,7 +213,7 @@
   EXPECT_FALSE(provider().registrar_unsafe().IsLocallyInstalled(app_id));
   EXPECT_TRUE(provider().registrar_unsafe().IsInstalled(app_id));
   EXPECT_EQ(provider().registrar_unsafe().GetAppUserDisplayMode(app_id).value(),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
 
   EXPECT_FALSE(NavigateAndAwaitInstallabilityCheck(browser(), test_url));
 
@@ -236,7 +236,7 @@
   // Install defaults to `kBrowser` because `CreateDialogCallback` doesn't set
   // `open_as_window` to true.
   EXPECT_EQ(provider().registrar_unsafe().GetAppUserDisplayMode(app_id).value(),
-            UserDisplayMode::kBrowser);
+            mojom::UserDisplayMode::kBrowser);
 }
 
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/commands/fetch_manifest_and_install_command_unittest.cc b/chrome/browser/web_applications/commands/fetch_manifest_and_install_command_unittest.cc
index 07542d3..d48ba9a 100644
--- a/chrome/browser/web_applications/commands/fetch_manifest_and_install_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/fetch_manifest_and_install_command_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_data_retriever.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/fake_web_app_ui_manager.h"
@@ -15,7 +16,6 @@
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_data_retriever.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -113,9 +113,10 @@
 
   WebAppInstallDialogCallback CreateDialogCallback(
       bool accept = true,
-      UserDisplayMode user_display_mode = UserDisplayMode::kBrowser) {
+      mojom::UserDisplayMode user_display_mode =
+          mojom::UserDisplayMode::kBrowser) {
     return base::BindOnce(
-        [](bool accept, UserDisplayMode user_display_mode,
+        [](bool accept, mojom::UserDisplayMode user_display_mode,
            content::WebContents* initiator_web_contents,
            std::unique_ptr<WebAppInstallInfo> web_app_info,
            WebAppInstallationAcceptanceCallback acceptance_callback) {
@@ -206,11 +207,11 @@
 };
 
 TEST_F(FetchManifestAndInstallCommandTest, SuccessWithManifest) {
-  EXPECT_EQ(
-      InstallAndWait(kWebAppId, SetupDefaultFakeDataRetriever(),
-                     webapps::WebappInstallSource::OMNIBOX_INSTALL_ICON,
-                     CreateDialogCallback(true, UserDisplayMode::kStandalone)),
-      webapps::InstallResultCode::kSuccessNewInstall);
+  EXPECT_EQ(InstallAndWait(kWebAppId, SetupDefaultFakeDataRetriever(),
+                           webapps::WebappInstallSource::OMNIBOX_INSTALL_ICON,
+                           CreateDialogCallback(
+                               true, mojom::UserDisplayMode::kStandalone)),
+            webapps::InstallResultCode::kSuccessNewInstall);
   EXPECT_TRUE(provider()->registrar_unsafe().IsLocallyInstalled(kWebAppId));
   EXPECT_EQ(1, fake_ui_manager()->num_reparent_tab_calls());
 }
@@ -223,45 +224,45 @@
   web_app_info->start_url = kWebAppUrl;
   web_app_info->title = u"test app";
   web_app_info->scope = kWebAppUrl;
-  web_app_info->user_display_mode = UserDisplayMode::kBrowser;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kBrowser;
   data_retriever->SetRendererWebAppInstallInfo(std::move(web_app_info));
-  EXPECT_EQ(
-      InstallAndWait(kWebAppId, std::move(data_retriever),
-                     webapps::WebappInstallSource::MENU_CREATE_SHORTCUT,
-                     CreateDialogCallback(true, UserDisplayMode::kStandalone),
-                     /*use_fallback=*/true),
-      webapps::InstallResultCode::kSuccessNewInstall);
+  EXPECT_EQ(InstallAndWait(
+                kWebAppId, std::move(data_retriever),
+                webapps::WebappInstallSource::MENU_CREATE_SHORTCUT,
+                CreateDialogCallback(true, mojom::UserDisplayMode::kStandalone),
+                /*use_fallback=*/true),
+            webapps::InstallResultCode::kSuccessNewInstall);
   EXPECT_TRUE(provider()->registrar_unsafe().IsLocallyInstalled(kWebAppId));
   EXPECT_EQ(1, fake_ui_manager()->num_reparent_tab_calls());
 }
 
 TEST_F(FetchManifestAndInstallCommandTest,
        FallbackInstallWithFailToGetInstallInfo) {
-  EXPECT_EQ(
-      InstallAndWait(kWebAppId, std::make_unique<FakeDataRetriever>(),
-                     webapps::WebappInstallSource::MENU_CREATE_SHORTCUT,
-                     CreateDialogCallback(true, UserDisplayMode::kStandalone),
-                     /*use_fallback=*/true),
-      webapps::InstallResultCode::kGetWebAppInstallInfoFailed);
+  EXPECT_EQ(InstallAndWait(
+                kWebAppId, std::make_unique<FakeDataRetriever>(),
+                webapps::WebappInstallSource::MENU_CREATE_SHORTCUT,
+                CreateDialogCallback(true, mojom::UserDisplayMode::kStandalone),
+                /*use_fallback=*/true),
+            webapps::InstallResultCode::kGetWebAppInstallInfoFailed);
   EXPECT_FALSE(provider()->registrar_unsafe().IsLocallyInstalled(kWebAppId));
   EXPECT_EQ(0, fake_ui_manager()->num_reparent_tab_calls());
 }
 
 TEST_F(FetchManifestAndInstallCommandTest, SuccessWithoutReparent) {
-  EXPECT_EQ(
-      InstallAndWait(kWebAppId, SetupDefaultFakeDataRetriever(),
-                     webapps::WebappInstallSource::OMNIBOX_INSTALL_ICON,
-                     CreateDialogCallback(true, UserDisplayMode::kBrowser)),
-      webapps::InstallResultCode::kSuccessNewInstall);
+  EXPECT_EQ(InstallAndWait(
+                kWebAppId, SetupDefaultFakeDataRetriever(),
+                webapps::WebappInstallSource::OMNIBOX_INSTALL_ICON,
+                CreateDialogCallback(true, mojom::UserDisplayMode::kBrowser)),
+            webapps::InstallResultCode::kSuccessNewInstall);
   EXPECT_EQ(0, fake_ui_manager()->num_reparent_tab_calls());
 }
 
 TEST_F(FetchManifestAndInstallCommandTest, UserInstallDeclined) {
-  EXPECT_EQ(
-      InstallAndWait(kWebAppId, SetupDefaultFakeDataRetriever(),
-                     webapps::WebappInstallSource::OMNIBOX_INSTALL_ICON,
-                     CreateDialogCallback(false, UserDisplayMode::kStandalone)),
-      webapps::InstallResultCode::kUserInstallDeclined);
+  EXPECT_EQ(InstallAndWait(kWebAppId, SetupDefaultFakeDataRetriever(),
+                           webapps::WebappInstallSource::OMNIBOX_INSTALL_ICON,
+                           CreateDialogCallback(
+                               false, mojom::UserDisplayMode::kStandalone)),
+            webapps::InstallResultCode::kUserInstallDeclined);
   EXPECT_FALSE(provider()->registrar_unsafe().IsLocallyInstalled(kWebAppId));
   EXPECT_EQ(0, fake_ui_manager()->num_reparent_tab_calls());
 }
diff --git a/chrome/browser/web_applications/commands/install_from_sync_command.cc b/chrome/browser/web_applications/commands/install_from_sync_command.cc
index 3c837ff..51682f62 100644
--- a/chrome/browser/web_applications/commands/install_from_sync_command.cc
+++ b/chrome/browser/web_applications/commands/install_from_sync_command.cc
@@ -60,7 +60,7 @@
     const std::string& title,
     const GURL& scope,
     const absl::optional<SkColor>& theme_color,
-    const absl::optional<UserDisplayMode>& user_display_mode,
+    const absl::optional<mojom::UserDisplayMode>& user_display_mode,
     const std::vector<apps::IconInfo>& icons)
     : app_id(app_id),
       manifest_id(manifest_id),
diff --git a/chrome/browser/web_applications/commands/install_from_sync_command.h b/chrome/browser/web_applications/commands/install_from_sync_command.h
index 680a879a..67e8901 100644
--- a/chrome/browser/web_applications/commands/install_from_sync_command.h
+++ b/chrome/browser/web_applications/commands/install_from_sync_command.h
@@ -14,8 +14,8 @@
 #include "base/memory/weak_ptr.h"
 #include "base/values.h"
 #include "chrome/browser/web_applications/commands/web_app_command.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_install_params.h"
 #include "chrome/browser/web_applications/web_app_logging.h"
@@ -47,7 +47,7 @@
            const std::string& title,
            const GURL& scope,
            const absl::optional<SkColor>& theme_color,
-           const absl::optional<UserDisplayMode>& user_display_mode,
+           const absl::optional<mojom::UserDisplayMode>& user_display_mode,
            const std::vector<apps::IconInfo>& icons);
     const AppId app_id;
     const absl::optional<std::string> manifest_id;
@@ -55,7 +55,7 @@
     const std::string title;
     const GURL scope;
     const absl::optional<SkColor> theme_color;
-    const absl::optional<UserDisplayMode> user_display_mode;
+    const absl::optional<mojom::UserDisplayMode> user_display_mode;
     const std::vector<apps::IconInfo> icons;
   };
   using DataRetrieverFactory =
diff --git a/chrome/browser/web_applications/commands/install_from_sync_command_browsertest.cc b/chrome/browser/web_applications/commands/install_from_sync_command_browsertest.cc
index e65ae74..a91a343c 100644
--- a/chrome/browser/web_applications/commands/install_from_sync_command_browsertest.cc
+++ b/chrome/browser/web_applications/commands/install_from_sync_command_browsertest.cc
@@ -6,8 +6,8 @@
 
 #include "base/test/bind.h"
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_data_retriever.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -42,7 +42,7 @@
   InstallFromSyncCommand::Params params = InstallFromSyncCommand::Params(
       id, absl::nullopt, test_url, "Test Title",
       https_server()->GetURL("/banners/"), absl::nullopt,
-      UserDisplayMode::kStandalone,
+      mojom::UserDisplayMode::kStandalone,
       {apps::IconInfo(https_server()->GetURL("/banners/launcher-icon-2x.png"),
                       96)});
   provider->command_manager().ScheduleCommand(
@@ -82,7 +82,7 @@
     InstallFromSyncCommand::Params params = InstallFromSyncCommand::Params(
         id, absl::nullopt, test_url, "Test Title",
         https_server()->GetURL("/banners/"), absl::nullopt,
-        UserDisplayMode::kStandalone,
+        mojom::UserDisplayMode::kStandalone,
         {apps::IconInfo(https_server()->GetURL("/banners/launcher-icon-2x.png"),
                         96)});
     provider->command_manager().ScheduleCommand(
@@ -99,7 +99,7 @@
     InstallFromSyncCommand::Params params = InstallFromSyncCommand::Params(
         other_id, absl::nullopt, other_test_url, "Test Title",
         https_server()->GetURL("/banners/"), absl::nullopt,
-        UserDisplayMode::kStandalone,
+        mojom::UserDisplayMode::kStandalone,
         {apps::IconInfo(https_server()->GetURL("/banners/launcher-icon-2x.png"),
                         96)});
     provider->command_manager().ScheduleCommand(
diff --git a/chrome/browser/web_applications/commands/install_from_sync_command_unittest.cc b/chrome/browser/web_applications/commands/install_from_sync_command_unittest.cc
index 0d52ad5..f2bcd26 100644
--- a/chrome/browser/web_applications/commands/install_from_sync_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/install_from_sync_command_unittest.cc
@@ -115,7 +115,7 @@
     return InstallFromSyncCommand::Params(
         app_id, /*manifest_id=*/absl::nullopt, url, kFallbackTitle,
         url.GetWithoutFilename(), /*theme_color=*/absl::nullopt,
-        UserDisplayMode::kStandalone, /*icons=*/
+        mojom::UserDisplayMode::kStandalone, /*icons=*/
         {apps::IconInfo(kFallbackIconUrl, kIconSize)});
   }
 
diff --git a/chrome/browser/web_applications/commands/manifest_update_data_fetch_command.cc b/chrome/browser/web_applications/commands/manifest_update_data_fetch_command.cc
index 4230984..52c3625 100644
--- a/chrome/browser/web_applications/commands/manifest_update_data_fetch_command.cc
+++ b/chrome/browser/web_applications/commands/manifest_update_data_fetch_command.cc
@@ -24,8 +24,8 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/web_applications/locks/app_lock.h"
 #include "chrome/browser/web_applications/manifest_update_utils.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_data_retriever.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
diff --git a/chrome/browser/web_applications/commands/manifest_update_finalize_command_unittest.cc b/chrome/browser/web_applications/commands/manifest_update_finalize_command_unittest.cc
index 3f0abf4..1e67d59 100644
--- a/chrome/browser/web_applications/commands/manifest_update_finalize_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/manifest_update_finalize_command_unittest.cc
@@ -80,7 +80,7 @@
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = app_url();
     web_app_info->scope = app_url().GetWithoutFilename();
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     web_app_info->title = u"Foo Bar";
     return test::InstallWebApp(profile(), std::move(web_app_info));
   }
@@ -89,7 +89,7 @@
     WebAppInstallInfo info;
     info.start_url = app_url();
     info.scope = app_url().GetWithoutFilename();
-    info.user_display_mode = UserDisplayMode::kStandalone;
+    info.user_display_mode = mojom::UserDisplayMode::kStandalone;
     info.title = new_title;
     return info;
   }
diff --git a/chrome/browser/web_applications/commands/os_integration_synchronize_command_unittest.cc b/chrome/browser/web_applications/commands/os_integration_synchronize_command_unittest.cc
index 982d2c5..0ffacb28 100644
--- a/chrome/browser/web_applications/commands/os_integration_synchronize_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/os_integration_synchronize_command_unittest.cc
@@ -94,7 +94,7 @@
     auto info = std::make_unique<WebAppInstallInfo>();
     info->start_url = kWebAppUrl;
     info->title = u"Test App";
-    info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
     info->protocol_handlers = protocol_handlers;
 
     base::test::TestFuture<const AppId&, webapps::InstallResultCode> result;
diff --git a/chrome/browser/web_applications/commands/sub_app_install_command.cc b/chrome/browser/web_applications/commands/sub_app_install_command.cc
index 1e16f54..291c5a0 100644
--- a/chrome/browser/web_applications/commands/sub_app_install_command.cc
+++ b/chrome/browser/web_applications/commands/sub_app_install_command.cc
@@ -274,7 +274,7 @@
     install_info->start_url = install_url;
     install_info->install_url = install_url;
   }
-  install_info->user_display_mode = UserDisplayMode::kStandalone;
+  install_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
 
   data_retriever_->CheckInstallabilityAndRetrieveManifest(
       &lock_->shared_web_contents(), /*bypass_service_worker_check=*/false,
@@ -366,7 +366,7 @@
     return;
   }
 
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
 
   lock_->install_finalizer().FinalizeInstall(
       *web_app_info, GetFinalizerOptionsForSubApps(parent_app_id_),
diff --git a/chrome/browser/web_applications/commands/sub_app_install_command_unittest.cc b/chrome/browser/web_applications/commands/sub_app_install_command_unittest.cc
index b65263f..d35f334 100644
--- a/chrome/browser/web_applications/commands/sub_app_install_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/sub_app_install_command_unittest.cc
@@ -87,7 +87,7 @@
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = parent_url_;
     web_app_info->scope = parent_url_.GetWithoutFilename();
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     web_app_info->title = u"Web App";
     return web_app::test::InstallWebApp(profile(), std::move(web_app_info));
   }
@@ -97,7 +97,7 @@
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = url;
     web_app_info->scope = url.GetWithoutFilename();
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     web_app_info->title = u"Sub App";
     return web_app_info;
   }
diff --git a/chrome/browser/web_applications/commands/update_protocol_handler_approval_command_browsertest.cc b/chrome/browser/web_applications/commands/update_protocol_handler_approval_command_browsertest.cc
index beba1ad..1d5ace1 100644
--- a/chrome/browser/web_applications/commands/update_protocol_handler_approval_command_browsertest.cc
+++ b/chrome/browser/web_applications/commands/update_protocol_handler_approval_command_browsertest.cc
@@ -81,7 +81,7 @@
         std::make_unique<WebAppInstallInfo>();
     info->start_url = GURL(kTestAppUrl);
     info->title = kAppName;
-    info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
     info->protocol_handlers = protocol_handlers;
     base::test::TestFuture<const AppId&, webapps::InstallResultCode> result;
     // InstallFromInfoWithParams is used instead of InstallFromInfo, because
diff --git a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
index be06ac1..b971aa7 100644
--- a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
@@ -24,6 +24,7 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/chromeos_buildflags.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_data_retriever.h"
 #include "chrome/browser/web_applications/test/fake_install_finalizer.h"
 #include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
@@ -32,7 +33,6 @@
 #include "chrome/browser/web_applications/test/test_web_app_url_loader.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_data_retriever.h"
@@ -425,7 +425,7 @@
                       EXPECT_EQ(0u, finalizer()->num_reparent_tab_calls());
 
                       EXPECT_EQ(web_app_info().user_display_mode,
-                                UserDisplayMode::kBrowser);
+                                mojom::UserDisplayMode::kBrowser);
                       EXPECT_EQ(webapps::WebappInstallSource::INTERNAL_DEFAULT,
                                 finalize_options().install_surface);
 
@@ -438,7 +438,7 @@
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallFails) {
   const GURL kWebAppUrl("https://foo.example");
   auto task = GetInstallationTaskWithTestMocks(
-      {kWebAppUrl, UserDisplayMode::kStandalone,
+      {kWebAppUrl, mojom::UserDisplayMode::kStandalone,
        ExternalInstallSource::kInternalDefault},
       /*mock_empty_web_app_info=*/true);
   url_loader().SetPrepareForLoadResultLoaded();
@@ -469,7 +469,7 @@
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallForcedContainerWindow) {
   const GURL kWebAppUrl("https://foo.example");
   auto install_options =
-      ExternalInstallOptions(kWebAppUrl, UserDisplayMode::kStandalone,
+      ExternalInstallOptions(kWebAppUrl, mojom::UserDisplayMode::kStandalone,
                              ExternalInstallSource::kInternalDefault);
   auto task = GetInstallationTaskWithTestMocks(std::move(install_options));
   url_loader().SetPrepareForLoadResultLoaded();
@@ -484,7 +484,7 @@
                                 result.code);
                       EXPECT_TRUE(result.app_id.has_value());
                       EXPECT_EQ(web_app_info().user_display_mode,
-                                UserDisplayMode::kStandalone);
+                                mojom::UserDisplayMode::kStandalone);
                       run_loop.Quit();
                     }));
 
@@ -494,7 +494,7 @@
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallForcedContainerTab) {
   const GURL kWebAppUrl("https://foo.example");
   auto install_options =
-      ExternalInstallOptions(kWebAppUrl, UserDisplayMode::kBrowser,
+      ExternalInstallOptions(kWebAppUrl, mojom::UserDisplayMode::kBrowser,
                              ExternalInstallSource::kInternalDefault);
   auto task = GetInstallationTaskWithTestMocks(std::move(install_options));
   url_loader().SetPrepareForLoadResultLoaded();
@@ -509,7 +509,7 @@
                                 result.code);
                       EXPECT_TRUE(result.app_id.has_value());
                       EXPECT_EQ(web_app_info().user_display_mode,
-                                UserDisplayMode::kBrowser);
+                                mojom::UserDisplayMode::kBrowser);
                       run_loop.Quit();
                     }));
 
@@ -568,7 +568,8 @@
 
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallPlaceholder) {
   const GURL kWebAppUrl("https://foo.example");
-  ExternalInstallOptions options(kWebAppUrl, UserDisplayMode::kStandalone,
+  ExternalInstallOptions options(kWebAppUrl,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.install_placeholder = true;
   auto task = GetInstallationTaskWithTestMocks(std::move(options));
@@ -596,7 +597,7 @@
             EXPECT_EQ(base::UTF8ToUTF16(kWebAppUrl.spec()), web_app_info.title);
             EXPECT_EQ(kWebAppUrl, web_app_info.start_url);
             EXPECT_EQ(web_app_info.user_display_mode,
-                      UserDisplayMode::kStandalone);
+                      mojom::UserDisplayMode::kStandalone);
             EXPECT_TRUE(web_app_info.manifest_icons.empty());
             EXPECT_TRUE(web_app_info.icon_bitmaps.any.empty());
 
@@ -607,7 +608,8 @@
 
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallPlaceholderTwice) {
   const GURL kWebAppUrl("https://foo.example");
-  ExternalInstallOptions options(kWebAppUrl, UserDisplayMode::kStandalone,
+  ExternalInstallOptions options(kWebAppUrl,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.install_placeholder = true;
   AppId placeholder_app_id;
@@ -659,7 +661,8 @@
 
 TEST_P(ExternallyManagedAppInstallTaskTest, ReinstallPlaceholderSucceeds) {
   const GURL kWebAppUrl("https://foo.example");
-  ExternalInstallOptions options(kWebAppUrl, UserDisplayMode::kStandalone,
+  ExternalInstallOptions options(kWebAppUrl,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.install_placeholder = true;
   AppId placeholder_app_id;
@@ -717,7 +720,8 @@
 
 TEST_P(ExternallyManagedAppInstallTaskTest, ReinstallPlaceholderFails) {
   const GURL kWebAppUrl("https://foo.example");
-  ExternalInstallOptions options(kWebAppUrl, UserDisplayMode::kStandalone,
+  ExternalInstallOptions options(kWebAppUrl,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.install_placeholder = true;
   AppId placeholder_app_id;
@@ -782,7 +786,8 @@
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallPlaceholderCustomName) {
   const GURL kWebAppUrl("https://foo.example");
   const std::string kCustomName("Custom äpp näme");
-  ExternalInstallOptions options(kWebAppUrl, UserDisplayMode::kStandalone,
+  ExternalInstallOptions options(kWebAppUrl,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.install_placeholder = true;
   options.override_name = kCustomName;
@@ -884,7 +889,7 @@
     base::RunLoop run_loop;
 
     ExternalInstallOptions install_options(
-        GURL(), UserDisplayMode::kStandalone,
+        GURL(), mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kInternalDefault);
     ExternallyManagedAppInstallTask install_task(
         profile(), &url_loader(), ui_manager(), finalizer(),
@@ -906,7 +911,7 @@
 
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallFailedWebContentsDestroyed) {
   ExternalInstallOptions install_options(
-      GURL(), UserDisplayMode::kStandalone,
+      GURL(), mojom::UserDisplayMode::kStandalone,
       ExternalInstallSource::kInternalDefault);
   ExternallyManagedAppInstallTask install_task(
       profile(), &url_loader(), ui_manager(), finalizer(), command_scheduler(),
@@ -925,7 +930,8 @@
 
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallWithWebAppInfoSucceeds) {
   const GURL kWebAppUrl("https://foo.example");
-  ExternalInstallOptions options(kWebAppUrl, UserDisplayMode::kStandalone,
+  ExternalInstallOptions options(kWebAppUrl,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kSystemInstalled);
   options.only_use_app_info_factory = true;
   options.app_info_factory = base::BindLambdaForTesting([&kWebAppUrl]() {
@@ -961,7 +967,7 @@
             EXPECT_EQ(0u, finalizer()->num_reparent_tab_calls());
 
             EXPECT_EQ(web_app_info().user_display_mode,
-                      UserDisplayMode::kStandalone);
+                      mojom::UserDisplayMode::kStandalone);
             EXPECT_EQ(webapps::WebappInstallSource::SYSTEM_DEFAULT,
                       finalize_options().install_surface);
 
@@ -972,7 +978,8 @@
 
 TEST_P(ExternallyManagedAppInstallTaskTest, InstallWithWebAppInfoFails) {
   const GURL kWebAppUrl("https://foo.example");
-  ExternalInstallOptions options(kWebAppUrl, UserDisplayMode::kStandalone,
+  ExternalInstallOptions options(kWebAppUrl,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kSystemInstalled);
   options.only_use_app_info_factory = true;
   options.app_info_factory = base::BindLambdaForTesting([&kWebAppUrl]() {
diff --git a/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc b/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc
index d0f977d..9f633a21 100644
--- a/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc
+++ b/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc
@@ -23,12 +23,12 @@
 #include "chrome/browser/web_applications/app_registrar_observer.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_constants.h"
 #include "chrome/browser/web_applications/test/fake_externally_managed_app_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -109,7 +109,7 @@
 
 ExternalInstallOptions GetWindowedInstallOptions() {
   ExternalInstallOptions options(GURL(kWindowedUrl),
-                                 UserDisplayMode::kStandalone,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
@@ -129,7 +129,8 @@
 }
 
 ExternalInstallOptions GetTabbedInstallOptions() {
-  ExternalInstallOptions options(GURL(kTabbedUrl), UserDisplayMode::kBrowser,
+  ExternalInstallOptions options(GURL(kTabbedUrl),
+                                 mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
@@ -148,7 +149,7 @@
 
 ExternalInstallOptions GetNoContainerInstallOptions() {
   ExternalInstallOptions options(GURL(kNoContainerUrl),
-                                 UserDisplayMode::kBrowser,
+                                 mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
@@ -167,7 +168,7 @@
 
 ExternalInstallOptions GetCreateDesktopShortcutDefaultInstallOptions() {
   ExternalInstallOptions options(GURL(kNoContainerUrl),
-                                 UserDisplayMode::kBrowser,
+                                 mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
@@ -187,7 +188,7 @@
 
 ExternalInstallOptions GetCreateDesktopShortcutFalseInstallOptions() {
   ExternalInstallOptions options(GURL(kNoContainerUrl),
-                                 UserDisplayMode::kBrowser,
+                                 mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
@@ -207,7 +208,7 @@
 
 ExternalInstallOptions GetCreateDesktopShortcutTrueInstallOptions() {
   ExternalInstallOptions options(GURL(kNoContainerUrl),
-                                 UserDisplayMode::kBrowser,
+                                 mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = true;
@@ -245,7 +246,7 @@
 
 ExternalInstallOptions GetFallbackAppNameInstallOptions() {
   ExternalInstallOptions options(GURL(kWindowedUrl),
-                                 UserDisplayMode::kStandalone,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
@@ -269,7 +270,7 @@
 
 ExternalInstallOptions GetCustomAppNameInstallOptions(std::string name) {
   ExternalInstallOptions options(GURL(kWindowedUrl),
-                                 UserDisplayMode::kStandalone,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
@@ -296,7 +297,7 @@
 
 ExternalInstallOptions GetCustomAppIconInstallOptions() {
   ExternalInstallOptions options(GURL(kWindowedUrl),
-                                 UserDisplayMode::kStandalone,
+                                 mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalPolicy);
   options.add_to_applications_menu = true;
   options.add_to_desktop = false;
diff --git a/chrome/browser/web_applications/external_install_options.cc b/chrome/browser/web_applications/external_install_options.cc
index 78811f3..f7e691b 100644
--- a/chrome/browser/web_applications/external_install_options.cc
+++ b/chrome/browser/web_applications/external_install_options.cc
@@ -13,6 +13,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
 #include "third_party/blink/public/common/manifest/manifest_util.h"
 
@@ -20,7 +21,7 @@
 
 ExternalInstallOptions::ExternalInstallOptions(
     const GURL& install_url,
-    absl::optional<UserDisplayMode> user_display_mode,
+    absl::optional<mojom::UserDisplayMode> user_display_mode,
     ExternalInstallSource install_source)
     : install_url(install_url),
       user_display_mode(user_display_mode),
diff --git a/chrome/browser/web_applications/external_install_options.h b/chrome/browser/web_applications/external_install_options.h
index c9965e08..0b76c9f 100644
--- a/chrome/browser/web_applications/external_install_options.h
+++ b/chrome/browser/web_applications/external_install_options.h
@@ -10,7 +10,7 @@
 
 #include "base/values.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -26,9 +26,10 @@
 enum class ExternalInstallSource;
 
 struct ExternalInstallOptions {
-  ExternalInstallOptions(const GURL& install_url,
-                         absl::optional<UserDisplayMode> user_display_mode,
-                         ExternalInstallSource install_source);
+  ExternalInstallOptions(
+      const GURL& install_url,
+      absl::optional<mojom::UserDisplayMode> user_display_mode,
+      ExternalInstallSource install_source);
 
   ~ExternalInstallOptions();
   ExternalInstallOptions(const ExternalInstallOptions& other);
@@ -41,7 +42,7 @@
 
   GURL install_url;
 
-  absl::optional<UserDisplayMode> user_display_mode;
+  absl::optional<mojom::UserDisplayMode> user_display_mode;
 
   ExternalInstallSource install_source;
 
diff --git a/chrome/browser/web_applications/external_install_options_unittest.cc b/chrome/browser/web_applications/external_install_options_unittest.cc
index fe8453d..224a6b4 100644
--- a/chrome/browser/web_applications/external_install_options_unittest.cc
+++ b/chrome/browser/web_applications/external_install_options_unittest.cc
@@ -7,7 +7,7 @@
 #include <string>
 
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_params.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -60,7 +60,7 @@
      ConvertExternalInstallOptionsToParams_DefaultConstructor) {
   ExternalInstallOptions install_options(
       /*install_url=*/GURL{"https://example.org"},
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   WebAppInstallParams install_params =
@@ -76,14 +76,14 @@
      ConvertExternalInstallOptionsToParams_NotDefaultConstructor) {
   ExternalInstallOptions install_options(
       /*install_url=*/GURL{"https://example.com"},
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   // The values below are deliberately different from default
   // ExternalInstallOptions constructor values.
 
   install_options.force_reinstall = true;
-  install_options.user_display_mode = UserDisplayMode::kStandalone;
+  install_options.user_display_mode = mojom::UserDisplayMode::kStandalone;
   install_options.fallback_app_name = "Fallback App Name";
 
   install_options.add_to_applications_menu = false;
diff --git a/chrome/browser/web_applications/externally_installed_web_app_prefs_browsertest.cc b/chrome/browser/web_applications/externally_installed_web_app_prefs_browsertest.cc
index 655bbb3..a1eece5 100644
--- a/chrome/browser/web_applications/externally_installed_web_app_prefs_browsertest.cc
+++ b/chrome/browser/web_applications/externally_installed_web_app_prefs_browsertest.cc
@@ -158,7 +158,7 @@
   web_app_install_info->start_url = url;
   web_app_install_info->title = u"App Title";
   web_app_install_info->display_mode = DisplayMode::kBrowser;
-  web_app_install_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_install_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   web_app_install_info->install_url = url;
 
   AppId app_id =
@@ -318,7 +318,7 @@
   web_app_install_info->start_url = url;
   web_app_install_info->title = u"App Title";
   web_app_install_info->display_mode = DisplayMode::kBrowser;
-  web_app_install_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_install_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   web_app_install_info->install_url = url;
 
   AppId app_id =
@@ -543,7 +543,8 @@
     web_app_install_info->start_url = url;
     web_app_install_info->title = u"App Title";
     web_app_install_info->display_mode = DisplayMode::kBrowser;
-    web_app_install_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_install_info->user_display_mode =
+        mojom::UserDisplayMode::kStandalone;
     AppId app_id =
         test::InstallWebApp(profile(), std::move(web_app_install_info),
                             /*overwrite_existing_manifest_fields=*/true,
@@ -587,7 +588,8 @@
     web_app_install_info->start_url = url;
     web_app_install_info->title = u"App Title";
     web_app_install_info->display_mode = DisplayMode::kBrowser;
-    web_app_install_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_install_info->user_display_mode =
+        mojom::UserDisplayMode::kStandalone;
     web_app_install_info->install_url = url;
     app_id = test::InstallWebApp(profile(), std::move(web_app_install_info),
                                  /*overwrite_existing_manifest_fields=*/true,
diff --git a/chrome/browser/web_applications/externally_managed_app_install_task.cc b/chrome/browser/web_applications/externally_managed_app_install_task.cc
index d9dd2370..c3beb01 100644
--- a/chrome/browser/web_applications/externally_managed_app_install_task.cc
+++ b/chrome/browser/web_applications/externally_managed_app_install_task.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/web_applications/commands/externally_managed_install_command.h"
 #include "chrome/browser/web_applications/commands/install_from_info_command.h"
 #include "chrome/browser/web_applications/locks/full_system_lock.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_impl_browsertest.cc b/chrome/browser/web_applications/externally_managed_app_manager_impl_browsertest.cc
index c09b546..b4eb60f9 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_impl_browsertest.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_impl_browsertest.cc
@@ -15,12 +15,12 @@
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_registration_task.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/external_app_registration_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_icon_generator.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -580,7 +580,7 @@
   std::vector<ExternalInstallOptions> desired_apps_install_options;
   {
     ExternalInstallOptions install_options(
-        app_url, UserDisplayMode::kStandalone,
+        app_url, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalPolicy);
     install_options.add_to_applications_menu = false;
     install_options.add_to_desktop = false;
@@ -610,7 +610,7 @@
   DCHECK(app_id.has_value());
   EXPECT_EQ(registrar().GetAppDisplayMode(*app_id), DisplayMode::kBrowser);
   EXPECT_EQ(registrar().GetAppUserDisplayMode(*app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
   EXPECT_EQ(registrar().GetAppEffectiveDisplayMode(*app_id),
             DisplayMode::kMinimalUi);
   EXPECT_FALSE(registrar().GetAppThemeColor(*app_id).has_value());
@@ -649,7 +649,7 @@
 
   // Install policy app
   ExternalInstallOptions install_options(
-      url, UserDisplayMode::kStandalone,
+      url, mojom::UserDisplayMode::kStandalone,
       ExternalInstallSource::kExternalPolicy);
   InstallApp(install_options);
   ASSERT_EQ(webapps::InstallResultCode::kSuccessNewInstall,
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc b/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
index 8a838e14..36c3b34 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
@@ -23,6 +23,7 @@
 #include "chrome/browser/web_applications/externally_managed_app_install_task.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
 #include "chrome/browser/web_applications/externally_managed_app_registration_task.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/external_app_registration_waiter.h"
 #include "chrome/browser/web_applications/test/fake_install_finalizer.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
@@ -31,7 +32,6 @@
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
@@ -59,7 +59,8 @@
     const GURL& url,
     absl::optional<bool> override_previous_user_uninstall =
         absl::optional<bool>()) {
-  ExternalInstallOptions options(std::move(url), UserDisplayMode::kBrowser,
+  ExternalInstallOptions options(std::move(url),
+                                 mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalPolicy);
 
   if (override_previous_user_uninstall.has_value())
@@ -82,7 +83,7 @@
     const GURL& url,
     absl::optional<bool> override_previous_user_uninstall =
         absl::optional<bool>()) {
-  ExternalInstallOptions options(url, UserDisplayMode::kBrowser,
+  ExternalInstallOptions options(url, mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalPolicy);
   options.only_use_app_info_factory = true;
   // Static to ensure re-use across multiple function calls for
@@ -1076,7 +1077,8 @@
       kFooWebAppUrl, webapps::UninstallResultCode::kSuccess);
 
   auto get_force_reinstall_info = [kFooWebAppUrl]() {
-    ExternalInstallOptions options(kFooWebAppUrl, UserDisplayMode::kStandalone,
+    ExternalInstallOptions options(kFooWebAppUrl,
+                                   mojom::UserDisplayMode::kStandalone,
                                    ExternalInstallSource::kExternalPolicy);
     options.force_reinstall = true;
     return options;
@@ -1735,7 +1737,7 @@
     externally_managed_app_manager_impl().SetNextInstallationLaunchURL(
         install_url);
     ExternalInstallOptions install_option(
-        install_url, UserDisplayMode::kStandalone,
+        install_url, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kSystemInstalled);
     const auto& url_and_result =
         InstallAndWait(&externally_managed_app_manager_impl(), install_option);
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc b/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc
index a44e445..4afb9a1 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc
@@ -16,12 +16,12 @@
 #include "base/test/scoped_feature_list.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_externally_managed_app_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
@@ -123,7 +123,7 @@
     install_options_list.reserve(urls.size());
     for (const auto& url : urls) {
       install_options_list.emplace_back(
-          url, UserDisplayMode::kStandalone,
+          url, mojom::UserDisplayMode::kStandalone,
           ExternalInstallSource::kInternalDefault);
     }
 
@@ -192,10 +192,10 @@
 TEST_P(ExternallyManagedAppManagerTest, DestroyDuringInstallInSynchronize) {
   std::vector<ExternalInstallOptions> install_options_list;
   install_options_list.emplace_back(GURL("https://foo.example"),
-                                    UserDisplayMode::kStandalone,
+                                    mojom::UserDisplayMode::kStandalone,
                                     ExternalInstallSource::kInternalDefault);
   install_options_list.emplace_back(GURL("https://bar.example"),
-                                    UserDisplayMode::kStandalone,
+                                    mojom::UserDisplayMode::kStandalone,
                                     ExternalInstallSource::kInternalDefault);
 
   externally_managed_app_manager().SynchronizeInstalledApps(
@@ -215,7 +215,7 @@
   {
     std::vector<ExternalInstallOptions> install_options_list;
     install_options_list.emplace_back(GURL("https://foo.example"),
-                                      UserDisplayMode::kStandalone,
+                                      mojom::UserDisplayMode::kStandalone,
                                       ExternalInstallSource::kInternalDefault);
     base::RunLoop run_loop;
     externally_managed_app_manager().SynchronizeInstalledApps(
diff --git a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_browsertest.cc b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_browsertest.cc
index 6be1ae54..92609c1 100644
--- a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_browsertest.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_browsertest.cc
@@ -24,9 +24,9 @@
 #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
 #include "chrome/browser/ui/web_applications/web_app_menu_model.h"
 #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/service_worker_registration_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/browser/web_applications/web_app_sync_bridge.h"
@@ -287,7 +287,8 @@
 
   WebAppProvider::GetForTest(browser()->profile())
       ->sync_bridge_unsafe()
-      .SetAppUserDisplayMode(url_info.app_id(), UserDisplayMode::kBrowser,
+      .SetAppUserDisplayMode(url_info.app_id(),
+                             mojom::UserDisplayMode::kBrowser,
                              /*is_user_action=*/false);
 
   GURL app_url = url_info.origin().GetURL().Resolve("/index.html");
diff --git a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
index bc09638..fb2956c 100644
--- a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
+++ b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
@@ -43,6 +43,7 @@
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/externally_managed_app_manager.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcut.h"
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
@@ -50,7 +51,6 @@
 #include "chrome/browser/web_applications/test/web_app_sync_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_callback_app_identity.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
@@ -461,7 +461,7 @@
     const GURL app_url = GetAppURL();
     base::RunLoop run_loop;
     ExternalInstallOptions install_options(
-        app_url, UserDisplayMode::kStandalone,
+        app_url, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kInternalDefault);
     install_options.add_to_applications_menu = false;
     install_options.add_to_desktop = false;
@@ -488,7 +488,7 @@
     const GURL app_url = GetAppURL();
     base::RunLoop run_loop;
     ExternalInstallOptions install_options(
-        app_url, UserDisplayMode::kStandalone,
+        app_url, mojom::UserDisplayMode::kStandalone,
         ExternalInstallSource::kExternalPolicy);
     install_options.add_to_applications_menu = false;
     install_options.add_to_desktop = false;
@@ -514,8 +514,9 @@
   AppId InstallKioskApp() {
     const GURL app_url = GetAppURL();
     base::RunLoop run_loop;
-    ExternalInstallOptions install_options(
-        app_url, UserDisplayMode::kStandalone, ExternalInstallSource::kKiosk);
+    ExternalInstallOptions install_options(app_url,
+                                           mojom::UserDisplayMode::kStandalone,
+                                           ExternalInstallSource::kKiosk);
     install_options.install_placeholder = true;
     GetProvider().externally_managed_app_manager().Install(
         std::move(install_options),
@@ -544,7 +545,8 @@
       synced_specifics_data->SetStartUrl(start_url);
 
       synced_specifics_data->AddSource(WebAppManagement::kSync);
-      synced_specifics_data->SetUserDisplayMode(UserDisplayMode::kBrowser);
+      synced_specifics_data->SetUserDisplayMode(
+          mojom::UserDisplayMode::kBrowser);
       synced_specifics_data->SetName("Name From Sync");
 
       WebApp::SyncFallbackData sync_fallback_data;
@@ -1688,7 +1690,7 @@
   OverrideManifest(kManifestTemplate, {"standalone", kInstallableIconList});
   AppId app_id = InstallWebApp();
   GetProvider().sync_bridge_unsafe().SetAppUserDisplayMode(
-      app_id, UserDisplayMode::kStandalone, /*is_user_action=*/false);
+      app_id, mojom::UserDisplayMode::kStandalone, /*is_user_action=*/false);
 
   OverrideManifest(kManifestTemplate, {"browser", kInstallableIconList});
   EXPECT_EQ(GetResultAfterPageLoad(GetAppURL()),
@@ -1701,7 +1703,7 @@
   // We don't touch the user's launch preference even if the app display mode
   // changes. Instead the effective display mode changes.
   EXPECT_EQ(GetProvider().registrar_unsafe().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
   EXPECT_EQ(GetProvider().registrar_unsafe().GetAppEffectiveDisplayMode(app_id),
             DisplayMode::kMinimalUi);
 }
diff --git a/chrome/browser/web_applications/mojom/BUILD.gn b/chrome/browser/web_applications/mojom/BUILD.gn
new file mode 100644
index 0000000..a2d94d8
--- /dev/null
+++ b/chrome/browser/web_applications/mojom/BUILD.gn
@@ -0,0 +1,7 @@
+import("//mojo/public/tools/bindings/mojom.gni")
+
+mojom("mojom_web_apps_enum") {
+  sources = [ "user_display_mode.mojom" ]
+
+  public_deps = []
+}
diff --git a/chrome/browser/web_applications/mojom/OWNERS b/chrome/browser/web_applications/mojom/OWNERS
new file mode 100644
index 0000000..61b5e28
--- /dev/null
+++ b/chrome/browser/web_applications/mojom/OWNERS
@@ -0,0 +1,2 @@
+per-file *.mojom=set noparent
+per-file *.mojom=file://ipc/SECURITY_OWNERS
\ No newline at end of file
diff --git a/chrome/browser/web_applications/mojom/user_display_mode.mojom b/chrome/browser/web_applications/mojom/user_display_mode.mojom
new file mode 100644
index 0000000..536f5b1
--- /dev/null
+++ b/chrome/browser/web_applications/mojom/user_display_mode.mojom
@@ -0,0 +1,19 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module web_app.mojom;
+
+// Reflects
+// https://source.chromium.org/chromium/chromium/src/+/main:components/sync/protocol/web_app_specifics.proto;l=44;drc=0758d11f3d4db21e8e8b1b3a5600261fde150afb
+enum UserDisplayMode {
+  // The user prefers that the web app open in a browser context, like a tab.
+  kBrowser,
+
+  // The user prefers the web app open in a standalone window experience.
+  kStandalone,
+
+  // The user wants the web app to open in a standalone window experience with
+  // tabs.
+  kTabbed,
+};
\ No newline at end of file
diff --git a/chrome/browser/web_applications/os_integration/protocol_handling_sub_manager_unittest.cc b/chrome/browser/web_applications/os_integration/protocol_handling_sub_manager_unittest.cc
index b006b47..aba1e5e 100644
--- a/chrome/browser/web_applications/os_integration/protocol_handling_sub_manager_unittest.cc
+++ b/chrome/browser/web_applications/os_integration/protocol_handling_sub_manager_unittest.cc
@@ -105,7 +105,7 @@
         std::make_unique<WebAppInstallInfo>();
     info->start_url = kWebAppUrl;
     info->title = u"Test App";
-    info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
     info->protocol_handlers = protocol_handlers;
     base::test::TestFuture<const AppId&, webapps::InstallResultCode> result;
     // InstallFromInfoWithParams is used instead of InstallFromInfo, because
diff --git a/chrome/browser/web_applications/os_integration/run_on_os_login_sub_manager_unittest.cc b/chrome/browser/web_applications/os_integration/run_on_os_login_sub_manager_unittest.cc
index 9db9f868..c7eac38 100644
--- a/chrome/browser/web_applications/os_integration/run_on_os_login_sub_manager_unittest.cc
+++ b/chrome/browser/web_applications/os_integration/run_on_os_login_sub_manager_unittest.cc
@@ -96,7 +96,7 @@
         std::make_unique<WebAppInstallInfo>();
     info->start_url = kWebAppUrl;
     info->title = u"Test App";
-    info->user_display_mode = web_app::UserDisplayMode::kStandalone;
+    info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone;
     base::test::TestFuture<const AppId&, webapps::InstallResultCode> result;
     // InstallFromInfoWithParams is used instead of InstallFromInfo, because
     // InstallFromInfo doesn't register OS integration.
diff --git a/chrome/browser/web_applications/os_integration/shortcut_sub_manager.h b/chrome/browser/web_applications/os_integration/shortcut_sub_manager.h
index 73f2377..f24a84e4 100644
--- a/chrome/browser/web_applications/os_integration/shortcut_sub_manager.h
+++ b/chrome/browser/web_applications/os_integration/shortcut_sub_manager.h
@@ -12,6 +12,7 @@
 #include "base/functional/callback_forward.h"
 #include "base/memory/raw_ref.h"
 #include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_sub_manager.h"
 #include "chrome/browser/web_applications/proto/web_app_os_integration_state.pb.h"
 #include "chrome/browser/web_applications/web_app_id.h"
diff --git a/chrome/browser/web_applications/os_integration/url_handler_manager_impl_unittest.cc b/chrome/browser/web_applications/os_integration/url_handler_manager_impl_unittest.cc
index b74d57c..3fb7552 100644
--- a/chrome/browser/web_applications/os_integration/url_handler_manager_impl_unittest.cc
+++ b/chrome/browser/web_applications/os_integration/url_handler_manager_impl_unittest.cc
@@ -12,13 +12,13 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_origin_association_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/url_handler_prefs.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -95,7 +95,7 @@
     auto web_app = std::make_unique<WebApp>(app_id);
     web_app->AddSource(WebAppManagement::kDefault);
     web_app->SetDisplayMode(DisplayMode::kStandalone);
-    web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+    web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
     web_app->SetName("Name");
     web_app->SetStartUrl(app_url);
     web_app->SetUrlHandlers(url_handlers);
diff --git a/chrome/browser/web_applications/policy/web_app_policy_manager.cc b/chrome/browser/web_applications/policy/web_app_policy_manager.cc
index 8b9ab4c..d0c2c83f 100644
--- a/chrome/browser/web_applications/policy/web_app_policy_manager.cc
+++ b/chrome/browser/web_applications/policy/web_app_policy_manager.cc
@@ -27,10 +27,10 @@
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_external_install_options.h"
 #include "chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/policy/pre_redirection_url_observer.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_constants.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_id.h"
@@ -466,14 +466,14 @@
     LOG(WARNING) << "Policy-installed web app has invalid URL " << *install_url;
   }
 
-  UserDisplayMode user_display_mode;
+  mojom::UserDisplayMode user_display_mode;
   if (!default_launch_container) {
-    user_display_mode = UserDisplayMode::kBrowser;
+    user_display_mode = mojom::UserDisplayMode::kBrowser;
   } else if (default_launch_container->GetString() ==
              kDefaultLaunchContainerTabValue) {
-    user_display_mode = UserDisplayMode::kBrowser;
+    user_display_mode = mojom::UserDisplayMode::kBrowser;
   } else {
-    user_display_mode = UserDisplayMode::kStandalone;
+    user_display_mode = mojom::UserDisplayMode::kStandalone;
   }
 
   ExternalInstallOptions install_options{
diff --git a/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc b/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc
index 8341525..be96fa2 100644
--- a/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc
+++ b/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc
@@ -23,6 +23,7 @@
 #include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/ui/web_applications/test/ssl_test_utils.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_app_config_utils.h"
@@ -32,7 +33,6 @@
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/user_uninstalled_preinstalled_web_app_prefs.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -135,7 +135,7 @@
             SK_ColorBLACK);
 
   // User preferences:
-  EXPECT_EQ(web_app->user_display_mode(), UserDisplayMode::kStandalone);
+  EXPECT_EQ(web_app->user_display_mode(), mojom::UserDisplayMode::kStandalone);
 }
 #endif  // BUILDFLAG(IS_CHROMEOS)
 
@@ -881,7 +881,7 @@
   EXPECT_EQ(registrar().GetAppStartUrl(app_id).spec(), kAppStartUrl);
   EXPECT_EQ(registrar().GetAppScope(app_id).spec(), kAppScope);
   EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
   EXPECT_EQ(registrar().GetAppDisplayMode(app_id), DisplayMode::kMinimalUi);
   // theme_color must be installed opaque.
   EXPECT_EQ(registrar().GetAppThemeColor(app_id),
@@ -937,7 +937,7 @@
   EXPECT_EQ(registrar().GetAppStartUrl(app_id).spec(), install_url);
   EXPECT_EQ(registrar().GetAppScope(app_id).spec(), scope);
   EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
   EXPECT_EQ(registrar().GetAppDisplayMode(app_id), DisplayMode::kStandalone);
 }
 
@@ -979,7 +979,7 @@
   EXPECT_EQ(registrar().GetAppStartUrl(app_id).spec(), kAppStartUrl);
   EXPECT_EQ(registrar().GetAppScope(app_id).spec(), kAppScope);
   EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
   EXPECT_EQ(registrar().GetAppDisplayMode(app_id), DisplayMode::kMinimalUi);
   // theme_color must be installed opaque.
   EXPECT_EQ(registrar().GetAppThemeColor(app_id),
@@ -1031,7 +1031,7 @@
   EXPECT_EQ(registrar().GetAppStartUrl(app_id).spec(), start_url);
   EXPECT_EQ(registrar().GetAppScope(app_id).spec(), scope);
   EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
   EXPECT_EQ(registrar().GetAppDisplayMode(app_id), DisplayMode::kMinimalUi);
   // theme_color must be installed opaque.
   EXPECT_EQ(registrar().GetAppThemeColor(app_id),
diff --git a/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc b/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc
index e8b285c..2cd953a 100644
--- a/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc
+++ b/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc
@@ -23,12 +23,12 @@
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/extensions/extension_management_test_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_app_config_utils.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_paths.h"
@@ -282,7 +282,7 @@
 
   GURL install_url("https://test.app");
   constexpr char kExtensionId[] = "abcdefghijklmnopabcdefghijklmnop";
-  ExternalInstallOptions options(install_url, UserDisplayMode::kBrowser,
+  ExternalInstallOptions options(install_url, mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalDefault);
   options.user_type_allowlist = {"unmanaged"};
   options.uninstall_and_replace = {kExtensionId};
@@ -341,7 +341,8 @@
   {
     ExternalInstallOptions install_options(
         GURL("https://www.chromestatus.com/features"),
-        UserDisplayMode::kBrowser, ExternalInstallSource::kExternalDefault);
+        mojom::UserDisplayMode::kBrowser,
+        ExternalInstallSource::kExternalDefault);
     install_options.user_type_allowlist = {"unmanaged"};
     install_options.add_to_applications_menu = true;
     install_options.add_to_search = true;
@@ -355,7 +356,8 @@
   {
     ExternalInstallOptions install_options(
         GURL("https://events.google.com/io2016/?utm_source=web_app_manifest"),
-        UserDisplayMode::kStandalone, ExternalInstallSource::kExternalDefault);
+        mojom::UserDisplayMode::kStandalone,
+        ExternalInstallSource::kExternalDefault);
     install_options.user_type_allowlist = {"unmanaged"};
     install_options.add_to_applications_menu = true;
     install_options.add_to_search = true;
diff --git a/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc b/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc
index cfedadb..65f42ed6 100644
--- a/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc
+++ b/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc
@@ -26,13 +26,13 @@
 #include "chrome/browser/extensions/updater/extension_updater.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/web_applications/test/ssl_test_utils.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_app_manager.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.h"
 #include "chrome/browser/web_applications/test/app_registry_cache_waiter.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -523,7 +523,7 @@
     EXPECT_EQ(WebAppProvider::GetForTest(profile())
                   ->registrar_unsafe()
                   .GetAppUserDisplayMode(web_app_id),
-              UserDisplayMode::kBrowser);
+              mojom::UserDisplayMode::kBrowser);
   }
 }
 
@@ -570,7 +570,7 @@
   EXPECT_EQ(WebAppProvider::GetForTest(profile())
                 ->registrar_unsafe()
                 .GetAppUserDisplayMode(GetWebAppId()),
-            UserDisplayMode::kStandalone);
+            mojom::UserDisplayMode::kStandalone);
 }
 
 IN_PROC_BROWSER_TEST_F(PreinstalledWebAppMigrationBrowserTest,
@@ -693,7 +693,8 @@
     GTEST_SKIP() << "Unsupported Ash version.";
 
   ScopedTestingPreinstalledAppData preinstalled_apps;
-  ExternalInstallOptions options(GetWebAppUrl(), UserDisplayMode::kBrowser,
+  ExternalInstallOptions options(GetWebAppUrl(),
+                                 mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalDefault);
   options.gate_on_feature = kMigrationFlag;
   options.user_type_allowlist = {"unmanaged"};
diff --git a/chrome/browser/web_applications/preinstalled_web_app_utils.cc b/chrome/browser/web_applications/preinstalled_web_app_utils.cc
index 42c12c6..0137e5b 100644
--- a/chrome/browser/web_applications/preinstalled_web_app_utils.cc
+++ b/chrome/browser/web_applications/preinstalled_web_app_utils.cc
@@ -15,7 +15,7 @@
 #include "chrome/browser/apps/user_type_filter.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/file_utils_wrapper.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/pref_names.h"
 #include "components/prefs/scoped_user_pref_update.h"
@@ -199,7 +199,7 @@
                            const base::FilePath& dir,
                            const base::FilePath& file,
                            const base::Value& app_config) {
-  ExternalInstallOptions options(GURL(), UserDisplayMode::kStandalone,
+  ExternalInstallOptions options(GURL(), mojom::UserDisplayMode::kStandalone,
                                  ExternalInstallSource::kExternalDefault);
   options.require_manifest = true;
   options.force_reinstall = false;
@@ -325,9 +325,9 @@
   }
   std::string launch_container_str = *string;
   if (launch_container_str == kLaunchContainerTab) {
-    options.user_display_mode = UserDisplayMode::kBrowser;
+    options.user_display_mode = mojom::UserDisplayMode::kBrowser;
   } else if (launch_container_str == kLaunchContainerWindow) {
-    options.user_display_mode = UserDisplayMode::kStandalone;
+    options.user_display_mode = mojom::UserDisplayMode::kStandalone;
   } else {
     return base::StrCat({file.AsUTF8Unsafe(), " had an invalid ",
                          kLaunchContainer, ": ", launch_container_str});
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/calculator.cc b/chrome/browser/web_applications/preinstalled_web_apps/calculator.cc
index 13aac79..8c0a30f 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/calculator.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/calculator.cc
@@ -6,9 +6,9 @@
 
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_app_definition_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/preinstalled_web_apps_resources.h"
@@ -18,7 +18,7 @@
 ExternalInstallOptions GetConfigForCalculator() {
   ExternalInstallOptions options(
       /*install_url=*/GURL("https://calculator.apps.chrome/install"),
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   options.user_type_allowlist = {"unmanaged", "managed", "child"};
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc b/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc
index 2eae3bdd..d9ea8e2 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc
@@ -7,9 +7,9 @@
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_app_definition_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/preinstalled_web_apps_resources.h"
@@ -21,9 +21,9 @@
       /*install_url=*/GURL(
           "https://mail.google.com/mail/installwebapp?usp=chrome_default"),
 #if BUILDFLAG(IS_CHROMEOS)
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
 #else
-      /*user_display_mode=*/UserDisplayMode::kBrowser,
+      /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
 #endif  // BUILDFLAG(IS_CHROMEOS)
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_calendar.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_calendar.cc
index 8d062dd..fed06f1 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/google_calendar.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/google_calendar.cc
@@ -5,10 +5,10 @@
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/google_docs.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_app_definition_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/preinstalled_web_apps_resources.h"
@@ -103,9 +103,9 @@
       /*install_url=*/GURL("https://calendar.google.com/calendar/"
                            "installwebapp?usp=chrome_default"),
 #if BUILDFLAG(IS_CHROMEOS)
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
 #else
-      /*user_display_mode=*/UserDisplayMode::kBrowser,
+      /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
 #endif  // BUILDFLAG(IS_CHROMEOS)
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_chat.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_chat.cc
index 4a55ba91..e7a09c4 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/google_chat.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/google_chat.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/browser/web_applications/preinstalled_web_apps/google_chat.h"
 
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 
 namespace web_app {
@@ -13,7 +13,7 @@
   ExternalInstallOptions options(
       /*install_url=*/GURL(
           "https://mail.google.com/chat/download?usp=chrome_default"),
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   // Exclude managed users until we have a way for admins to block the app.
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_docs.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_docs.cc
index 2b9ec8d..e3f17a5 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/google_docs.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/google_docs.cc
@@ -6,9 +6,9 @@
 
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_app_definition_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/preinstalled_web_apps_resources.h"
@@ -103,7 +103,7 @@
   ExternalInstallOptions options(
       /*install_url=*/GURL(
           "https://docs.google.com/document/installwebapp?usp=chrome_default"),
-      /*user_display_mode=*/UserDisplayMode::kBrowser,
+      /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   options.user_type_allowlist = {"unmanaged", "managed", "child"};
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_drive.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_drive.cc
index 89fcc49..0c8a668 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/google_drive.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/google_drive.cc
@@ -6,9 +6,9 @@
 
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_app_definition_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/preinstalled_web_apps_resources.h"
@@ -106,7 +106,7 @@
   ExternalInstallOptions options(
       /*install_url=*/GURL(
           "https://drive.google.com/drive/installwebapp?usp=chrome_default"),
-      /*user_display_mode=*/UserDisplayMode::kBrowser,
+      /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   options.user_type_allowlist = {"unmanaged", "managed", "child"};
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_meet.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_meet.cc
index 69aa0154..910184f3 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/google_meet.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/google_meet.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/browser/web_applications/preinstalled_web_apps/google_meet.h"
 
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 
 namespace web_app {
@@ -13,7 +13,7 @@
   ExternalInstallOptions options(
       /*install_url=*/GURL(
           "https://meet.google.com/download/webapp?usp=chrome_default"),
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   // Exclude managed users until we have a way for admins to block the app.
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_sheets.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_sheets.cc
index 38a36fe..ea6811c 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/google_sheets.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/google_sheets.cc
@@ -6,9 +6,9 @@
 
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_app_definition_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/preinstalled_web_apps_resources.h"
@@ -101,7 +101,7 @@
   ExternalInstallOptions options(
       /*install_url=*/GURL("https://docs.google.com/spreadsheets/"
                            "installwebapp?usp=chrome_default"),
-      /*user_display_mode=*/UserDisplayMode::kBrowser,
+      /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   options.user_type_allowlist = {"unmanaged", "managed", "child"};
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_slides.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_slides.cc
index 7cff662c..a8b54f1b 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/google_slides.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/google_slides.cc
@@ -6,9 +6,9 @@
 
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_app_definition_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/preinstalled_web_apps_resources.h"
@@ -101,7 +101,7 @@
   ExternalInstallOptions options(
       /*install_url=*/GURL("https://docs.google.com/presentation/"
                            "installwebapp?usp=chrome_default"),
-      /*user_display_mode=*/UserDisplayMode::kBrowser,
+      /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   options.user_type_allowlist = {"unmanaged", "managed", "child"};
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/messages_dogfood.cc b/chrome/browser/web_applications/preinstalled_web_apps/messages_dogfood.cc
index 951427c7..4470d363 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/messages_dogfood.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/messages_dogfood.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/browser/web_applications/preinstalled_web_apps/messages_dogfood.h"
 
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 
 namespace web_app {
@@ -12,7 +12,7 @@
 ExternalInstallOptions GetConfigForMessagesDogfood() {
   ExternalInstallOptions options(
       /*install_url=*/GURL("https://messages.google.com/web/authentication"),
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
   options.uninstall_and_replace = {kMessagesDogfoodDeprecatedAppId};
diff --git a/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc b/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc
index d5077c1..3ead858 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc
@@ -7,9 +7,9 @@
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/preinstalled_app_install_features.h"
 #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_app_definition_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/grit/preinstalled_web_apps_resources.h"
@@ -21,9 +21,9 @@
       /*install_url=*/GURL(
           "https://www.youtube.com/s/notifications/manifest/cr_install.html"),
 #if BUILDFLAG(IS_CHROMEOS)
-      /*user_display_mode=*/UserDisplayMode::kStandalone,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone,
 #else
-      /*user_display_mode=*/UserDisplayMode::kBrowser,
+      /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
 #endif  // BUILDFLAG(IS_CHROMEOS)
       /*install_source=*/ExternalInstallSource::kExternalDefault);
 
diff --git a/chrome/browser/web_applications/test/web_app_install_test_utils.cc b/chrome/browser/web_applications/test/web_app_install_test_utils.cc
index 0cecc63..53d690f 100644
--- a/chrome/browser/web_applications/test/web_app_install_test_utils.cc
+++ b/chrome/browser/web_applications/test/web_app_install_test_utils.cc
@@ -11,8 +11,8 @@
 #include "base/test/bind.h"
 #include "base/test/test_future.h"
 #include "build/build_config.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -78,7 +78,7 @@
   web_app_info->scope = start_url;
   web_app_info->title = base::UTF8ToUTF16(app_name);
   web_app_info->description = base::UTF8ToUTF16(app_name);
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   web_app_info->install_url = start_url;
 
   return InstallWebApp(profile, std::move(web_app_info),
diff --git a/chrome/browser/web_applications/test/web_app_test_utils.cc b/chrome/browser/web_applications/test/web_app_test_utils.cc
index b3696b252..452d3796 100644
--- a/chrome/browser/web_applications/test/web_app_test_utils.cc
+++ b/chrome/browser/web_applications/test/web_app_test_utils.cc
@@ -38,9 +38,9 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/proto/web_app_os_integration_state.pb.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_chromeos_data.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
@@ -345,7 +345,7 @@
   auto web_app = std::make_unique<WebApp>(app_id);
   web_app->SetStartUrl(start_url);
   web_app->AddSource(source_type);
-  web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+  web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
   web_app->SetName("Name");
 
   return web_app;
@@ -444,9 +444,9 @@
   app->SetIsLocallyInstalled(random.next_bool());
   app->SetIsFromSyncAndPendingInstallation(random.next_bool());
 
-  const UserDisplayMode user_display_modes[3] = {UserDisplayMode::kBrowser,
-                                                 UserDisplayMode::kStandalone,
-                                                 UserDisplayMode::kTabbed};
+  const mojom::UserDisplayMode user_display_modes[3] = {
+      mojom::UserDisplayMode::kBrowser, mojom::UserDisplayMode::kStandalone,
+      mojom::UserDisplayMode::kTabbed};
   app->SetUserDisplayMode(user_display_modes[random.next_uint(3)]);
 
   const base::Time last_badging_time =
diff --git a/chrome/browser/web_applications/user_display_mode.cc b/chrome/browser/web_applications/user_display_mode.cc
index 5e932ab..0bfcd2d5 100644
--- a/chrome/browser/web_applications/user_display_mode.cc
+++ b/chrome/browser/web_applications/user_display_mode.cc
@@ -5,62 +5,50 @@
 #include <string>
 #include <type_traits>
 
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
-
 #include "components/services/app_service/public/cpp/app_types.h"
 #include "components/sync/protocol/web_app_specifics.pb.h"
 
 namespace web_app {
 
-bool operator==(UserDisplayMode lhs, UserDisplayMode rhs) {
-  return static_cast<std::underlying_type<UserDisplayMode>::type>(lhs) ==
-         static_cast<std::underlying_type<UserDisplayMode>::type>(rhs);
-}
-
-bool operator!=(UserDisplayMode lhs, UserDisplayMode rhs) {
-  return !(lhs == rhs);
-}
-
-std::ostream& operator<<(std::ostream& os, UserDisplayMode user_display_mode) {
-  return os << ConvertUserDisplayModeToString(user_display_mode);
-}
-
-std::string ConvertUserDisplayModeToString(UserDisplayMode user_display_mode) {
+std::string ConvertUserDisplayModeToString(
+    mojom::UserDisplayMode user_display_mode) {
   switch (user_display_mode) {
-    case UserDisplayMode::kBrowser:
+    case mojom::UserDisplayMode::kBrowser:
       return "browser";
-    case UserDisplayMode::kStandalone:
+    case mojom::UserDisplayMode::kStandalone:
       return "standalone";
-    case UserDisplayMode::kTabbed:
+    case mojom::UserDisplayMode::kTabbed:
       return "tabbed";
   }
 }
 
 ::sync_pb::WebAppSpecifics::UserDisplayMode
 ConvertUserDisplayModeToWebAppSpecificsUserDisplayMode(
-    UserDisplayMode user_display_mode) {
+    mojom::UserDisplayMode user_display_mode) {
   switch (user_display_mode) {
-    case UserDisplayMode::kBrowser:
+    case mojom::UserDisplayMode::kBrowser:
       return ::sync_pb::WebAppSpecifics::BROWSER;
-    case UserDisplayMode::kTabbed:
+    case mojom::UserDisplayMode::kTabbed:
       return ::sync_pb::WebAppSpecifics::TABBED;
-    case UserDisplayMode::kStandalone:
+    case mojom::UserDisplayMode::kStandalone:
       return ::sync_pb::WebAppSpecifics::STANDALONE;
   }
 }
 
-UserDisplayMode CreateUserDisplayModeFromWebAppSpecificsUserDisplayMode(
+mojom::UserDisplayMode CreateUserDisplayModeFromWebAppSpecificsUserDisplayMode(
     ::sync_pb::WebAppSpecifics::UserDisplayMode display_mode) {
   switch (display_mode) {
     case ::sync_pb::WebAppSpecifics::BROWSER:
-      return UserDisplayMode::kBrowser;
+      return mojom::UserDisplayMode::kBrowser;
     case ::sync_pb::WebAppSpecifics::TABBED:
-      return UserDisplayMode::kTabbed;
+      return mojom::UserDisplayMode::kTabbed;
     case ::sync_pb::WebAppSpecifics::STANDALONE:
-      return UserDisplayMode::kStandalone;
+      return mojom::UserDisplayMode::kStandalone;
     case ::sync_pb::WebAppSpecifics::UNSPECIFIED:
       // The same as `ToMojomDisplayMode`.
-      return UserDisplayMode::kStandalone;
+      return mojom::UserDisplayMode::kStandalone;
   }
 }
 
diff --git a/chrome/browser/web_applications/user_display_mode.h b/chrome/browser/web_applications/user_display_mode.h
index f9bb325..60964b0 100644
--- a/chrome/browser/web_applications/user_display_mode.h
+++ b/chrome/browser/web_applications/user_display_mode.h
@@ -13,32 +13,14 @@
 
 namespace web_app {
 
-// Reflects
-// https://source.chromium.org/chromium/chromium/src/+/main:components/sync/protocol/web_app_specifics.proto;l=44;drc=0758d11f3d4db21e8e8b1b3a5600261fde150afb
-enum class UserDisplayMode {
-  // The user prefers that the web app open in a browser context, like a tab.
-  kBrowser,
-
-  // The user prefers the web app open in a standalone window experience.
-  kStandalone,
-
-  // The user wants the web app to open in a standalone window experience with
-  // tabs.
-  kTabbed,
-};
-
-bool operator==(UserDisplayMode lhs, UserDisplayMode rhs);
-bool operator!=(UserDisplayMode lhs, UserDisplayMode rhs);
-
-std::ostream& operator<<(std::ostream& os, UserDisplayMode user_display_mode);
-
-std::string ConvertUserDisplayModeToString(UserDisplayMode user_display_mode);
+std::string ConvertUserDisplayModeToString(
+    mojom::UserDisplayMode user_display_mode);
 
 ::sync_pb::WebAppSpecifics::UserDisplayMode
 ConvertUserDisplayModeToWebAppSpecificsUserDisplayMode(
-    UserDisplayMode user_display_mode);
+    mojom::UserDisplayMode user_display_mode);
 
-UserDisplayMode CreateUserDisplayModeFromWebAppSpecificsUserDisplayMode(
+mojom::UserDisplayMode CreateUserDisplayModeFromWebAppSpecificsUserDisplayMode(
     ::sync_pb::WebAppSpecifics::UserDisplayMode display_mode);
 
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc
index 13ee2db..7cd0acd 100644
--- a/chrome/browser/web_applications/web_app.cc
+++ b/chrome/browser/web_applications/web_app.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/proto/web_app_os_integration_state.pb.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_chromeos_data.h"
@@ -251,7 +252,7 @@
   display_mode_ = display_mode;
 }
 
-void WebApp::SetUserDisplayMode(UserDisplayMode user_display_mode) {
+void WebApp::SetUserDisplayMode(mojom::UserDisplayMode user_display_mode) {
   user_display_mode_ = user_display_mode;
 }
 
diff --git a/chrome/browser/web_applications/web_app.h b/chrome/browser/web_applications/web_app.h
index d277746d..7c96c38 100644
--- a/chrome/browser/web_applications/web_app.h
+++ b/chrome/browser/web_applications/web_app.h
@@ -13,8 +13,8 @@
 #include "base/values.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_data.h"
 #include "chrome/browser/web_applications/isolation_data.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/proto/web_app_os_integration_state.pb.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_chromeos_data.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
@@ -79,7 +79,7 @@
 
   DisplayMode display_mode() const { return display_mode_; }
 
-  absl::optional<UserDisplayMode> user_display_mode() const {
+  absl::optional<mojom::UserDisplayMode> user_display_mode() const {
     return user_display_mode_;
   }
 
@@ -344,7 +344,7 @@
   void SetBackgroundColor(absl::optional<SkColor> background_color);
   void SetDarkModeBackgroundColor(absl::optional<SkColor> background_color);
   void SetDisplayMode(DisplayMode display_mode);
-  void SetUserDisplayMode(UserDisplayMode user_display_mode);
+  void SetUserDisplayMode(mojom::UserDisplayMode user_display_mode);
   void SetDisplayModeOverride(std::vector<DisplayMode> display_mode_override);
   void SetUserPageOrdinal(syncer::StringOrdinal page_ordinal);
   void SetUserLaunchOrdinal(syncer::StringOrdinal launch_ordinal);
@@ -447,7 +447,7 @@
   absl::optional<SkColor> background_color_;
   absl::optional<SkColor> dark_mode_background_color_;
   DisplayMode display_mode_ = DisplayMode::kUndefined;
-  absl::optional<UserDisplayMode> user_display_mode_ = absl::nullopt;
+  absl::optional<mojom::UserDisplayMode> user_display_mode_ = absl::nullopt;
   std::vector<DisplayMode> display_mode_override_;
   syncer::StringOrdinal user_page_ordinal_;
   syncer::StringOrdinal user_launch_ordinal_;
diff --git a/chrome/browser/web_applications/web_app_database.cc b/chrome/browser/web_applications/web_app_database.cc
index fe186d98..2bc69e8 100644
--- a/chrome/browser/web_applications/web_app_database.cc
+++ b/chrome/browser/web_applications/web_app_database.cc
@@ -17,6 +17,7 @@
 #include "base/pickle.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/web_app_file_handler_manager.h"
 #include "chrome/browser/web_applications/proto/web_app.pb.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
diff --git a/chrome/browser/web_applications/web_app_database_unittest.cc b/chrome/browser/web_applications/web_app_database_unittest.cc
index 2ca0cda..02a295f 100644
--- a/chrome/browser/web_applications/web_app_database_unittest.cc
+++ b/chrome/browser/web_applications/web_app_database_unittest.cc
@@ -16,12 +16,12 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
 #include "base/time/time.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/proto/web_app.pb.h"
 #include "chrome/browser/web_applications/test/fake_web_app_database_factory.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
@@ -311,7 +311,7 @@
   EXPECT_EQ(app_id, app->app_id());
   EXPECT_EQ(start_url, app->start_url());
   EXPECT_EQ(name, app->untranslated_name());
-  EXPECT_EQ(UserDisplayMode::kBrowser, app->user_display_mode());
+  EXPECT_EQ(mojom::UserDisplayMode::kBrowser, app->user_display_mode());
   EXPECT_EQ(is_locally_installed, app->is_locally_installed());
   EXPECT_TRUE(app->IsSynced());
   EXPECT_FALSE(app->IsPreinstalledApp());
@@ -339,7 +339,7 @@
   // Required fields:
   app->SetStartUrl(start_url);
   app->SetName(name);
-  app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+  app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
   app->SetIsLocallyInstalled(false);
   // chromeos_data should always be set on ChromeOS.
   if (IsChromeOsDataMandatory())
@@ -401,7 +401,7 @@
   EXPECT_EQ(app_id, app_copy->app_id());
   EXPECT_EQ(start_url, app_copy->start_url());
   EXPECT_EQ(name, app_copy->untranslated_name());
-  EXPECT_EQ(UserDisplayMode::kBrowser, app_copy->user_display_mode());
+  EXPECT_EQ(mojom::UserDisplayMode::kBrowser, app_copy->user_display_mode());
   EXPECT_FALSE(app_copy->is_locally_installed());
 
   auto& chromeos_data = app_copy->chromeos_data();
@@ -584,7 +584,7 @@
     AppId app_id = GenerateAppId(/*manifest_id=*/absl::nullopt, start_url);
     auto web_app = std::make_unique<WebApp>(app_id);
     web_app->SetStartUrl(start_url);
-    web_app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+    web_app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
     web_app->AddSource(WebAppManagement::Type::kDefault);
     return web_app;
   }
diff --git a/chrome/browser/web_applications/web_app_icon_manager_browsertest.cc b/chrome/browser/web_applications/web_app_icon_manager_browsertest.cc
index c118a61..d43be6d 100644
--- a/chrome/browser/web_applications/web_app_icon_manager_browsertest.cc
+++ b/chrome/browser/web_applications/web_app_icon_manager_browsertest.cc
@@ -13,8 +13,8 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/web_applications/web_app_browser_controller.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_icon_generator.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
@@ -77,7 +77,7 @@
     install_info->start_url = start_url;
     install_info->scope = start_url.GetWithoutFilename();
     install_info->title = u"App Name";
-    install_info->user_display_mode = UserDisplayMode::kStandalone;
+    install_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
 
     {
       SkBitmap bitmap;
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc
index bed6b2f..2548f13 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.cc
+++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -26,10 +26,10 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/commands/web_app_uninstall_command.h"
 #include "chrome/browser/web_applications/isolation_prefs_utils.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcuts_menu.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -291,8 +291,10 @@
   // Reparent the web contents into its own window only if that is the
   // app's launch type.
   DCHECK(registrar_);
-  if (registrar_->GetAppUserDisplayMode(app_id) == UserDisplayMode::kBrowser)
+  if (registrar_->GetAppUserDisplayMode(app_id) ==
+      mojom::UserDisplayMode::kBrowser) {
     return false;
+  }
 
   return ui_manager_->CanReparentAppTabToWindow(app_id, shortcut_created);
 }
diff --git a/chrome/browser/web_applications/web_app_install_info.h b/chrome/browser/web_applications/web_app_install_info.h
index 4648d69..e0ec04e 100644
--- a/chrome/browser/web_applications/web_app_install_info.h
+++ b/chrome/browser/web_applications/web_app_install_info.h
@@ -13,7 +13,7 @@
 #include <vector>
 
 #include "base/values.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "components/services/app_service/public/cpp/file_handler.h"
 #include "components/services/app_service/public/cpp/icon_info.h"
 #include "components/services/app_service/public/cpp/protocol_handler_info.h"
@@ -267,8 +267,8 @@
   // User preference for whether the app should be opened as a tab or in an app
   // window. Must be either kBrowser or kStandalone, this will be checked by
   // WebApp::SetUserDisplayMode().
-  absl::optional<web_app::UserDisplayMode> user_display_mode =
-      web_app::UserDisplayMode::kBrowser;
+  absl::optional<web_app::mojom::UserDisplayMode> user_display_mode =
+      web_app::mojom::UserDisplayMode::kBrowser;
 
   // The extensions and mime types the app can handle.
   apps::FileHandlers file_handlers;
diff --git a/chrome/browser/web_applications/web_app_install_manager.cc b/chrome/browser/web_applications/web_app_install_manager.cc
index c5e0761e..886c60d 100644
--- a/chrome/browser/web_applications/web_app_install_manager.cc
+++ b/chrome/browser/web_applications/web_app_install_manager.cc
@@ -21,7 +21,7 @@
 #include "chrome/browser/web_applications/commands/install_from_sync_command.h"
 #include "chrome/browser/web_applications/commands/web_app_uninstall_command.h"
 #include "chrome/browser/web_applications/install_bounce_metric.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
diff --git a/chrome/browser/web_applications/web_app_install_params.h b/chrome/browser/web_applications/web_app_install_params.h
index 64c126ab5..d774e24 100644
--- a/chrome/browser/web_applications/web_app_install_params.h
+++ b/chrome/browser/web_applications/web_app_install_params.h
@@ -11,7 +11,7 @@
 
 #include "base/callback.h"
 #include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "components/webapps/browser/install_result_code.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -56,7 +56,7 @@
   bool force_reinstall = false;
 
   // See `WebAppInstallTask::ApplyParamsToWebAppInstallInfo`
-  absl::optional<UserDisplayMode> user_display_mode = absl::nullopt;
+  absl::optional<mojom::UserDisplayMode> user_display_mode = absl::nullopt;
 
   // URL to be used as start_url if manifest is unavailable.
   GURL fallback_start_url;
diff --git a/chrome/browser/web_applications/web_app_install_task.cc b/chrome/browser/web_applications/web_app_install_task.cc
index 77b6569d..65b29bf 100644
--- a/chrome/browser/web_applications/web_app_install_task.cc
+++ b/chrome/browser/web_applications/web_app_install_task.cc
@@ -18,7 +18,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/web_applications/install_bounce_metric.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_data_retriever.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_icon_generator.h"
@@ -771,7 +771,7 @@
         install_finalizer_->CanReparentTab(app_id, !error);
 
     if (can_reparent_tab &&
-        (web_app_info->user_display_mode != UserDisplayMode::kBrowser)) {
+        (web_app_info->user_display_mode != mojom::UserDisplayMode::kBrowser)) {
       install_finalizer_->ReparentTab(app_id, !error, web_contents());
     }
   }
diff --git a/chrome/browser/web_applications/web_app_install_task_unittest.cc b/chrome/browser/web_applications/web_app_install_task_unittest.cc
index 836165ba..f26118a 100644
--- a/chrome/browser/web_applications/web_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_task_unittest.cc
@@ -21,6 +21,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/test/fake_data_retriever.h"
 #include "chrome/browser/web_applications/test/fake_install_finalizer.h"
@@ -33,7 +34,6 @@
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -136,7 +136,7 @@
                              const std::string& description,
                              const GURL& scope,
                              absl::optional<SkColor> theme_color,
-                             UserDisplayMode user_display_mode) {
+                             mojom::UserDisplayMode user_display_mode) {
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
 
     web_app_info->start_url = url;
@@ -152,8 +152,9 @@
   void CreateRendererAppInfo(const GURL& url,
                              const std::string& name,
                              const std::string& description) {
-    CreateRendererAppInfo(url, name, description, GURL(), absl::nullopt,
-                          /*user_display_mode=*/UserDisplayMode::kStandalone);
+    CreateRendererAppInfo(
+        url, name, description, GURL(), absl::nullopt,
+        /*user_display_mode=*/mojom::UserDisplayMode::kStandalone);
   }
 
   void InitializeInstallTaskAndRetriever(
@@ -184,7 +185,7 @@
   }
 
   void CreateDataToRetrieve(const GURL& url,
-                            UserDisplayMode user_display_mode) {
+                            mojom::UserDisplayMode user_display_mode) {
     DCHECK(data_retriever_);
 
     auto renderer_web_app_info = std::make_unique<WebAppInstallInfo>();
@@ -348,7 +349,7 @@
                              const std::string& description,
                              const GURL& scope,
                              absl::optional<SkColor> theme_color,
-                             UserDisplayMode user_display_mode) {
+                             mojom::UserDisplayMode user_display_mode) {
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
 
     web_app_info->start_url = url;
@@ -378,9 +379,9 @@
 
   InitializeInstallTaskAndRetriever(
       webapps::WebappInstallSource::MENU_BROWSER_TAB);
-  CreateRendererAppInfo(url, "Renderer Name", description, /*scope*/ GURL{},
-                        theme_color,
-                        /*user_display_mode=*/UserDisplayMode::kStandalone);
+  CreateRendererAppInfo(
+      url, "Renderer Name", description, /*scope*/ GURL{}, theme_color,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone);
   {
     auto manifest = blink::mojom::Manifest::New();
     manifest->start_url = url;
@@ -556,10 +557,10 @@
   const std::string renderer_description = "RendererDescription";
   InitializeInstallTaskAndRetriever(
       webapps::WebappInstallSource::MENU_BROWSER_TAB);
-  CreateRendererAppInfo(GURL("https://renderer.com/path"), "RendererName",
-                        renderer_description,
-                        GURL("https://renderer.com/scope"), 0x00,
-                        /*user_display_mode=*/UserDisplayMode::kStandalone);
+  CreateRendererAppInfo(
+      GURL("https://renderer.com/path"), "RendererName", renderer_description,
+      GURL("https://renderer.com/scope"), 0x00,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone);
 
   const GURL manifest_start_url = GURL("https://example.com/start");
   const AppId app_id =
@@ -624,7 +625,7 @@
 
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = url;
-  web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
   web_app_info->title = u"App Name";
 
   base::RunLoop run_loop;
@@ -640,7 +641,7 @@
             std::unique_ptr<WebAppInstallInfo> final_web_app_info =
                 fake_install_finalizer().web_app_info();
             EXPECT_EQ(final_web_app_info->user_display_mode,
-                      UserDisplayMode::kStandalone);
+                      mojom::UserDisplayMode::kStandalone);
 
             run_loop.Quit();
           }));
@@ -654,7 +655,7 @@
 
   auto web_app_info = std::make_unique<WebAppInstallInfo>();
   web_app_info->start_url = GURL("https://example.com/path");
-  web_app_info->user_display_mode = UserDisplayMode::kBrowser;
+  web_app_info->user_display_mode = mojom::UserDisplayMode::kBrowser;
   web_app_info->title = u"App Name";
 
   // Add square yellow icon.
@@ -683,7 +684,7 @@
         }
 
         EXPECT_EQ(final_web_app_info->user_display_mode,
-                  UserDisplayMode::kBrowser);
+                  mojom::UserDisplayMode::kBrowser);
 
         run_loop.Quit();
       }));
@@ -742,9 +743,9 @@
   const GURL manifest_scope{"https://example.com/"};
   const absl::optional<SkColor> theme_color = 0xAABBCCDD;
 
-  CreateRendererAppInfo(manifest_start_url, title, description, manifest_scope,
-                        theme_color,
-                        /*user_display_mode=*/UserDisplayMode::kStandalone);
+  CreateRendererAppInfo(
+      manifest_start_url, title, description, manifest_scope, theme_color,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone);
 
   base::RunLoop run_loop;
 
@@ -928,8 +929,9 @@
   InitializeInstallTaskAndRetriever(
       webapps::WebappInstallSource::MENU_BROWSER_TAB);
   CreateDefaultDataToRetrieve(url, scope);
-  CreateRendererAppInfo(url, name, description, /*scope=*/GURL{}, theme_color,
-                        /*user_display_mode=*/UserDisplayMode::kStandalone);
+  CreateRendererAppInfo(
+      url, name, description, /*scope=*/GURL{}, theme_color,
+      /*user_display_mode=*/mojom::UserDisplayMode::kStandalone);
 
   const char kWebAppSettingWithDefaultConfiguration[] = R"([
     {
@@ -1082,7 +1084,7 @@
 
     auto web_app_info = std::make_unique<WebAppInstallInfo>();
     web_app_info->start_url = url;
-    web_app_info->user_display_mode = UserDisplayMode::kStandalone;
+    web_app_info->user_display_mode = mojom::UserDisplayMode::kStandalone;
     web_app_info->theme_color = theme_color;
     web_app_info->title = u"App Name";
 
diff --git a/chrome/browser/web_applications/web_app_proto_utils.cc b/chrome/browser/web_applications/web_app_proto_utils.cc
index f97e915..6bb92a2 100644
--- a/chrome/browser/web_applications/web_app_proto_utils.cc
+++ b/chrome/browser/web_applications/web_app_proto_utils.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/web_applications/web_app_proto_utils.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
 #include "components/services/app_service/public/cpp/icon_info.h"
 #include "third_party/blink/public/mojom/manifest/manifest.mojom.h"
@@ -89,7 +90,7 @@
   sync_proto.set_start_url(app.start_url().spec());
   sync_proto.set_user_display_mode(
       ConvertUserDisplayModeToWebAppSpecificsUserDisplayMode(
-          app.user_display_mode().value_or(UserDisplayMode::kBrowser)));
+          app.user_display_mode().value_or(mojom::UserDisplayMode::kBrowser)));
   sync_proto.set_name(app.sync_fallback_data().name);
   if (app.sync_fallback_data().theme_color.has_value())
     sync_proto.set_theme_color(app.sync_fallback_data().theme_color.value());
diff --git a/chrome/browser/web_applications/web_app_registrar.cc b/chrome/browser/web_applications/web_app_registrar.cc
index 41122af..ca85f49 100644
--- a/chrome/browser/web_applications/web_app_registrar.cc
+++ b/chrome/browser/web_applications/web_app_registrar.cc
@@ -22,9 +22,9 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/web_applications/app_registrar_observer.h"
 #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/proto/web_app_os_integration_state.pb.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -191,7 +191,7 @@
 
 void WebAppRegistrar::NotifyWebAppUserDisplayModeChanged(
     const AppId& app_id,
-    UserDisplayMode user_display_mode) {
+    mojom::UserDisplayMode user_display_mode) {
   for (AppRegistrarObserver& observer : observers_)
     observer.OnWebAppUserDisplayModeChanged(app_id, user_display_mode);
 }
@@ -462,7 +462,7 @@
     return DisplayMode::kBrowser;
 
   auto app_display_mode = GetAppDisplayMode(app_id);
-  absl::optional<UserDisplayMode> user_display_mode =
+  absl::optional<mojom::UserDisplayMode> user_display_mode =
       GetAppUserDisplayMode(app_id);
   if (app_display_mode == DisplayMode::kUndefined ||
       !user_display_mode.has_value()) {
@@ -927,7 +927,7 @@
   return web_app ? web_app->display_mode() : DisplayMode::kUndefined;
 }
 
-absl::optional<UserDisplayMode> WebAppRegistrar::GetAppUserDisplayMode(
+absl::optional<mojom::UserDisplayMode> WebAppRegistrar::GetAppUserDisplayMode(
     const AppId& app_id) const {
   auto* web_app = GetAppById(app_id);
   if (web_app == nullptr) {
diff --git a/chrome/browser/web_applications/web_app_registrar.h b/chrome/browser/web_applications/web_app_registrar.h
index ccb4a09b..ee4de11 100644
--- a/chrome/browser/web_applications/web_app_registrar.h
+++ b/chrome/browser/web_applications/web_app_registrar.h
@@ -20,8 +20,8 @@
 #include "base/scoped_observation.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profile_manager_observer.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/proto/web_app_os_integration_state.pb.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
@@ -209,7 +209,7 @@
   absl::optional<GURL> GetAppScopeInternal(const AppId& app_id) const;
 
   DisplayMode GetAppDisplayMode(const AppId& app_id) const;
-  absl::optional<UserDisplayMode> GetAppUserDisplayMode(
+  absl::optional<mojom::UserDisplayMode> GetAppUserDisplayMode(
       const AppId& app_id) const;
   std::vector<DisplayMode> GetAppDisplayModeOverride(const AppId& app_id) const;
 
@@ -360,8 +360,9 @@
                                          const base::Time& time);
   void NotifyWebAppInstallTimeChanged(const AppId& app_id,
                                       const base::Time& time);
-  void NotifyWebAppUserDisplayModeChanged(const AppId& app_id,
-                                          UserDisplayMode user_display_mode);
+  void NotifyWebAppUserDisplayModeChanged(
+      const AppId& app_id,
+      mojom::UserDisplayMode user_display_mode);
   void NotifyWebAppRunOnOsLoginModeChanged(
       const AppId& app_id,
       RunOnOsLoginMode run_on_os_login_mode);
diff --git a/chrome/browser/web_applications/web_app_registrar_unittest.cc b/chrome/browser/web_applications/web_app_registrar_unittest.cc
index 74c0e77..13a32cf 100644
--- a/chrome/browser/web_applications/web_app_registrar_unittest.cc
+++ b/chrome/browser/web_applications/web_app_registrar_unittest.cc
@@ -20,12 +20,12 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/web_applications/commands/run_on_os_login_command.h"
 #include "chrome/browser/web_applications/isolation_data.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_database_factory.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
@@ -66,7 +66,7 @@
     web_app->SetStartUrl(GURL(url));
     web_app->SetName("Name" + base::NumberToString(i));
     web_app->SetDisplayMode(DisplayMode::kBrowser);
-    web_app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+    web_app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
 
     registry.emplace(app_id, std::move(web_app));
   }
@@ -255,7 +255,7 @@
 
   web_app->AddSource(WebAppManagement::kSync);
   web_app->SetDisplayMode(DisplayMode::kStandalone);
-  web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+  web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
   web_app->SetName(name);
   web_app->SetDescription(description);
   web_app->SetStartUrl(start_url);
@@ -264,7 +264,7 @@
 
   web_app2->AddSource(WebAppManagement::kDefault);
   web_app2->SetDisplayMode(DisplayMode::kBrowser);
-  web_app2->SetUserDisplayMode(UserDisplayMode::kBrowser);
+  web_app2->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
   web_app2->SetStartUrl(start_url2);
   web_app2->SetName(name);
 
@@ -465,7 +465,7 @@
   const std::string description = "Description";
   const absl::optional<SkColor> theme_color = 0xAABBCCDD;
   const auto display_mode = DisplayMode::kMinimalUi;
-  const auto user_display_mode = UserDisplayMode::kStandalone;
+  const auto user_display_mode = mojom::UserDisplayMode::kStandalone;
   std::vector<DisplayMode> display_mode_override;
 
   EXPECT_EQ(std::string(), registrar().GetAppShortName(app_id));
@@ -493,7 +493,7 @@
   EXPECT_EQ(description, registrar().GetAppDescription(app_id));
   EXPECT_EQ(theme_color, registrar().GetAppThemeColor(app_id));
   EXPECT_EQ(start_url, registrar().GetAppStartUrl(app_id));
-  EXPECT_EQ(UserDisplayMode::kStandalone,
+  EXPECT_EQ(mojom::UserDisplayMode::kStandalone,
             registrar().GetAppUserDisplayMode(app_id));
 
   {
@@ -517,13 +517,15 @@
   {
     EXPECT_FALSE(registrar().GetAppUserDisplayMode("unknown").has_value());
 
-    web_app_ptr->SetUserDisplayMode(UserDisplayMode::kBrowser);
-    EXPECT_EQ(UserDisplayMode::kBrowser,
+    web_app_ptr->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
+    EXPECT_EQ(mojom::UserDisplayMode::kBrowser,
               registrar().GetAppUserDisplayMode(app_id));
 
-    sync_bridge().SetAppUserDisplayMode(app_id, UserDisplayMode::kStandalone,
+    sync_bridge().SetAppUserDisplayMode(app_id,
+                                        mojom::UserDisplayMode::kStandalone,
                                         /*is_user_action=*/false);
-    EXPECT_EQ(UserDisplayMode::kStandalone, web_app_ptr->user_display_mode());
+    EXPECT_EQ(mojom::UserDisplayMode::kStandalone,
+              web_app_ptr->user_display_mode());
     EXPECT_EQ(DisplayMode::kMinimalUi, web_app_ptr->display_mode());
 
     ASSERT_EQ(2u, web_app_ptr->display_mode_override().size());
@@ -942,7 +944,7 @@
   auto web_app = test::CreateWebApp();
   const AppId app_id = web_app->app_id();
   web_app->SetDisplayMode(DisplayMode::kStandalone);
-  web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+  web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
   web_app->SetIsLocallyInstalled(false);
   RegisterApp(std::move(web_app));
 
@@ -962,7 +964,7 @@
   auto web_app = test::CreateWebApp();
   const AppId app_id = web_app->app_id();
   web_app->SetDisplayMode(DisplayMode::kStandalone);
-  web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+  web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
   web_app->SetIsLocallyInstalled(false);
 
   // Not locally installed apps get browser display mode because they do not
@@ -984,7 +986,7 @@
 
   // Valid manifest must have standalone display mode
   web_app->SetDisplayMode(DisplayMode::kStandalone);
-  web_app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+  web_app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
   web_app->SetIsLocallyInstalled(true);
   web_app->SetStorageIsolated(true);
   web_app->SetIsolationData(IsolationData(IsolationData::DevModeProxy{
@@ -1006,7 +1008,7 @@
   display_mode_overrides.push_back(DisplayMode::kMinimalUi);
 
   web_app->SetDisplayMode(DisplayMode::kStandalone);
-  web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+  web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
   web_app->SetDisplayModeOverride(display_mode_overrides);
   web_app->SetIsLocallyInstalled(false);
   RegisterApp(std::move(web_app));
@@ -1031,7 +1033,7 @@
   display_mode_overrides.push_back(DisplayMode::kMinimalUi);
 
   web_app->SetDisplayMode(DisplayMode::kStandalone);
-  web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+  web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
   web_app->SetDisplayModeOverride(display_mode_overrides);
   web_app->SetIsLocallyInstalled(false);
   RegisterApp(std::move(web_app));
@@ -1109,7 +1111,7 @@
   std::unique_ptr<WebApp> default_app = test::CreateWebApp(
       GURL("https://example.com/path"), WebAppManagement::kDefault);
   default_app->SetDisplayMode(DisplayMode::kStandalone);
-  default_app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+  default_app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
 
   const AppId app_id = default_app->app_id();
   const GURL external_app_url("https://example.com/path/default");
diff --git a/chrome/browser/web_applications/web_app_sync_bridge.cc b/chrome/browser/web_applications/web_app_sync_bridge.cc
index 787d72d..637a00a 100644
--- a/chrome/browser/web_applications/web_app_sync_bridge.cc
+++ b/chrome/browser/web_applications/web_app_sync_bridge.cc
@@ -18,6 +18,7 @@
 #include "base/types/pass_key.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
@@ -209,19 +210,20 @@
                                          std::move(callback)));
 }
 
-void WebAppSyncBridge::SetAppUserDisplayMode(const AppId& app_id,
-                                             UserDisplayMode user_display_mode,
-                                             bool is_user_action) {
+void WebAppSyncBridge::SetAppUserDisplayMode(
+    const AppId& app_id,
+    mojom::UserDisplayMode user_display_mode,
+    bool is_user_action) {
   if (is_user_action) {
     switch (user_display_mode) {
-      case UserDisplayMode::kStandalone:
+      case mojom::UserDisplayMode::kStandalone:
         base::RecordAction(
             base::UserMetricsAction("WebApp.SetWindowMode.Window"));
         break;
-      case UserDisplayMode::kBrowser:
+      case mojom::UserDisplayMode::kBrowser:
         base::RecordAction(base::UserMetricsAction("WebApp.SetWindowMode.Tab"));
         break;
-      case UserDisplayMode::kTabbed:
+      case mojom::UserDisplayMode::kTabbed:
         base::RecordAction(
             base::UserMetricsAction("WebApp.SetWindowMode.Tabbed"));
         break;
diff --git a/chrome/browser/web_applications/web_app_sync_bridge.h b/chrome/browser/web_applications/web_app_sync_bridge.h
index a5d5845..76d2c9d4 100644
--- a/chrome/browser/web_applications/web_app_sync_bridge.h
+++ b/chrome/browser/web_applications/web_app_sync_bridge.h
@@ -11,7 +11,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "build/build_config.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
@@ -91,7 +91,7 @@
   void Init(base::OnceClosure callback);
 
   void SetAppUserDisplayMode(const AppId& app_id,
-                             UserDisplayMode user_display_mode,
+                             mojom::UserDisplayMode user_display_mode,
                              bool is_user_action);
 
   void SetAppIsDisabled(AppLock& lock, const AppId& app_id, bool is_disabled);
diff --git a/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc b/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc
index 23335af..32d2f73e 100644
--- a/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc
+++ b/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/test/bind.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_database_factory.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
@@ -21,7 +22,6 @@
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_observers.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -104,7 +104,7 @@
   web_app->AddSource(WebAppManagement::kSync);
   web_app->SetStartUrl(start_url);
   web_app->SetName("Name");
-  web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+  web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
   return web_app;
 }
 
@@ -577,7 +577,7 @@
   for (int i = 0; i < 5; ++i) {
     auto app_to_update = std::make_unique<WebApp>(*merged_apps[i]);
     // Update user display mode field.
-    app_to_update->SetUserDisplayMode(UserDisplayMode::kBrowser);
+    app_to_update->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
     ConvertAppToEntityChange(
         *app_to_update, syncer::EntityChange::ACTION_UPDATE, &entity_changes);
     // Override the app in the expected registry.
@@ -716,7 +716,7 @@
   // Update last 5 initial apps.
   for (int i = 5; i < 10; ++i) {
     auto app_to_update = std::make_unique<WebApp>(*merged_apps[i]);
-    app_to_update->SetUserDisplayMode(UserDisplayMode::kStandalone);
+    app_to_update->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
 
     WebApp::SyncFallbackData sync_fallback_data;
     sync_fallback_data.name = "Sync Name";
@@ -808,7 +808,7 @@
   AppsList apps_to_update;
   for (int i = 0; i < 5; ++i) {
     auto app_to_update = std::make_unique<WebApp>(*policy_and_sync_apps[i]);
-    app_to_update->SetUserDisplayMode(UserDisplayMode::kBrowser);
+    app_to_update->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
 
     WebApp::SyncFallbackData sync_fallback_data;
     sync_fallback_data.name = "Updated Sync Name";
@@ -992,7 +992,7 @@
     sync_fallback_data.name = "Updated Sync Name";
     sync_fallback_data.theme_color = SK_ColorBLACK;
     sync_app->SetSyncFallbackData(std::move(sync_fallback_data));
-    sync_app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+    sync_app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
 
     // Override the app in the expected registry.
     registry[sync_app->app_id()] = std::make_unique<WebApp>(*sync_app);
@@ -1191,7 +1191,7 @@
 TEST_F(WebAppSyncBridgeTest, ApplySyncChanges_OnWebAppsWillBeUpdatedFromSync) {
   AppsList initial_registry_apps = CreateAppsList("https://example.com/", 10);
   for (std::unique_ptr<WebApp>& app : initial_registry_apps)
-    app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+    app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
   InitSyncBridgeFromAppList(initial_registry_apps);
 
   WebAppTestRegistryObserverAdapter observer{&registrar()};
@@ -1207,14 +1207,14 @@
           EXPECT_NE(*old_app_state, *new_app_state);
 
           EXPECT_EQ(old_app_state->user_display_mode(),
-                    UserDisplayMode::kBrowser);
+                    mojom::UserDisplayMode::kBrowser);
           EXPECT_EQ(new_app_state->user_display_mode(),
-                    UserDisplayMode::kStandalone);
+                    mojom::UserDisplayMode::kStandalone);
 
           // new and old states must be equal if diff fixed:
           auto old_app_state_no_diff = std::make_unique<WebApp>(*old_app_state);
           old_app_state_no_diff->SetUserDisplayMode(
-              UserDisplayMode::kStandalone);
+              mojom::UserDisplayMode::kStandalone);
           EXPECT_EQ(*old_app_state_no_diff, *new_app_state);
 
           RemoveWebAppFromAppsList(&initial_registry_apps,
@@ -1229,7 +1229,7 @@
   // Update first 5 apps: change user_display_mode field only.
   for (int i = 0; i < 5; ++i) {
     auto app_server_state = std::make_unique<WebApp>(*initial_registry_apps[i]);
-    app_server_state->SetUserDisplayMode(UserDisplayMode::kStandalone);
+    app_server_state->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
     apps_server_state.push_back(std::move(app_server_state));
   }
 
@@ -1240,7 +1240,7 @@
   // 5 other apps left unchanged:
   EXPECT_EQ(5u, initial_registry_apps.size());
   for (int i = 0; i < 5; ++i) {
-    EXPECT_EQ(UserDisplayMode::kBrowser,
+    EXPECT_EQ(mojom::UserDisplayMode::kBrowser,
               initial_registry_apps[i]->user_display_mode());
   }
 }
@@ -1249,7 +1249,7 @@
   AppsList initial_registry_apps = CreateAppsList("https://example.com/", 5);
   std::vector<AppId> initial_app_ids;
   for (std::unique_ptr<WebApp>& app : initial_registry_apps) {
-    app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+    app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
     app->SetIsUninstalling(true);
     initial_app_ids.push_back(app->app_id());
   }
diff --git a/chrome/browser/web_applications/web_app_ui_manager_unittest.cc b/chrome/browser/web_applications/web_app_ui_manager_unittest.cc
index 3a25637..2b1e117 100644
--- a/chrome/browser/web_applications/web_app_ui_manager_unittest.cc
+++ b/chrome/browser/web_applications/web_app_ui_manager_unittest.cc
@@ -9,8 +9,8 @@
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/browser/web_applications/web_app_ui_manager.h"
@@ -43,9 +43,9 @@
     auto web_app = std::make_unique<WebApp>(kTestAppId);
     web_app->SetDisplayMode(display_mode);
     if (display_mode == DisplayMode::kBrowser) {
-      web_app->SetUserDisplayMode(UserDisplayMode::kBrowser);
+      web_app->SetUserDisplayMode(mojom::UserDisplayMode::kBrowser);
     } else {
-      web_app->SetUserDisplayMode(UserDisplayMode::kStandalone);
+      web_app->SetUserDisplayMode(mojom::UserDisplayMode::kStandalone);
     }
     Registry map;
     map[kTestAppId] = std::move(web_app);
diff --git a/chrome/browser/web_applications/web_app_utils.cc b/chrome/browser/web_applications/web_app_utils.cc
index a1f83e3..95add8ad 100644
--- a/chrome/browser/web_applications/web_app_utils.cc
+++ b/chrome/browser/web_applications/web_app_utils.cc
@@ -26,8 +26,8 @@
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
@@ -227,16 +227,16 @@
 }
 
 absl::optional<DisplayMode> TryResolveUserDisplayMode(
-    UserDisplayMode user_display_mode) {
+    mojom::UserDisplayMode user_display_mode) {
   switch (user_display_mode) {
-    case UserDisplayMode::kBrowser:
+    case mojom::UserDisplayMode::kBrowser:
       return DisplayMode::kBrowser;
-    case UserDisplayMode::kTabbed:
+    case mojom::UserDisplayMode::kTabbed:
       if (base::FeatureList::IsEnabled(features::kDesktopPWAsTabStripSettings))
         return DisplayMode::kTabbed;
       // Treat as standalone.
       [[fallthrough]];
-    case UserDisplayMode::kStandalone:
+    case mojom::UserDisplayMode::kStandalone:
       break;
   }
 
@@ -260,7 +260,7 @@
 DisplayMode ResolveNonIsolatedEffectiveDisplayMode(
     DisplayMode app_display_mode,
     const std::vector<DisplayMode>& display_mode_overrides,
-    UserDisplayMode user_display_mode) {
+    mojom::UserDisplayMode user_display_mode) {
   const absl::optional<DisplayMode> resolved_display_mode =
       TryResolveUserDisplayMode(user_display_mode);
   if (resolved_display_mode.has_value()) {
@@ -611,7 +611,7 @@
 DisplayMode ResolveEffectiveDisplayMode(
     DisplayMode app_display_mode,
     const std::vector<DisplayMode>& app_display_mode_overrides,
-    UserDisplayMode user_display_mode,
+    mojom::UserDisplayMode user_display_mode,
     bool is_isolated) {
   const DisplayMode resolved_display_mode =
       ResolveNonIsolatedEffectiveDisplayMode(
diff --git a/chrome/browser/web_applications/web_app_utils.h b/chrome/browser/web_applications/web_app_utils.h
index 5cfd4314..fdd2a838 100644
--- a/chrome/browser/web_applications/web_app_utils.h
+++ b/chrome/browser/web_applications/web_app_utils.h
@@ -16,7 +16,7 @@
 #include "build/build_config.h"
 #include "build/buildflag.h"
 #include "build/chromeos_buildflags.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_sources.h"
 #include "components/services/app_service/public/cpp/app_launch_util.h"
@@ -175,7 +175,7 @@
 DisplayMode ResolveEffectiveDisplayMode(
     DisplayMode app_display_mode,
     const std::vector<DisplayMode>& app_display_mode_overrides,
-    UserDisplayMode user_display_mode,
+    mojom::UserDisplayMode user_display_mode,
     bool is_isolated);
 
 apps::LaunchContainer ConvertDisplayModeToAppLaunchContainer(
diff --git a/chrome/browser/web_applications/web_app_utils_unittest.cc b/chrome/browser/web_applications/web_app_utils_unittest.cc
index e1200ae..7452ebe 100644
--- a/chrome/browser/web_applications/web_app_utils_unittest.cc
+++ b/chrome/browser/web_applications/web_app_utils_unittest.cc
@@ -11,9 +11,9 @@
 #include "base/test/scoped_feature_list.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
-#include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/common/chrome_features.h"
@@ -56,19 +56,19 @@
   EXPECT_EQ(DisplayMode::kBrowser,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kBrowser, std::vector<DisplayMode>(),
-                UserDisplayMode::kBrowser, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kBrowser, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kBrowser,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kMinimalUi, std::vector<DisplayMode>(),
-                UserDisplayMode::kBrowser, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kBrowser, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kBrowser,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kStandalone, std::vector<DisplayMode>(),
-                UserDisplayMode::kBrowser, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kBrowser, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kBrowser,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kFullscreen, std::vector<DisplayMode>(),
-                UserDisplayMode::kBrowser, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kBrowser, /*is_isolated=*/false));
 
   // When user_display_mode indicates a user preference for opening in
   // a standalone window, we open in a minimal-ui window (for app_display_mode
@@ -77,19 +77,19 @@
   EXPECT_EQ(DisplayMode::kMinimalUi,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kBrowser, std::vector<DisplayMode>(),
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kMinimalUi,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kMinimalUi, std::vector<DisplayMode>(),
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kStandalone, std::vector<DisplayMode>(),
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kFullscreen, std::vector<DisplayMode>(),
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
 }
 
 TEST(WebAppTest,
@@ -103,19 +103,19 @@
   EXPECT_EQ(DisplayMode::kBrowser,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kBrowser, app_display_mode_overrides,
-                UserDisplayMode::kBrowser, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kBrowser, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kBrowser,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kMinimalUi, app_display_mode_overrides,
-                UserDisplayMode::kBrowser, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kBrowser, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kBrowser,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kStandalone, app_display_mode_overrides,
-                UserDisplayMode::kBrowser, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kBrowser, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kBrowser,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kFullscreen, app_display_mode_overrides,
-                UserDisplayMode::kBrowser, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kBrowser, /*is_isolated=*/false));
 }
 
 TEST(WebAppTest,
@@ -131,19 +131,19 @@
   EXPECT_EQ(DisplayMode::kMinimalUi,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kBrowser, app_display_mode_overrides,
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kMinimalUi,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kMinimalUi, app_display_mode_overrides,
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kStandalone, app_display_mode_overrides,
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kFullscreen, app_display_mode_overrides,
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
 }
 
 TEST(WebAppTest, ResolveEffectiveDisplayModeWithDisplayOverrides) {
@@ -158,19 +158,19 @@
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kBrowser, app_display_mode_overrides,
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kMinimalUi, app_display_mode_overrides,
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kStandalone, app_display_mode_overrides,
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 DisplayMode::kFullscreen, app_display_mode_overrides,
-                UserDisplayMode::kStandalone, /*is_isolated=*/false));
+                mojom::UserDisplayMode::kStandalone, /*is_isolated=*/false));
 }
 
 TEST(WebAppTest, ResolveEffectiveDisplayModeWithIsolatedWebApp) {
@@ -178,14 +178,14 @@
             ResolveEffectiveDisplayMode(
                 /*app_display_mode=*/DisplayMode::kBrowser,
                 /*app_display_mode_overrides=*/{DisplayMode::kBrowser},
-                /*user_display_mode=*/UserDisplayMode::kBrowser,
+                /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
                 /*is_isolated=*/true));
 
   EXPECT_EQ(DisplayMode::kStandalone,
             ResolveEffectiveDisplayMode(
                 /*app_display_mode=*/DisplayMode::kMinimalUi,
                 /*app_display_mode_overrides=*/{},
-                /*user_display_mode=*/UserDisplayMode::kBrowser,
+                /*user_display_mode=*/mojom::UserDisplayMode::kBrowser,
                 /*is_isolated=*/true));
 }
 
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 23f3ce8..15a608d 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1672487919-f65ef54df96469281ac24150007e5d97e834af43.profdata
+chrome-linux-main-1672617527-dcc14a61a93045528cfdd56d0ff31909f59fc4ae.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 7769ac76..f94af4f 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1672487919-4d28ece0d17c7bf72c52a8cd5d196873e54889a5.profdata
+chrome-mac-arm-main-1672617527-c5b4fcf062a789ebf934f9faf305061d4e1b6d58.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index c154024..326bf80 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1672487919-38da9d7a3b7f7b1783cf9b62078524f01dabe92f.profdata
+chrome-mac-main-1672617527-e908e4324ac775b2dba4727be85f3d1a6731c22f.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index dcbd3a9b..a2b78be4 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1672475384-64fd742d3090c940c993f2262a73a772fc52e84b.profdata
+chrome-win32-main-1672617527-754b335646992bbeb1a51cf1ace2fd3736788021.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index a20f982d..960f87c 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1672487919-6e602bafa7e2ee9345fc7f93516d3095324476fd.profdata
+chrome-win64-main-1672617527-a689c7288478dd3c7e02382e6f6c1bd297bf511a.profdata
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 265f2b18..2f27b2c 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -485,18 +485,16 @@
     sources += [
       "../browser/certificate_provider/test_certificate_provider_extension.cc",
       "../browser/certificate_provider/test_certificate_provider_extension.h",
+      "../browser/extensions/policy_test_utils.cc",
+      "../browser/extensions/policy_test_utils.h",
       "../browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.cc",
       "../browser/ui/views/frame/browser_non_client_frame_view_chromeos_test_utils.h",
       "../browser/ui/views/frame/immersive_mode_tester.cc",
       "../browser/ui/views/frame/immersive_mode_tester.h",
     ]
-    deps += [ "//chromeos/dbus/constants" ]
-  }
-
-  if (is_chromeos) {
-    sources += [
-      "../browser/extensions/policy_test_utils.cc",
-      "../browser/extensions/policy_test_utils.h",
+    deps += [
+      "//chrome/browser/chromeos",
+      "//chromeos/dbus/constants",
     ]
   }
 
@@ -604,7 +602,6 @@
       "//chrome/browser/ash:print_job_info_proto",
       "//chrome/browser/ash/crosapi",
       "//chrome/browser/ash/system_web_apps/test_support",
-      "//chrome/browser/chromeos",
       "//chrome/browser/nearby_sharing/public/cpp",
       "//chrome/browser/ui/ash/system_web_apps",
       "//chromeos/ash/components/attestation:test_support",
@@ -622,7 +619,7 @@
 
   if (is_chromeos_lacros) {
     public_deps += [
-      "//chrome/browser:dlp_policy_event_proto",
+      "//chrome/browser/chromeos:dlp_policy_event_proto",
       "//components/reporting/client:report_queue",
       "//components/reporting/client:test_support",
       "//components/reporting/storage:test_support",
@@ -2529,6 +2526,7 @@
 
     if (is_chromeos) {
       deps += [
+        "//chrome/browser/chromeos",
         "//chrome/browser/web_applications/app_service",
         "//chromeos/constants",
         "//chromeos/ui/frame",
@@ -4301,7 +4299,6 @@
         "//chrome/browser/ash/system_extensions:browser_tests",
         "//chrome/browser/ash/system_web_apps/types:types",
         "//chrome/browser/ash/wilco_dtc_supportd:mojo_utils",
-        "//chrome/browser/chromeos",
         "//chrome/browser/chromeos:dlp_policy_event_proto",
         "//chrome/browser/chromeos:test_support",
         "//chrome/browser/enterprise/connectors/device_trust:features",
@@ -4387,6 +4384,7 @@
         "//chromeos/services/machine_learning/public/cpp:stub",
         "//chromeos/services/network_config:network_config",
         "//chromeos/services/tts",
+        "//chromeos/strings",
         "//chromeos/ui/base",
         "//chromeos/ui/frame",
         "//chromeos/ui/frame:test_support",
@@ -4837,6 +4835,7 @@
       ":sync_integration_test_support",
       ":test_support",
       "//chrome/app:command_ids",
+      "//chrome/browser/chromeos",
       "//chrome/browser/chromeos/extensions/telemetry/api:browser_tests",
       "//chromeos/crosapi/mojom",
       "//chromeos/lacros",
@@ -4940,6 +4939,7 @@
       ":test_support_ui",
       ":webrtc_browser_tests_base",
       "//chrome/app:command_ids",
+      "//chrome/browser/chromeos",
       "//chrome/browser/chromeos/extensions/vpn_provider",
       "//chrome/browser/chromeos/extensions/wm",
       "//chrome/browser/metrics/structured",
@@ -7319,6 +7319,7 @@
     ]
 
     deps += [
+      "//chrome/browser/chromeos",
       "//chrome/browser/chromeos/launcher_search:search_util",
       "//chromeos/components/disks:prefs",
       "//chromeos/dbus/power",
@@ -7706,6 +7707,7 @@
       "//chromeos/services/assistant/public/shared",
       "//chromeos/services/network_config:in_process_instance",
       "//chromeos/services/network_config:network_config",
+      "//chromeos/strings",
       "//chromeos/ui/base",
       "//chromeos/ui/wm",
       "//components/app_constants",
@@ -7721,6 +7723,7 @@
       "//components/soda:soda",
       "//components/webapk:proto",
       "//ui/base/ime/ash",
+      "//ui/chromeos/strings",
       "//ui/file_manager:resources_grit",
       "//ui/webui/resources/cr_components/app_management:unit_tests",
       "//ui/wm/public",
@@ -7794,7 +7797,7 @@
     ]
 
     deps += [
-      "//chrome/browser:dlp_policy_event_proto",
+      "//chrome/browser/chromeos:dlp_policy_event_proto",
       "//chrome/browser/chromeos/launcher_search:unit_tests",
       "//chrome/browser/policy:onc",
       "//chrome/browser/policy:unit_tests",
@@ -10005,6 +10008,7 @@
 
     if (is_chromeos) {
       deps += [
+        "//chrome/browser/chromeos",
         "//chromeos/constants",
         "//chromeos/ui/base",
         "//chromeos/ui/frame",
diff --git a/chrome/test/enterprise/e2e/.vpython3 b/chrome/test/enterprise/e2e/.vpython3
index 4a49064..576d79d 100644
--- a/chrome/test/enterprise/e2e/.vpython3
+++ b/chrome/test/enterprise/e2e/.vpython3
@@ -188,3 +188,9 @@
   name: "infra/python/wheels/wheel-py2_py3"
   version: "version:0.33.1"
 >
+
+# attrs for simple dataclass
+wheel: <
+  name: "infra/python/wheels/attrs-py2_py3"
+  version: "version:21.4.0"
+>
diff --git a/chrome/test/enterprise/e2e/connector/__init__.py b/chrome/test/enterprise/e2e/connector/__init__.py
index fcdcb4ba..370be92 100644
--- a/chrome/test/enterprise/e2e/connector/__init__.py
+++ b/chrome/test/enterprise/e2e/connector/__init__.py
@@ -5,5 +5,6 @@
 from .realtime_reporting_bce.realtime_reporting_bce_test import *
 from .reporting_connector_chronicle.reporting_connector_chronicle_test import *
 from .reporting_connector_crowdstrike.reporting_connector_crowdstrike_test import *
+from .reporting_connector_pan.reporting_connector_pan_test import *
 from .reporting_connector_pubsub.reporting_connector_pubsub_test import *
 from .reporting_connector_splunk.reporting_connector_splunk_test import *
diff --git a/chrome/test/enterprise/e2e/connector/reporting_connector_pan/__init__.py b/chrome/test/enterprise/e2e/connector/reporting_connector_pan/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/chrome/test/enterprise/e2e/connector/reporting_connector_pan/__init__.py
diff --git a/chrome/test/enterprise/e2e/connector/reporting_connector_pan/pan_api_service.py b/chrome/test/enterprise/e2e/connector/reporting_connector_pan/pan_api_service.py
new file mode 100644
index 0000000..59a8675
--- /dev/null
+++ b/chrome/test/enterprise/e2e/connector/reporting_connector_pan/pan_api_service.py
@@ -0,0 +1,174 @@
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from datetime import datetime
+from datetime import timezone
+import hashlib
+import json
+import logging
+import secrets
+import string
+from typing import Any, Dict, Sequence, Tuple
+
+import requests
+
+from .pan_event import PanEvent
+
+# Constants
+SUCCESS = 0
+PENDING = 1
+IGNORE = 2  # this value is ignored
+
+
+class PanApiService(object):
+  """This class handles retrieving events from a Palo Auto Network server.
+
+
+  API guide: https://docs-cortex.paloaltonetworks.com/r/Cortex-XDR
+      /Cortex-XDR-API-Reference/Get-XQL-Query-Results-Stream
+  """
+
+  def __init__(self,
+               credentials: str,
+               event_limit: int = 10,
+               relative_time_in_minutes: int = 60):
+    """Construct a PanApiService instance.
+
+    Args:
+      credentials: the credential used to connect to Pan Api Server.
+      event_limit: the number of xdr event to retrieve. Default is 10.
+      relative_time_in_minutes: the backwards time range in minutes to query.
+        Default is 60 minutes.
+    """
+    self._query_id = None
+    self._events = []
+    self._event_limit = event_limit
+    self._relative_time = relative_time_in_minutes * 3600 * 1000
+    try:
+      self._credentials = json.loads(credentials)
+    except json.JSONDecodeError:
+      logging.debug("Decoding PanApiService credentials JSON has failed")
+
+  def _reset_ids(self):
+    """Resets all the internal ids."""
+    self._query_id = None
+
+  def _generate_headers(self) -> Dict[str, str]:
+    """Generates a http headers for POST requests."""
+    api_key = self._credentials["api_key"]
+    api_key_id = self._credentials["api_key_id"]
+    # Generate a 64 bytes random string
+    nonce = "".join([
+        secrets.choice(string.ascii_letters + string.digits) for _ in range(64)
+    ])
+    # Get the current timestamp as milliseconds.
+    timestamp = int(datetime.now(timezone.utc).timestamp()) * 1000
+    # Generate the auth key:
+    auth_key = "%s%s%s" % (api_key, nonce, timestamp)
+    # Convert to bytes object
+    auth_key = auth_key.encode("utf-8")
+    # Calculate sha256:
+    api_key_hash = hashlib.sha256(auth_key).hexdigest()
+    # Generate HTTP call headers
+    return {
+        "x-xdr-timestamp": str(timestamp),
+        "x-xdr-nonce": nonce,
+        "x-xdr-auth-id": str(api_key_id),
+        "Authorization": api_key_hash,
+        "Content-Type": "application/json",
+    }
+
+  def query_for_event(self, ev: PanEvent) -> bool:
+    """Checks for the existence of a PanEvent."""
+    for event in self._events:
+      # note that event['event'] is string. so another json.loads() is need to
+      # convert it to a dict
+      inner_event = json.loads(event["event"])
+      pe = PanEvent(
+          type=inner_event["event"],
+          device_id=inner_event["device_id"],
+          reason=inner_event["reason"] if "reason" in inner_event else "",
+          url=inner_event["url"],
+      )
+      if ev == pe:
+        return True
+    return False
+
+  def get_events(self) -> Sequence[Any]:
+    """Retrieves all the stored events."""
+    return self._events
+
+  def stop_xdr_query(self):
+    """Stops a XDR query."""
+    self._reset_ids()
+    logging.info("Connection closed.")
+
+  def start_xdr_query(self) -> int:
+    """Starts a XDR query."""
+    self._reset_ids()
+    xdr_dataset = self._credentials["xdr_dataset"]
+    url = (
+        self._credentials["api_server"] +
+        r"/public_api/v1/xql/start_xql_query/")
+    headers = self._generate_headers()
+    parameters = {}
+    request_data = {}
+    request_data["query"] = (r"dataset=%s | fields event, time | limit %d" %
+                             (xdr_dataset, self._event_limit))
+    request_data["tenants"] = ""
+    # Only query for the last self.relative_time hours
+    request_data["timeframe"] = {"relativeTime": self._relative_time}
+    parameters["request_data"] = request_data
+
+    res = requests.post(
+        url=url,
+        headers=headers,
+        json=parameters,
+    )
+    j = res.json()
+    if res.status_code == 200:
+      logging.info("Connection started...")
+      self._query_id = j["reply"]
+    return res.status_code
+
+  def get_xdr_query_results(self) -> Tuple[int, int]:
+    """Gets a XDR query results."""
+    if not self._query_id:
+      raise RuntimeError("query_id is None. Must call start_xdr_query() first.")
+
+    url = (
+        self._credentials["api_server"] +
+        r"/public_api/v1/xql/get_query_results/")
+    headers = self._generate_headers()
+    parameters = {}
+    request_data = {}
+    request_data["query_id"] = self._query_id
+    request_data["pending_flag"] = False
+    request_data["limit"] = self._event_limit
+    request_data["format"] = "json"
+    parameters["request_data"] = request_data
+
+    res = requests.post(
+        url=url,
+        headers=headers,
+        json=parameters,
+    )
+    j = res.json()
+    code = IGNORE
+    if res.status_code == 200:
+      if j["reply"]["status"] == "PENDING":
+        # PENDING status indicating query hasn't yet completed or results
+        # are not yet ready to be returned. Need to execute the API call again.
+        code = PENDING
+      elif j["reply"]["status"] == "SUCCESS":
+        if "data" in j["reply"]["results"]:
+          self._events = []
+          for event in j["reply"]["results"]["data"]:
+            self._events.append(event)
+        else:  # has > 1000 events, gives up
+          raise RuntimeError(
+              "No data in reply/results. Stream is not supported.")
+        code = SUCCESS
+
+    return res.status_code, code
diff --git a/chrome/test/enterprise/e2e/connector/reporting_connector_pan/pan_event.py b/chrome/test/enterprise/e2e/connector/reporting_connector_pan/pan_event.py
new file mode 100644
index 0000000..c6b7fa5
--- /dev/null
+++ b/chrome/test/enterprise/e2e/connector/reporting_connector_pan/pan_event.py
@@ -0,0 +1,35 @@
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from typing import Any
+
+import attrs
+
+
+@attrs.frozen(kw_only=True)
+class PanEvent(object):
+  """Maps to a event reported to the pan console.
+
+  This class stores a event that is to match a xdr queried event from pan.
+
+  Attributes:
+    type: The "event"/"event" field in the dataset table. Defaults to None.
+    device_id: The "event"/"device_id" field in the dataset table. Defaults to
+      None.
+    reason: The "event"/"reason" field in the dataset table. Defaults to None.
+    url: The "event"/"url" field in the dataset table. Defaults to None.
+  """
+
+  type: str = None
+  device_id: str = None
+  reason: str = None
+  url: str = None
+
+  def __eq__(self, other: Any) -> bool:
+    if self is other:
+      return True
+    if not isinstance(other, self.__class__):
+      return False
+    return (other.type == self.type and other.device_id == self.device_id and
+            other.reason == self.reason and other.url == self.url)
diff --git a/chrome/test/enterprise/e2e/connector/reporting_connector_pan/reporting_connector_pan_test.py b/chrome/test/enterprise/e2e/connector/reporting_connector_pan/reporting_connector_pan_test.py
new file mode 100644
index 0000000..4cf9568
--- /dev/null
+++ b/chrome/test/enterprise/e2e/connector/reporting_connector_pan/reporting_connector_pan_test.py
@@ -0,0 +1,92 @@
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from datetime import datetime
+import logging
+import os
+import re
+import time
+
+from chrome_ent_test.infra.core import before_all
+from chrome_ent_test.infra.core import category
+from chrome_ent_test.infra.core import environment
+from chrome_ent_test.infra.core import test
+
+from infra import ChromeEnterpriseTestCase
+
+from .pan_api_service import PanApiService
+from .pan_event import PanEvent
+
+
+@category("chrome_only")
+@environment(file="../connector_test.asset.textpb")
+class ReportingConnectorPanTest(ChromeEnterpriseTestCase):
+  """Test the Realtime Reporting pipeline events"""
+
+  def getCredentials(self) -> str:
+    path = "gs://%s/secrets/panCredentials.json" % self.gsbucket
+    cmd = r'gsutil cat ' + path
+    return self.RunCommand(self.win_config['dc'], cmd).rstrip().decode()
+
+  @before_all
+  def setup(self):
+    self.EnableUITest(self.win_config['client'])
+    self.InstallChrome(self.win_config['client'])
+
+  @test
+  def test_browser_enrolled_prod(self):
+    eventFound = False
+    path = "gs://%s/secrets/CELabOrg-enrollToken" % self.gsbucket
+    cmd = r'gsutil cat ' + path
+    token = self.RunCommand(self.win_config['dc'], cmd).rstrip().decode()
+    self.SetPolicy(self.win_config['dc'], r'CloudManagementEnrollmentToken',
+                   token, 'String')
+
+    self.SetPolicy(self.win_config['dc'], r'SafeBrowsingEnabled', 1, 'DWORD')
+    self.RunCommand(self.win_config['client'], 'gpupdate /force')
+    testStartTime = datetime.utcnow()
+    # trigger malware event & get device id from browser
+    localDir = os.path.dirname(os.path.abspath(__file__))
+    commonDir = os.path.dirname(localDir)
+    clientId = self.RunUITest(
+        self.win_config['client'],
+        os.path.join(commonDir, 'common', 'realtime_reporting_ui_test.py'),
+        timeout=600)
+    clientId = re.search(r'DeviceId:.*$',
+                         clientId.strip()).group(0).replace('DeviceId:',
+                                                            '').rstrip("\\rn'")
+
+    event_to_query = PanEvent(
+        type="badNavigationEvent",
+        device_id=clientId,
+        reason="MALWARE",
+        url="http://testsafebrowsing.appspot.com/s/malware.html",
+    )
+    logging.info("Event to look for: %s" % event_to_query)
+    # wait until events are logged in the connector
+    max_wait_time_secs = 360
+    delta_secs = 10
+    total_wait_time_secs = 0
+    credentials = self.getCredentials()
+    panService = PanApiService(credentials)
+    match_found = False
+    # initial wait 5 mins for events from google central server to pan
+    time.sleep(300)
+
+    while total_wait_time_secs < max_wait_time_secs:
+      panService.start_xdr_query()
+      panService.get_xdr_query_results()
+      events = panService.get_events()
+      event_string = "\n".join(str(v) for v in events)
+      logging.info(f"Events logged:\n{event_string}")
+      if panService.query_for_event(event_to_query):
+        logging.info("Matched event found\n")
+        match_found = True
+        break
+      panService.stop_xdr_query()
+      time.sleep(delta_secs)
+      total_wait_time_secs += delta_secs
+
+    if not match_found:
+      raise Exception('Timed out ' 'badNavigationEvent event not found')
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index 05c6c7fb..02d728c 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-15297.0.0
\ No newline at end of file
+15299.0.0
\ No newline at end of file
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 6ea26fe..d6f1498f 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "17.30",
-  "log_list_timestamp": "2022-12-31T12:55:19Z",
+  "version": "17.31",
+  "log_list_timestamp": "2023-01-01T12:54:50Z",
   "operators": [
     {
       "name": "Google",
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index dddc34b..24ef7ba 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2022-12-31 12:55 UTC
+# Last updated: 2023-01-01 12:54 UTC
 PinsListTimestamp
-1672491319
+1672577690
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index 3d94fa6f..9caf90b 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -13,7 +13,8 @@
 # Tests that fail in legacy but pass in NG
 
 # ====== New tests from wpt-importer added here ======
-crbug.com/626703 virtual/idna-2008/external/wpt/url/a-element-xhtml.xhtml?exclude=(file|javascript|mailto) [ Failure Crash ]
+crbug.com/626703 external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html [ Timeout ]
+crbug.com/626703 virtual/idna-2008/external/wpt/url/a-element-xhtml.xhtml?exclude=(file|javascript|mailto) [ Crash Failure ]
 crbug.com/626703 external/wpt/css/css-text/bidi/bidi-tab-001.html [ Failure ]
 crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/resource-timing/response-status-code.html [ Timeout ]
 crbug.com/626703 virtual/force-renderer-accessibility/external/wpt/accessibility/crashtests/bdo-table-cell.html [ Crash ]
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
index b5726dce..3b213d7 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
+++ b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
@@ -81,6 +81,7 @@
 crbug.com/1209223 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-security-check-same-origin-domain.sub.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html [ Timeout ]
 crbug.com/626703 external/wpt/url/url-setters-a-area.window.html?exclude=(file|javascript|mailto) [ Crash Failure ]
 crbug.com/626703 virtual/idna-2008/external/wpt/url/url-constructor.any.worker.html?include=file [ Crash Failure ]
 crbug.com/626703 virtual/idna-2008/external/wpt/url/url-setters.any.worker.html?include=file [ Crash Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index cf305b43..20f926b 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -208,7 +208,6 @@
 crbug.com/1124352 media/picture-in-picture/clear-after-request.html [ Crash Pass ]
 crbug.com/1124352 media/picture-in-picture/controls/picture-in-picture-button.html [ Crash Pass ]
 crbug.com/1124352 external/wpt/picture-in-picture/exit-picture-in-picture.html [ Crash Pass ]
-crbug.com/1124352 external/wpt/picture-in-picture/shadow-dom.html [ Crash Pass ]
 
 # These fail due to subtle anti-aliasing differences cause by the fact that
 # <canvas> renders via IOSurface and OffscreenCanvas does not.
@@ -485,7 +484,6 @@
 crbug.com/936891 virtual/threaded-prefer-compositing/fast/scrolling/document-level-touchmove-event-listener-passive-by-default.html [ Pass ]
 crbug.com/841567 virtual/threaded-prefer-compositing/fast/scrolling/overflow-scrollability.html [ Failure Pass Timeout ]
 crbug.com/1095540 [ Mac ] virtual/threaded-prefer-compositing/fast/scrolling/resize-corner-tracking-touch.html [ Crash Failure Pass Timeout ]
-crbug.com/1279758 [ Win10.20h2 ] virtual/threaded-prefer-compositing/fast/scrolling/scroll-animation-on-by-default.html [ Failure Pass ]
 crbug.com/1279758 [ Mac ] virtual/threaded-prefer-compositing/fast/scrolling/scroll-animation-on-by-default.html [ Failure Pass ]
 crbug.com/1058244 [ Mac ] virtual/threaded-prefer-compositing/fast/scrolling/scrollbars/scrollbar-rtl-manipulation.html [ Failure Pass Timeout ]
 crbug.com/1058244 [ Win ] virtual/threaded-prefer-compositing/fast/scrolling/scrollbars/scrollbar-rtl-manipulation.html [ Failure Pass ]
@@ -2982,6 +2980,7 @@
 crbug.com/626703 [ Win ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/disabled-cache-navigation.js [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/resource-timing/response-status-code.html [ Skip Timeout ]
 crbug.com/626703 [ Win ] external/wpt/resource-timing/response-status-code.html [ Skip Timeout ]
 crbug.com/626703 [ Mac12 ] external/wpt/url/a-element.html?exclude=(file|javascript|mailto) [ Crash Failure ]
@@ -3063,7 +3062,6 @@
 crbug.com/626703 [ Linux ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaDevices-enumerateDevices-per-origin-ids.sub.https.html [ Timeout ]
 crbug.com/626703 [ Linux ] wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress.html [ Timeout ]
 crbug.com/626703 [ Linux ] wpt_internal/storage/quota/partitioned-webkitStorageInfo-persistent-quota-usage-details.tentative.sub.html [ Timeout ]
-crbug.com/626703 [ Linux ] wpt_internal/vibration/vibration.html [ Timeout ]
 crbug.com/626703 [ Linux ] wpt_internal/webmidi/loopback-receive.https.html [ Timeout ]
 crbug.com/626703 [ Linux ] wpt_internal/webmidi/send-system-messages.https.html [ Timeout ]
 crbug.com/626703 [ Linux ] wpt_internal/webxr/ar/ar_anchor_getAnchors_null.https.html [ Timeout ]
@@ -5930,6 +5928,10 @@
 # Flaky on multiple platforms
 crbug.com/1338536 http/tests/devtools/oopif/oopif-elements-nesting.js [ Failure Pass ]
 
+# Temporarily disabled to unblock https://crrev.com/c/4128466
+crbug.com/1403432 http/tests/devtools/bindings/jssourcemap-bindings-overlapping-sources.js [ Failure Pass ]
+crbug.com/1403432 http/tests/devtools/bindings/jssourcemap-navigator-overlapping-sources.js [ Failure Pass ]
+
 # Tests that compare a float color to an integer color can suffer off-by-one errors
 # There is no mechanism for fuzzing reference tests outside of WPT and tests that require internals cannot be in WPT
 # When the scrollbarOverlay is moved to float color these can be re-enabled
@@ -6053,7 +6055,6 @@
 crbug.com/1340167 fast/loader/iframe-navigation-stealing-focus.html [ Pass Timeout ]
 
 # Sheriff 2022-08-18
-crbug.com/1354013 virtual/threaded-no-composited-antialiasing/animations/sample-on-last-keyframe.html [ Crash Failure Pass Timeout ]
 
 # Sheriff 2022-08-19
 crbug.com/1354433 [ Mac ] external/wpt/html/browsers/the-window-object/window-properties.https.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index ba6a24c..0625cef0 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -1206,6 +1206,13 @@
          {}
         ]
        ],
+       "iframe-init-crash.html": [
+        "e915c2479f0c089bb42c862ed2f15f0024a5a94d",
+        [
+         null,
+         {}
+        ]
+       ],
        "inline-multicol-inside-container-crash.html": [
         "7e209f7ffd389744f843fe97b8483404f8ace7e5",
         [
@@ -260936,11 +260943,11 @@
   "support": {
    ".cache": {
     "gitignore2.json": [
-     "451ee19c84a0ebf9af974eb3566e49380a1833ee",
+     "7a998129147264ee83dee6a4e3852d6b23053563",
      []
     ],
     "mtime.json": [
-     "7463e73554cdc3e29156573eed1fde080b92c257",
+     "3c3da0f60cf44a0f4c3c63c927371ac45f77a02f",
      []
     ]
    },
@@ -261222,7 +261229,7 @@
      []
     ],
     "idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini": [
-     "eb829a9f70a4c46ace419485ebc81a0466a24cc8",
+     "c654be5297c4d0462f6b6a5a6c9d0047c1f4d8ac",
      []
     ],
     "resources": {
@@ -262176,7 +262183,7 @@
      []
     ],
     "playback-rate.https.html.ini": [
-     "68cf1f663cdae3c54ba2920863e837c79bd0d6bd",
+     "6cc1e2702190aca88224f2b51bd060b15399ae45",
      []
     ],
     "references": {
@@ -266699,7 +266706,7 @@
       []
      ],
      "prefetch-header-allowed.html.ini": [
-      "7aa114e6703cad73d1932858ba8273734fb7b6f5",
+      "6537e953c3318e1adf86b38290bc940ee074057c",
       []
      ],
      "prefetch-header-blocked-by-default.html.headers": [
@@ -267636,7 +267643,7 @@
      []
     ],
     "cookieListItem_attributes.https.any.js.ini": [
-     "3decf2fbcab632c81d499464c70e2ce24d5d3f4d",
+     "035485e0a713bb745dac8ae3ce4d7e30211bf6f9",
      []
     ],
     "cookieStore_get_set_across_origins.sub.https.html.ini": [
@@ -268094,7 +268101,7 @@
      []
     ],
     "fedcm-cross-origin-policy.https.html.ini": [
-     "4a4603d0e066bc23ef99aba85535aed51ef685e5",
+     "1fedefe5002e1361e9add536cec2c0cc974c27b1",
      []
     ],
     "fedcm-cross-origin-policy.https.html.sub.headers": [
@@ -268120,7 +268127,7 @@
      ]
     },
     "fedcm-network-requests.https.html.ini": [
-     "d272c84b67bc4561fd50bf58934390465d720f31",
+     "d03446a56b8a517a7ef12479977b63ee94706d74",
      []
     ],
     "federatedcredential-framed-get.sub.https-expected.txt": [
@@ -270265,6 +270272,10 @@
        "7cb24dda8540154ed595723d9de44898441960b2",
        []
       ],
+      "border-width-012.xht.ini": [
+       "c7b3705775bd4eb6a69a3cc2897924629e87c7d0",
+       []
+      ],
       "border-width-014-ref.xht": [
        "022f75498fda0c7286013b69f379d6b5de48c7ec",
        []
@@ -271006,7 +271017,7 @@
        []
       ],
       "float-nowrap-4.html.ini": [
-       "118137923cf41d279118a91dc1e6d3caca8e1ef7",
+       "5b5e8dbb4ca2103520f29ee0352a8a413b00b51c",
        []
       ],
       "float-nowrap-5-ref.html": [
@@ -298988,7 +298999,7 @@
        []
       ],
       "subgrid-baseline-002.html.ini": [
-       "c8f5d5e48be8ad5beb292de4b0b9e096c087a92d",
+       "4300e380326adc7f4c7a700306fde72b33e7eb1b",
        []
       ],
       "subgrid-baseline-003-ref.html": [
@@ -300954,7 +300965,7 @@
        []
       ],
       "Initial-letter-breaking-vlr.html.ini": [
-       "eb1934959aac2f6cb97b9e30c1779095f18306f6",
+       "0a5f574510cb5f345a90739935b5e98b45045d91",
        []
       ],
       "Initial-letter-breaking-vrl-ref.html": [
@@ -300994,7 +301005,7 @@
        []
       ],
       "initial-letter-block-position-drop-under-ruby-tall.html.ini": [
-       "38527a1d13f5fb3341c71066d7067a196d846034",
+       "8a8fc7e35d6c2844ddcb99c6fb2a940718703711",
        []
       ],
       "initial-letter-block-position-drop-under-ruby.html.ini": [
@@ -301026,7 +301037,7 @@
        []
       ],
       "initial-letter-block-position-margins-vrl.html.ini": [
-       "a6abb661c293cb843d3f6bda68cd043382919112",
+       "28bdb47febba2024c2968fd4d8fa62dbb108ac07",
        []
       ],
       "initial-letter-block-position-margins.html.ini": [
@@ -301042,7 +301053,7 @@
        []
       ],
       "initial-letter-block-position-raise-over-ruby-tall.html.ini": [
-       "4b8cec5ca34e64330806ec03efb83328c4d011e8",
+       "50a3c7cc6b0b2246a3ca302ebfc002b293f5513b",
        []
       ],
       "initial-letter-block-position-raise-over-ruby.html.ini": [
@@ -301062,7 +301073,7 @@
        []
       ],
       "initial-letter-block-position-raise-under-ruby.html.ini": [
-       "eede05d174440899bdc8f37125124321ef974f11",
+       "1136475e22104014fed3be82b9c07d8e27771af5",
        []
       ],
       "initial-letter-computed.html.ini": [
@@ -301086,7 +301097,7 @@
        []
       ],
       "initial-letter-drop-initial-vlr.html.ini": [
-       "1e3e90322b20750c45315a4553d727d330e621e8",
+       "984123ce1ba95aaa082597019805d29f51c77e3b",
        []
       ],
       "initial-letter-drop-initial-vrl-ref.html": [
@@ -301098,7 +301109,7 @@
        []
       ],
       "initial-letter-drop-initial.html.ini": [
-       "497ccbc87b10a361c6b9e430069b7a98ab683bcf",
+       "bda49d3ccb569063ca848311b14c11d0f95c0743",
        []
       ],
       "initial-letter-float-001-ref.html": [
@@ -301126,11 +301137,11 @@
        []
       ],
       "initial-letter-float-001-vrl.html.ini": [
-       "a18c5464f5026e45a21f831363c83c8eca388b34",
+       "ff51dd5cdcff0bccc5d40823c59f455f9227ecb4",
        []
       ],
       "initial-letter-float-001.html.ini": [
-       "4b45bbf55e041276119bcbd59878946c3a181b5b",
+       "ae13c19797a134284cfe0ffd2c225b9e7bbc0b3e",
        []
       ],
       "initial-letter-float-002-ref.html": [
@@ -301174,7 +301185,7 @@
        []
       ],
       "initial-letter-indentation-rtl.html.ini": [
-       "495a53a6ef2d7a4f80602738e4b7058d62834041",
+       "9cd2cdc3b127278f137aa55c1f97d78f9a2b21e8",
        []
       ],
       "initial-letter-indentation.html.ini": [
@@ -301206,7 +301217,7 @@
        []
       ],
       "initial-letter-raise-initial-vlr.html.ini": [
-       "add1cabcda133899a9fdf29e618069d93e6572d8",
+       "5a7a7c3f9535f1ae8fd2885f325d43aa8507513e",
        []
       ],
       "initial-letter-raise-initial-vrl-ref.html": [
@@ -301234,7 +301245,7 @@
        []
       ],
       "initial-letter-raised-sunken-caps-sunken.html.ini": [
-       "0c64a2fddcfde3da4a10a9ed49a4be090dade4ea",
+       "b0631f923a6cf89fe35ed7628a5a15b4d75443bf",
        []
       ],
       "initial-letter-short-para-initial-letter-clears-ref.html": [
@@ -301294,7 +301305,7 @@
        []
       ],
       "initial-letter-with-first-line.html.ini": [
-       "56e94a8670efbccb3863be467419c218b0835400",
+       "7f69acbb5b8b735f2cc960f4832090c3f085738a",
        []
       ],
       "initial-letter-with-tab-ref.html": [
@@ -302681,10 +302692,6 @@
        "c87eb82357b0de46119bbf273892ce08cf2eac89",
        []
       ],
-      "clip-path-inline-002.html.ini": [
-       "84724ceb17adbb81abbf45520c33b82b13c67f36",
-       []
-      ],
       "clip-path-inline-003.html.ini": [
        "c82680ed500655231bcf7aa326d434b9cacd2d2c",
        []
@@ -306355,7 +306362,7 @@
       []
      ],
      "parse-input-arguments-018.https.html.ini": [
-      "266c24e80467e252e8df7123252f8e31bf078e69",
+      "62f06bdce5f2be8cb9f41506da803a3741713e2b",
       []
      ],
      "parse-input-arguments-019.https.html.ini": [
@@ -306370,6 +306377,10 @@
       "862212092a488948c202d88ba18334a738b583a8",
       []
      ],
+     "registered-property-interpolation-004.https.html.ini": [
+      "e52c96f5c76516c781029d97ee105d1bd8618e90",
+      []
+     ],
      "registered-property-invalidation-002.https.html.ini": [
       "09bcccfe5165fdb2e313aa4613b59ef12f24e5e8",
       []
@@ -316407,10 +316418,6 @@
         []
        ]
       },
-      "text-transform-capitalize-001.html.ini": [
-       "83483d77631ebaa0a77a19d292f9ff840793b675",
-       []
-      ],
       "text-transform-capitalize-003.html.ini": [
        "38e66a2dc4a6c69a3dd79df3f84abe55bd072294",
        []
@@ -327096,6 +327103,10 @@
       "09620990a4fed5019a104cf16718e914786f6424",
       []
      ],
+     "clearance-calculations-vrl-004.xht.ini": [
+      "1b6dddfd3821f21d9c88a07e2a971cbbb16820e1",
+      []
+     ],
      "clearance-calculations-vrl-006-ref.xht": [
       "8c3675beb3d3226fc2320bfddcf880c87a3b1bff",
       []
@@ -329598,6 +329609,10 @@
       "c56fb9d034e325071b1f65c9c520e13c154974c6",
       []
      ],
+     "text-combine-upright-shadow.html.ini": [
+      "cd761a1ebe8244957775035db47ee9043497911a",
+      []
+     ],
      "text-combine-upright-value-all-001.html.ini": [
       "fa41ee88b2d9403acd0cb54cd1d52bf1e52c87ef",
       []
@@ -330453,7 +330468,7 @@
       []
      ],
      "scroll-behavior-main-frame-root.html.ini": [
-      "536ff3e1d1ab2caa91a34cc88389a34fc4984883",
+      "d5fe958db40f7f781b73cd31f82757a981f171da",
       []
      ],
      "scroll-behavior-main-frame-window.html.ini": [
@@ -332933,7 +332948,7 @@
       []
      ],
      "ElementInternals-target-element-is-held-strongly.html.ini": [
-      "5f35e61552b7d4e19e8d9bceb6ee33f6dc9436a9",
+      "63d58fb3f93cf79a8656be307a6b3f3544365331",
       []
      ],
      "ElementInternals-validation-expected.txt": [
@@ -334586,6 +334601,10 @@
      []
     ],
     "traversal": {
+     "NodeFilter-constants.html.ini": [
+      "38e5a24f229bc9b585f9c2484eaba678051f1c6a",
+      []
+     ],
      "TreeWalker-acceptNode-filter.html.ini": [
       "2379c9f10c15ec48affc8a66ef298669bced76fe",
       []
@@ -334838,7 +334857,7 @@
      ]
     },
     "xml_xpath_runner.html.ini": [
-     "b9af709d743120691862162d43e765066c8ab218",
+     "d9cf144f7622c2b5a420f302ccc913566c09b89d",
      []
     ],
     "xml_xpath_tests.xml": [
@@ -335781,7 +335800,7 @@
       []
      ],
      "join-pre-and-other-block.html.ini": [
-      "e46f91600597ea2bcdc6c97235cedabc0d5c8206",
+      "0c485cc345d183a603b92109971fd4c0b68ef821",
       []
      ],
      "join-pre-and-other-block_method=backspace_block=blockquote-expected.txt": [
@@ -336446,7 +336465,7 @@
      []
     ],
     "image-carousel.html.ini": [
-     "3b89847db19cc319b93c16a11a963c206c26b5eb",
+     "a0d1c2a68ac09c65f7dc7192477a6571d9897687",
      []
     ],
     "image-src-change.html.ini": [
@@ -336718,7 +336737,7 @@
        []
       ],
       "iso2022jp-encode-form-csiso2022jp.html.ini": [
-       "3053fda7fe45ba5265534827fd6984de29b507af",
+       "51b4a7b64e2608884bbcb2ac5f7c2b8063b8595e",
        []
       ],
       "iso2022jp-encode-form-errors-han.html.headers": [
@@ -336800,7 +336819,7 @@
        []
       ],
       "sjis-decode-ms_kanji.html.ini": [
-       "521412ae4d0588e0b198c8730c3e5f9dd775e987",
+       "e8a7100a7585e0895ec76f7e83a8fb664f16d11e",
        []
       ],
       "sjis-decoder.js": [
@@ -336956,7 +336975,7 @@
        []
       ],
       "euckr-decode-ksc5601.html.ini": [
-       "3b9ccfdf5566c1ead3b759e9a770568e9a1f5fe2",
+       "03770ecd51b7ac11a026205d0f89f229d711e5ac",
        []
       ],
       "euckr-decoder.js": [
@@ -339256,7 +339275,7 @@
        []
       ],
       "keepalive.html.ini": [
-       "357820eb50ca8d5c3bf98edbfbcc5cc2ca60176e",
+       "d7c7aa213529cc70685e51c1ffdcc3ba5254f1ad",
        []
       ],
       "response-null-body.any-expected.txt": [
@@ -339316,7 +339335,7 @@
      },
      "cors": {
       "cors-cookies-redirect.any.js.ini": [
-       "8b48c817778f1021545324a6dc42e3e775401ccc",
+       "c876095870f60714f2125f25fe2c1ab014bb59d1",
        []
       ],
       "cors-cookies.any.js.ini": [
@@ -341273,7 +341292,7 @@
       []
      ],
      "iframe.tentative.https.window.js.ini": [
-      "a84192d976fb33c4cf681cabcb6fddee8eb117ef",
+      "feb271922656ded4d6f595bf5ea223ece84cec25",
       []
      ],
      "iframe.tentative.window-expected.txt": [
@@ -341383,11 +341402,7 @@
       ]
      },
      "service-worker-background-fetch.https.window.js.ini": [
-      "184b61d6d36e58485324b7a96780c2e31aadc2b1",
-      []
-     ],
-     "service-worker-fetch.https.window.js.ini": [
-      "eaa7acf656311a660b824eedda6b958feb5d0e34",
+      "fcf7be672437092cc71da87303b3209e4bccb8de",
       []
      ],
      "shared-worker.window.js.ini": [
@@ -341557,13 +341572,17 @@
       ]
      },
      "stale-css.html.ini": [
-      "d08487a8592050805645c50910ec150390025386",
+      "b381a102ede690b376f2404343780829c0d9c6c5",
       []
      ],
      "stale-image.html.ini": [
       "495a84e394fb5dbf278c6f18b6fb371a5b60ea58",
       []
      ],
+     "stale-script.html.ini": [
+      "095d0af7ff0b325428e4e4e72d3e4a3956bad5df",
+      []
+     ],
      "sw-intercept.js": [
       "dca7de51b0b8c5518276e70ae219b7bc8f869a95",
       []
@@ -341720,7 +341739,7 @@
      []
     ],
     "focus-already-focused-iframe-same-site.html.ini": [
-     "cd78228dd3869ed7ac233ad82d076832dd8df95e",
+     "c8cb0f97f7b02f70990a80ee9fe25f1d9b8db7a2",
      []
     ],
     "focus-event-after-focusing-iframes-expected.txt": [
@@ -341788,7 +341807,7 @@
      []
     ],
     "iframe-contentwindow-focus-with-different-site-intermediate-frame.html.ini": [
-     "b4691aee40352f05feec7c78a0fde57554471f37",
+     "0a09915f1e98f4c646189830392f864ae8ea4eb9",
      []
     ],
     "iframe-contentwindow-focus-with-same-as-top-intermediate-frame-expected.txt": [
@@ -341816,7 +341835,7 @@
      []
     ],
     "iframe-focuses-parent-different-site.html.ini": [
-     "78cd2ffec5c7616ee73b280db8fb14f6b0e9a0df",
+     "3b3149b7628f1741781e0c2c6b8084dfd9d94ab5",
      []
     ],
     "iframe-focuses-parent-same-site.html.ini": [
@@ -344155,7 +344174,7 @@
       []
      ],
      "embedding.tentative.https.window.js.ini": [
-      "7146e6d1b229148367888846ca2f71738c0298b8",
+      "b0a79cea3442c69f8f46909c4331869e0743bb7f",
       []
      ],
      "fenced-frame-bypass.tentative.https.window-expected.txt": [
@@ -344210,7 +344229,7 @@
          []
         ],
         "broadcast-channel.html.ini": [
-         "d92b7efbee18ef7994a6e1d346a1e3d94f279352",
+         "e423a5b6f007f26e10dfaafc559ea50fecce3834",
          []
         ],
         "dedicated-worker.html.ini": [
@@ -345041,7 +345060,7 @@
         []
        ],
        "same-document-traversal-cross-document-traversal.html.ini": [
-        "24560346d70e378a743aa0f1803f55a93efce279",
+        "dcb750585df15799d66d64f38c40bf5550388f3d",
         []
        ],
        "same-document-traversal-same-document-traversal-hashchange.html.ini": [
@@ -345719,7 +345738,7 @@
         []
        ],
        "location-protocol-setter-non-broken.html.ini": [
-        "1d3cada0bbf05b9a15c6d3cbba94b53695f96e62",
+        "264d685c8ed95c01f6e75a969ba08478dc0b6ad9",
         []
        ],
        "location-prototype-setting-cross-origin-domain.sub-expected.txt": [
@@ -346008,7 +346027,7 @@
          []
         ],
         "parent-yes-child-no-port.sub.https.html.ini": [
-         "f5c7844313e14001e89f1cf40759104ab6a9f43d",
+         "5383b4d6c44128b9efe8d2a58b3d4660d59f1198",
          []
         ],
         "parent-yes-child-no-same.sub.https.html.headers": [
@@ -346024,7 +346043,7 @@
          []
         ],
         "parent-yes-child-no-subdomain.sub.https.html.ini": [
-         "4df55d70d7e6176e97c1361ebd0e1542b2b3d290",
+         "93a8eb62979356b226897242f3066277314477ba",
          []
         ],
         "parent-yes-child-yes-port.sub.https.html.headers": [
@@ -346032,7 +346051,7 @@
          []
         ],
         "parent-yes-child-yes-port.sub.https.html.ini": [
-         "1fe764980cdb004b33f17ae5ae9329436157fe58",
+         "5f428d85c58be189cc011c3e8b44b6892f5b6083",
          []
         ],
         "parent-yes-child-yes-same.sub.https.html.headers": [
@@ -346040,7 +346059,7 @@
          []
         ],
         "parent-yes-child-yes-same.sub.https.html.ini": [
-         "e3a89c0f7ce9961f842110f8818e4e27fd505f8b",
+         "2b7fa4f27546ce75c088fb484df17a380bfb685f",
          []
         ],
         "parent-yes-child-yes-subdomain.sub.https.html.headers": [
@@ -346054,11 +346073,11 @@
        },
        "2-iframes": {
         "parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini": [
-         "9be6e053e2e35fc8317599a32e5bc7ec77d05524",
+         "08e1ae5832fe0799debbd6d5b225aa687ecd438b",
          []
         ],
         "parent-no-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini": [
-         "183bd1bfd832c72d0f26546495e042891f3a062c",
+         "0683058aa8593b6e30db1cdc6eb373b40d530f0d",
          []
         ],
         "parent-no-child1-no-subdomain1-child2-yes-subdomain2.sub.https.html.ini": [
@@ -346066,7 +346085,7 @@
          []
         ],
         "parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini": [
-         "8ecab7498e604ba113edbda5569cfe31ab3fe652",
+         "677d865317d5c5fc2983c5cf9594e906ee60c6b9",
          []
         ],
         "parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini": [
@@ -346078,7 +346097,7 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini": [
-         "1d37b551b8796e43084bd8f689e46e21474382f2",
+         "cab93f6bf86938db656efb5719ca85199e00a98d",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.headers": [
@@ -346086,7 +346105,7 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini": [
-         "f01d1fb7cd802655e2eebfb93e6ac0a734a8cbf7",
+         "88e01c23c05e0b1cf276e1b77dbdae6a15f4eb3f",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.headers": [
@@ -346110,7 +346129,7 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini": [
-         "86a8d77ff5bc2018ca6899eba2818d57150d63ff",
+         "83497785eecbb458d7175b44068eded801e7149d",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.headers": [
@@ -346118,7 +346137,7 @@
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini": [
-         "ec6bf6821cdfdcf35773ce349450cdd1701d350d",
+         "c238adfaadae7c4c7124d771fef8a9d5b858c496",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.headers": [
@@ -346126,7 +346145,7 @@
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini": [
-         "71b884a38cb29b9ec5ed7504e50a3aad3f2a674f",
+         "6ede574cc72edecd72afbc2d5170c18e72b73e07",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.headers": [
@@ -346141,12 +346160,16 @@
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
+        "parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.ini": [
+         "1702c5018d7456ac590c1e3fc32b4a6720f9987a",
+         []
+        ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini": [
-         "37913c2f747770ca2352f3050ec2cc3a58bfdb44",
+         "5d32ec5292fe848a54d90077ed51e6a7dbba3c9e",
          []
         ]
        },
@@ -346175,7 +346198,7 @@
         []
        ],
        "document-domain.sub.https.html.ini": [
-        "94dbfbd7a577895e0da52560473bfebd8bb1df50",
+        "39fb46a8bb87617808a3900ee27cf2423ac3fba4",
         []
        ],
        "getter-special-cases": {
@@ -346258,7 +346281,7 @@
          []
         ],
         "sandboxed-same-origin-iframe-yes.https.html.ini": [
-         "14cb1e6c42653c1e9878b1b91c0d340f355c96a9",
+         "3b19d0f6a64e2c2aa8938f39531dd585f1d146c1",
          []
         ]
        },
@@ -346271,24 +346294,28 @@
         []
        ],
        "iframe-navigation": {
+        "parent-no-1-no-same-2-yes-port.sub.https.html.ini": [
+         "ec2a502d92a980ccdf4976cc1155f85ad599095b",
+         []
+        ],
         "parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini": [
-         "5d7ca4cb418f5af0e8d072ba7a16be4a54a95900",
+         "20a6fc5c946789e32a60929cb0a56c0537a6711c",
          []
         ],
         "parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini": [
-         "ab1164fcfa88f9d62825099010af523f527fb3e2",
+         "27358051e1ca47c2ddf73b601b5babaa5c4c7a4c",
          []
         ],
         "parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini": [
-         "d529cf990f32574201a9b4ece42788a3afd7b78a",
+         "408c430c3c3b38e1d5262d56040bd49c4cf3fe23",
          []
         ],
         "parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini": [
-         "29817d3ce6772f9d9a9547561e709cbe471d006f",
+         "cb3c21c0dc796ccb17dbe3ebf218bb5857e1cca1",
          []
         ],
         "parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini": [
-         "5d4c18e3f56359edb9ddd3c4341de78e71182c6c",
+         "cf2645dc4d01b9cb598bbbbddb5609508a8fc2ad",
          []
         ],
         "parent-yes-1-no-same-2-no-port.sub.https.html.headers": [
@@ -346304,7 +346331,7 @@
          []
         ],
         "parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini": [
-         "0efd664000f9215136d24a07435519325314734e",
+         "07f864d7e3b035e56c8145d79ccfed64f3cb0cd0",
          []
         ]
        },
@@ -346317,8 +346344,8 @@
         []
        ],
        "popups": {
-        "opener-no-openee-yes-port.sub.https.html.ini": [
-         "8d87ab4258525a21053625918b5af66ef2bfd487",
+        "opener-no-openee-yes-same.sub.https.html.ini": [
+         "0f5a12ba37764c13f8bfd46519f5106dfae1f2da",
          []
         ],
         "opener-no-openee-yes-subdomain.sub.https.html.ini": [
@@ -346330,7 +346357,7 @@
          []
         ],
         "opener-yes-openee-no-port.sub.https.html.ini": [
-         "6cfbabff6796ee5a36819a9e2bbbd64e655f33e4",
+         "ee2567b52e0a5a31a1419d6b327ecb06794fee8d",
          []
         ],
         "opener-yes-openee-no-same.sub.https.html.headers": [
@@ -346354,19 +346381,23 @@
          []
         ],
         "opener-yes-openee-yes-port.sub.https.html.ini": [
-         "e1431348cca8f106345fbafd820354e60e87f00c",
+         "9f1c64b95be44d2188f1edc5dd3368ce3fbe45ea",
          []
         ],
         "opener-yes-openee-yes-same.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
+        "opener-yes-openee-yes-same.sub.https.html.ini": [
+         "34df7b455cff017a2274b536779957faa688ce7d",
+         []
+        ],
         "opener-yes-openee-yes-subdomain.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
         "opener-yes-openee-yes-subdomain.sub.https.html.ini": [
-         "d0fc030e67830d5ef48049cf1c3ae79bc14efa8f",
+         "37cb728002347d5f191f4e817cfb7cc7c531574c",
          []
         ]
        },
@@ -346379,7 +346410,7 @@
         []
        ],
        "removing-iframes.sub.https.html.ini": [
-        "d943b31962c0c3aa451b6472158658179ddbfcc3",
+        "cb6578700d10c64dc4bdd5cb6526d5ed28b5b4a4",
         []
        ],
        "resources": {
@@ -346724,10 +346755,6 @@
          []
         ]
        },
-       "open-features-is-popup-condition.html.ini": [
-        "485b254537ead17d28898721493349e5a93e292a",
-        []
-       ],
        "open-features-negative-innerwidth-innerheight.html.ini": [
         "ad6ace0710760cedf3840baf02a126775e92c870",
         []
@@ -346812,10 +346839,6 @@
         "e05e8a3bcbab57f52352fb305219cb1af318369a",
         []
        ],
-       "open-features-tokenization-width-height.html.ini": [
-        "25200b9fcdb4c04d9579be0768e9efcbb236abbc",
-        []
-       ],
        "resources": {
         "close-self.html": [
          "0c0cf9fc4911de2404a6b9247c862297c22038f1",
@@ -346886,7 +346909,7 @@
        []
       ],
       "window-open-noopener.html.ini": [
-       "ababd53ba222e379447bc8ef2aa183ff95479ea2",
+       "d1fa6d11c2037beb1fcd86d03d6cf33cae5c772d",
        []
       ],
       "window-open-windowfeatures-values.html.ini": [
@@ -346987,7 +347010,7 @@
       },
       "browsing-context-names": {
        "choose-_blank-002.html.ini": [
-        "6231b72dc642616d4cba43f7713396bd50b8d945",
+        "9038f75313fb646954d192d94240d99c52dac53c",
         []
        ],
        "choose-_top-001.html.ini": [
@@ -348428,7 +348451,7 @@
          []
         ],
         "canvas-display-p3-drawImage-video.html.ini": [
-         "5ce8f6d75dc1c97cd57480f3b7ba13c1cde25f9b",
+         "decdec2a218108fb2da98366e7750d60ad9c23ef",
          []
         ],
         "canvas-display-p3-drawImage.https-expected.txt": [
@@ -349014,7 +349037,7 @@
          []
         ],
         "offscreencanvas.resize.html.ini": [
-         "84c7205ffd34f86ebc5fb6f8fac81fb77f0bf3f1",
+         "8640bb99063891357afcc9bbbd97670c823f6062",
          []
         ],
         "offscreencanvas.transferrable-expected.txt": [
@@ -349566,7 +349589,7 @@
        []
       ],
       "link.https.window.js.ini": [
-       "efe11738cc226c7f186ba926b61c2fe5abf41b33",
+       "1a3ff5b3de8f317a915fe5ffe347d319418c2639",
        []
       ],
       "reporting-subresource-corp.https.window.js.ini": [
@@ -350006,6 +350029,10 @@
       "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
       []
      ],
+     "coep-redirect.https.html.ini": [
+      "06c876bc7023291abed2c8a6e4b0cb19e12bb807",
+      []
+     ],
      "coep-with-cross-origin.https.html.headers": [
       "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
       []
@@ -350063,7 +350090,7 @@
       []
      ],
      "coop-sandbox-cuts-opener.https.html.ini": [
-      "cf83ddf8ec914ab247cf0d602aa8f11edd6d799a",
+      "c873fb6534a8e70e505917a3f87311c61918623a",
       []
      ],
      "coop-sandbox-redirects-cuts-opener.https.html.ini": [
@@ -350094,6 +350121,10 @@
       "85c58be8a1c60ed64b2efaed8a155fc5e087537e",
       []
      ],
+     "header-parsing-repeated.https.html.ini": [
+      "6c6d744722cce15a515c5f0f8755f60cde65d9a7",
+      []
+     ],
      "historical": {
       "popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html.headers": [
        "a19f4400cea33a60c99807330704a23ee363b146",
@@ -350103,12 +350134,16 @@
        "a19f4400cea33a60c99807330704a23ee363b146",
        []
       ],
+      "popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html.ini": [
+       "6095039701b3ae4114a122f88d33f0a291771c10",
+       []
+      ],
       "popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.headers": [
        "a19f4400cea33a60c99807330704a23ee363b146",
        []
       ],
       "popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini": [
-       "a39425e4f08a1b98febdbd6ad084b80945d2b93c",
+       "8eb49f5a212bff324d3cda1f2fdce6305ecef148",
        []
       ],
       "popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.headers": [
@@ -350149,7 +350184,7 @@
       []
      ],
      "iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini": [
-      "22875a69afa28bcb6c37ec989db7fe63bff60ea5",
+      "c563da96ae7db292b99ebc70c87b9edccad35854",
       []
      ],
      "iframe-popup-same-origin-allow-popups-to-same-origin.https.html.headers": [
@@ -350173,7 +350208,7 @@
       []
      ],
      "iframe-popup-same-origin-to-same-origin.https.html.ini": [
-      "cf64fdc476064b52e967508c36fb07f9cade5d08",
+      "223c26b5d730d933a5f58b18a1597c67a0aac633",
       []
      ],
      "iframe-popup-same-origin-to-unsafe-none.https.html.headers": [
@@ -350181,7 +350216,7 @@
       []
      ],
      "iframe-popup-same-origin-to-unsafe-none.https.html.ini": [
-      "872be04701bdb2dcc3fb9da108f1f23edaa18c0b",
+      "8eec1633c1b737c49a14249cda902fca3a7199de",
       []
      ],
      "iframe-popup-unsafe-none-to-same-origin.https.html.headers": [
@@ -350189,7 +350224,7 @@
       []
      ],
      "iframe-popup-unsafe-none-to-same-origin.https.html.ini": [
-      "57821696a9c6f3f09e57b367e92979fc5cf1561f",
+      "3e09c283deb3d8ca3eb84b95803a97ca16aff88d",
       []
      ],
      "iframe-popup-unsafe-none-to-unsafe-none.https.html.headers": [
@@ -350197,11 +350232,11 @@
       []
      ],
      "iframe-popup-unsafe-none-to-unsafe-none.https.html.ini": [
-      "3deb888f6a7785ad9af9dac239d60e1473bb47d5",
+      "392bc70005d31227d8778738fffcb098f7c38eb0",
       []
      ],
      "javascript-url.https.html.ini": [
-      "808835a26968f265fc92c3103d8cf4718a376d87",
+      "e3e0f9d7beee8b0cccbb3ff460301dfaa41d7af3",
       []
      ],
      "navigate-to-aboutblank.https.html.ini": [
@@ -350228,14 +350263,14 @@
       "116d941d428fbfa26f872f871a093845f4d50997",
       []
      ],
-     "popup-redirect-same-origin-allow-popups.https.html.ini": [
-      "bfc9a64a42e9f3926c011624f5047fc26792c230",
-      []
-     ],
      "popup-same-origin-allow-popups-with-cross-origin.https.html.headers": [
       "d83ed86fb9b5d159b9f380424887402edc96cb75",
       []
      ],
+     "popup-same-origin-allow-popups-with-cross-origin.https.html.ini": [
+      "ddd028e2ea76a0899bed36a40e2607dc3c213bb7",
+      []
+     ],
      "popup-same-origin-allow-popups-with-same-origin.https.html.headers": [
       "d83ed86fb9b5d159b9f380424887402edc96cb75",
       []
@@ -350244,6 +350279,10 @@
       "d83ed86fb9b5d159b9f380424887402edc96cb75",
       []
      ],
+     "popup-same-origin-allow-popups-with-same-site.https.html.ini": [
+      "4015d9df1a9d31d95f6fb3777eafc71fb2353da3",
+      []
+     ],
      "popup-same-origin-non-initial-about-blank.https.html.headers": [
       "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
       []
@@ -350253,7 +350292,7 @@
       []
      ],
      "popup-same-origin-with-cross-origin.https.html.ini": [
-      "5edb38c4da12a526b55e978b0fd09cf29bfab2cc",
+      "21a59714180eda6dc32740cb17bb5ba12d8b47bc",
       []
      ],
      "popup-same-origin-with-same-origin.https.html.headers": [
@@ -350264,12 +350303,16 @@
       "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
       []
      ],
+     "popup-same-origin-with-same-site.https.html.ini": [
+      "ef3655a482107a3d7f9f5dea04a0b3b74bed9fa3",
+      []
+     ],
      "popup-unsafe-none-with-cross-origin.https.html.headers": [
       "073ce7adfbd81cb7c0b2f91f96c8349b6677f26c",
       []
      ],
      "popup-unsafe-none-with-cross-origin.https.html.ini": [
-      "1693ee1d806331a9a4ef3e315e8d0108b817346f",
+      "cc8ffe271ac33217e6c0b389f666cb69696d96be",
       []
      ],
      "popup-unsafe-none-with-same-origin.https.html.headers": [
@@ -350280,6 +350323,10 @@
       "073ce7adfbd81cb7c0b2f91f96c8349b6677f26c",
       []
      ],
+     "popup-unsafe-none-with-same-site.https.html.ini": [
+      "604de218d0bb79bd663522c70ec31d106a271e02",
+      []
+     ],
      "popup-unspecified-with-cross-origin.https.html.ini": [
       "6f1e872520590723fb96d2c67837a02d78f18977",
       []
@@ -350295,11 +350342,11 @@
       ],
       "access-reporting": {
        "access-from-coop-page-to-openee_coop-ro.https.html.ini": [
-        "59258e97f4655d24edc749db900a792e73a39960",
+        "4ca363c7fe04cdbcceba5b8f932f804456ded41c",
         []
        ],
        "access-from-coop-page-to-openee_coop-ro_cross-origin.https.html.ini": [
-        "e85ff7282f33acb9edc3d317368f7163743505b8",
+        "c525d52f14f5dc4556b20fd1965377e84ca1469b",
         []
        ],
        "access-from-coop-page-to-opener_coop-ro.https.html.ini": [
@@ -350323,7 +350370,7 @@
         []
        ],
        "access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini": [
-        "c12963c37c283f6c853bb9f9ef36b7cf83c9d0df",
+        "a07396ec29b90d8998c0949887aa263615f8ad36",
         []
        ],
        "access-to-coop-page-from-opener_coop-ro.https.html.ini": [
@@ -350335,7 +350382,7 @@
         []
        ],
        "access-to-coop-page-from-other_coop-ro.https.html.ini": [
-        "12463d2a477294446d1b508952f81fdfcfd6296e",
+        "22693c3d4521115956429a962468b7b769327914",
         []
        ],
        "access-to-coop-page-from-other_coop-ro_cross-origin.https.html.ini": [
@@ -350355,7 +350402,7 @@
         []
        ],
        "property-focus.https.html.ini": [
-        "2db32f1edef3c5c1def240fb6fa5fbf980b5e42b",
+        "cdb2ab4dd72571f79b6b2b7a71be308ef1dbc9b2",
         []
        ],
        "property-frames.https.html.ini": [
@@ -350371,7 +350418,7 @@
         []
        ],
        "property-length.https.html.ini": [
-        "3435757a0b1006729ce145e2a044df8233d8f4da",
+        "adac8732a3e22ead8ec3bcd459996e33d0182d61",
         []
        ],
        "property-location-get.https.html.ini": [
@@ -350379,15 +350426,19 @@
         []
        ],
        "property-location-set.https.html.ini": [
-        "e016cf9c67e1853eefcc7da328877d3d0866029c",
+        "1ee952d5aa7319c3919b0f9ccbe3df106c9bd3e5",
         []
        ],
        "property-named-getter.https.html.headers": [
         "64f4d5fedffd208b7174c7d8e0bce4e99ce1ac0f",
         []
        ],
+       "property-named-getter.https.html.ini": [
+        "d654a715676c6c157522e5b0621143e8faa66bc4",
+        []
+       ],
        "property-opener-get.https.html.ini": [
-        "e053a92320caf24980ff5f4d623361e7485303db",
+        "76173f058e7af335f35213295dd3b1a188840c64",
         []
        ],
        "property-opener-set.https.html.ini": [
@@ -350395,7 +350446,7 @@
         []
        ],
        "property-postmessage-1.https.html.ini": [
-        "943353e4f9e25b62aaec539cff959e753180bc02",
+        "ab4e882800645f49b748ce816f1108237bde01a8",
         []
        ],
        "property-postmessage-2.https.html.ini": [
@@ -350407,7 +350458,7 @@
         []
        ],
        "property-top.https.html.ini": [
-        "615e9be3bec0c5a1171fbcd64edfbc4ab9af5873",
+        "e3a7586a247307c588eb7e9c9a3cdb75dbe2b04c",
         []
        ],
        "property-window.https.html.ini": [
@@ -350415,7 +350466,7 @@
         []
        ],
        "report-to-both_coop-ro.https.html.ini": [
-        "46d3e2453d8b141994297fa9ca23abea51bbb623",
+        "a842eff9ac98cb00647a6efcc5b1ccf5ebfa0ae5",
         []
        ],
        "reporting-observer.html.ini": [
@@ -350437,11 +350488,11 @@
         []
        ],
        "reporting-redirect-with-same-origin-allow-popups.https.html.ini": [
-        "6f1d038e5dd4f3474f52cf8d1ad4d3191d8fda2c",
+        "18bb1f2390bffd060cf2e565cb466a01b64357b2",
         []
        ],
        "reporting-redirect-with-unsafe-none.https.html.ini": [
-        "16239405fe1e3872295ebe9c53b215d7a4da6e46",
+        "7b11492b982a5f967e17720d55c7e546173d1e25",
         []
        ]
       },
@@ -350558,6 +350609,10 @@
        ]
       }
      },
+     "resource-popup.https.html.ini": [
+      "950ed5a35712e468a2528cbffb9fe22d1c6cce11",
+      []
+     ],
      "resources": {
       "call-functionCalledByOpenee.html": [
        "d0ff0b723e0f31c6ed635db95851769a598ce2a1",
@@ -350631,7 +350686,7 @@
         []
        ],
        "iframe-popup-to-so.https.html.ini": [
-        "f8a499bad12ec011584e053acd36ac42680e7d1c",
+        "da58f27fb7b8428ecc21b1243aa4cbb033cee871",
         []
        ],
        "iframe-popup-to-soap.https.html.headers": [
@@ -350639,7 +350694,7 @@
         []
        ],
        "iframe-popup-to-soap.https.html.ini": [
-        "f8661d582e1632d4967a02fc2a63c594f5c87a44",
+        "dd70f03b2e8d09c23ac6f0ee6e91bb37edf4b0e9",
         []
        ],
        "iframe-popup-to-un.https.html.headers": [
@@ -350647,7 +350702,7 @@
         []
        ],
        "iframe-popup-to-un.https.html.ini": [
-        "275706e4b4b566e979c0822359ded85f476fde89",
+        "9afd7b3f9b0ba4181c16b1de799a272170e49feb",
         []
        ],
        "iframe-popup-to-un.https_1-2-expected.txt": [
@@ -350675,7 +350730,7 @@
         []
        ],
        "iframe-popup.https.html.ini": [
-        "f3681f22e7aaacd0c447883a6d4c2e4b530cfde0",
+        "4f6dc509504b25a91462730fcac2315ccc823f69",
         []
        ],
        "iframe-popup.https_1-2-expected.txt": [
@@ -350714,10 +350769,6 @@
         "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
         []
        ],
-       "popup-so.https.html.ini": [
-        "81084dfeb2aab191721f3ecca3c350b0f4d0fba0",
-        []
-       ],
        "popup-soap.https-expected.txt": [
         "8c40e7b3b1e288546cc4f2a9a739c4ada36e2df0",
         []
@@ -350727,7 +350778,7 @@
         []
        ],
        "popup-soap.https.html.ini": [
-        "d4cfb804c1cda4b1271b3a5e605bfb31db94812a",
+        "edddc8edd0f3e2c3805bcc449f605bf7d4c52b86",
         []
        ],
        "popup-u.https-expected.txt": [
@@ -350771,7 +350822,7 @@
         []
        ],
        "popup-with-same-origin.https.html.ini": [
-        "5e23173a1ad96fa1cc19ae9e7649a3afd97de59d",
+        "a2bc292d5496bafa25dc8d092a25dc18e19e6747",
         []
        ],
        "popup-with-same-site.https-expected.txt": [
@@ -350851,7 +350902,7 @@
         []
        ],
        "document-cookie.html.ini": [
-        "4bbf824cad421323c92858302f0c08cc58fd0bb9",
+        "b9b8e1df1df72eda3ae73786de4a36e371feb0b8",
         []
        ],
        "document-lastModified.html.headers": [
@@ -351343,8 +351394,8 @@
       []
      ],
      "render-blocking": {
-      "remove-attr-script-keeps-blocking.tentative.html.ini": [
-       "1c33dce5688b3d3c48697265c012771f77d7a79f",
+      "parser-inserted-async-script.tentative.html.ini": [
+       "632b0b9d9583e1f5040e25fd4ff40981355387d4",
        []
       ],
       "script-inserted-script.html.ini": [
@@ -357044,7 +357095,7 @@
          []
         ],
         "resource-selection-invoke-audio-constructor.html.ini": [
-         "782dea7f2f4c93a1247ee7aabd48d982d9c2bdaa",
+         "832554d322a83d49960e5586a1b22eb166cf8708",
          []
         ],
         "resource-selection-invoke-in-sync-event-expected.txt": [
@@ -357072,11 +357123,11 @@
          []
         ],
         "resource-selection-invoke-insert-source-not-in-document.html.ini": [
-         "0d35b24d35d3d91e2c9a565df4d85199db7fab3b",
+         "98a26c7758bc186dcb366e39958d7abbc649c309",
          []
         ],
         "resource-selection-invoke-insert-source.html.ini": [
-         "5e49a00b82fc89743dcc0069127766610ae786fa",
+         "b9e47853f8f672609ae70204e6051675a51d8f81",
          []
         ],
         "resource-selection-invoke-load.html.ini": [
@@ -357084,7 +357135,7 @@
          []
         ],
         "resource-selection-invoke-pause-networkState.html.ini": [
-         "e889ab762e3f0df906ff3f35139c60e0c4a89904",
+         "625313ce7ce214f1638efb76cae7b83166a7e0b5",
          []
         ],
         "resource-selection-invoke-pause.html.ini": [
@@ -357096,11 +357147,11 @@
          []
         ],
         "resource-selection-invoke-remove-from-document-networkState.html.ini": [
-         "c347625b9021debbfde4fd55dce626a8ec5d70c7",
+         "33e2bbbf2db5f400c6b95c9f46e33d3e663a43c5",
          []
         ],
         "resource-selection-invoke-remove-src.html.ini": [
-         "9d0eb977f12c92185afa96c944ad6d10a0145dfa",
+         "d46d8e21a17a4bd65146835331cfbd4a54690eeb",
          []
         ],
         "resource-selection-invoke-set-src-not-in-document.html.ini": [
@@ -357108,7 +357159,7 @@
          []
         ],
         "resource-selection-invoke-set-src.html.ini": [
-         "c0581652ef344bf42e125cffdd9d6761b9b91d4b",
+         "5ae5fd03f7cc9c647b2824ad73c06f9122056d3f",
          []
         ],
         "resource-selection-pointer-control-expected.txt": [
@@ -357599,7 +357650,7 @@
           []
          ],
          "track-cue-rendering-after-controls-removed.html.ini": [
-          "6bcd8049b66bcba4c2860af72c69f30f6d57f838",
+          "d59d9c455aeeed468fac2437754c458a0d451b2a",
           []
          ],
          "track-cue-rendering-line-doesnt-fit-ref.html": [
@@ -357873,7 +357924,7 @@
         []
        ],
        "toBlob-cross-realm-callback-report-exception.html.ini": [
-        "d445bb825830dd01abab013138c09cb3d186906b",
+        "b07dfb0bcde1d65745bd1ddcf9b75bb8a2bead44",
         []
        ],
        "toDataURL.jpeg.alpha.png": [
@@ -358069,7 +358120,7 @@
         []
        ],
        "sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini": [
-        "b0a68eb56445706a1edf871941bed87344498667",
+        "4f22930b4e1dc25e7382497ddef2add12482f436",
         []
        ],
        "sandbox-top-navigation-child.tentative.sub.window.js.ini": [
@@ -358773,7 +358824,7 @@
         []
        ],
        "multipart-formdata.window.js.ini": [
-        "ee2b086330239fc74b0b5445b1cd67072cfc96b1",
+        "ded39f6c67e30a6cd0a94bf1d028ba57a0ad9063",
         []
        ],
        "resources": {
@@ -358824,14 +358875,14 @@
         "bbc3b71e9423b6a17b07c065e20b8435e4c492f4",
         []
        ],
-       "rel-base-target.html.ini": [
-        "ec6f83c7a787d53a05091b5e5a87049e225f1eda",
-        []
-       ],
        "rel-button-target.html.ini": [
         "12a80ad04dadb978f7708cf81d7932098afc3487",
         []
        ],
+       "rel-form-target.html.ini": [
+        "12a54577862969a9c7d74b8e5dca33faf029b3de",
+        []
+       ],
        "rel-input-target.html.ini": [
         "7e74e3af77c070bd97ff8fdb3e583f57873d9814",
         []
@@ -359161,7 +359212,7 @@
         []
        ],
        "selectmenu-form-state-restore.tentative.html.ini": [
-        "62d88ea7592a11c6bcc5535efb00b8673e28f14f",
+        "6da635881ddbcb0c883003e7088fa09934250230",
         []
        ],
        "selectmenu-keyboard.tentative.html.ini": [
@@ -359569,7 +359620,7 @@
         []
        ],
        "activation-behavior.window.js.ini": [
-        "b9bd2a87872316f8869a48da3535b43d48d43339",
+        "e49c667e4a0782a75a5de71bdb9d438f5e9b9310",
         []
        ]
       },
@@ -363377,7 +363428,7 @@
         []
        ],
        "reload.window.js.ini": [
-        "a48a9a747ae5d237460e7616f6ea62d35a72b272",
+        "39ffbb01044d0964a7273790e9995f7bb288591d",
         []
        ],
        "resources": {
@@ -363480,12 +363531,6 @@
        ]
       }
      },
-     "microtask-queuing": {
-      "queue-microtask-exceptions.any.js.ini": [
-       "089911c7ece90af867a18df0e6a189665d9c739c",
-       []
-      ]
-     },
      "scripting": {
       "event-loops": {
        "fully_active_document.window-expected.txt": [
@@ -363493,7 +363538,7 @@
         []
        ],
        "fully_active_document.window.js.ini": [
-        "221d421a5136326eaf4b91b57549e11f6072bf82",
+        "d1bc92fb874c2ac02c5420802e4f5d80078c5c61",
         []
        ],
        "resources": {
@@ -363808,7 +363853,7 @@
      },
      "timers": {
       "negative-settimeout.any.js.ini": [
-       "4160c845ca7aee77220a770b8df3d5d577c1b51e",
+       "702bf536db201452cb7eefe3dfd0643a0c2b6a00",
        []
       ]
      },
@@ -363918,7 +363963,7 @@
      []
     ],
     "idle-detection-allowed-by-permissions-policy.https.sub.html.ini": [
-     "6f363c189c39ce8e2921eb7be18b2a9a306423f7",
+     "2e5bbacb24c3289077d6bfd1b274b58fc382521f",
      []
     ],
     "idle-detection-default-permissions-policy.https.sub.html.ini": [
@@ -365019,7 +365064,7 @@
       []
      ],
      "webtransport-h3.https.sub.any.js.ini": [
-      "667aadcf01418289fbe5842a37335b9cdddd9b56",
+      "6b6492c0bd4ee4d00726ecc5c0ef85f225a11e27",
       []
      ],
      "wpt-server-wpt-flags.sub.html.ini": [
@@ -366410,7 +366455,7 @@
      []
     ],
     "cross-origin-iframe.sub.html.ini": [
-     "96433ce771d633c8d066dbe446b8a5adcb049d1f",
+     "d1a46ba93bc6119e47e3849eaae14f44b33606c3",
      []
     ],
     "idlharness.window-expected.txt": [
@@ -366710,7 +366755,7 @@
      ]
     },
     "first-paint-equals-lcp-text.html.ini": [
-     "78cff02ad8a1c6e7b12afe72d222f2b292a30f14",
+     "8f534d54d7d8cb2973b5cd63be4feacb570cd5a8",
      []
     ],
     "image-upscaling-expected.txt": [
@@ -366734,7 +366779,7 @@
      []
     ],
     "non-tao-image-load-before-fcp-render-at-fcp.tentative.html.ini": [
-     "844f5b3fb624c90955d508eb8f6b6473ff867586",
+     "0cc5e0766b7b2347d72b0b000f9a597906aca35a",
      []
     ],
     "non-tao-image-subsequent-lcp-candidate.tentative.html.ini": [
@@ -366895,7 +366940,7 @@
    "loading": {
     "early-hints": {
      "404-with-early-hints.h2.window.js.ini": [
-      "029bd479d63a47b147f8494f77838652862f617e",
+      "e96503568885d864816c244fa3417d7b8c65eb56",
       []
      ],
      "arbitrary-header-in-early-hints.h2.window.js.ini": [
@@ -366911,11 +366956,11 @@
       []
      ],
      "csp-early-hints-absent-final-absent.h2.window.js.ini": [
-      "e09dbe09f21b4dc0c24a4e476832d949c175e651",
+      "d55450eb4c7914d8ff9bed827e0009b15be332c1",
       []
      ],
      "csp-early-hints-absent-final-allowed.h2.window.js.ini": [
-      "c384e96658848991595cf10db8575dfeb5320d54",
+      "7de5e40c9322d93afab4bb2b45955846fbedf998",
       []
      ],
      "csp-early-hints-absent-final-disallowed.h2.window.js.ini": [
@@ -366923,7 +366968,7 @@
       []
      ],
      "csp-early-hints-allowed-final-absent.h2.window.js.ini": [
-      "c53530f115a0d4227a9930724a7caf5cc7ed0e35",
+      "e5500a13a51e7ebbb6348084753f7ba9c6f3d5ad",
       []
      ],
      "csp-early-hints-allowed-final-allowed.h2.window.js.ini": [
@@ -366955,7 +367000,7 @@
       []
      ],
      "multiple-early-hints-responses.h2.window.js.ini": [
-      "caefadd9a88b67ea399b9a6e5888de6276efa5bc",
+      "885ec2864703a24fe6fed80db7a2ac7b3be97482",
       []
      ],
      "preconnect-in-early-hints.h2.window.js.ini": [
@@ -366991,7 +367036,7 @@
       []
      ],
      "preload-without-csp-document-disallow.h2.window.js.ini": [
-      "acb504f3ae440f2da85cfab12df322fbc141632f",
+      "f3dd853fe394264145f6bc8b0b30470456446d0a",
       []
      ],
      "redirect-cross-origin-between-early-hints.h2.window.js.ini": [
@@ -367003,11 +367048,11 @@
       []
      ],
      "redirect-same-origin-between-early-hints.h2.window.js.ini": [
-      "4189cc6224eb530ee5f0889422c6eb20df1f6214",
+      "66bceec28452a2a6d3c4034fbbe05aed0a70024a",
       []
      ],
      "redirect-same-origin.h2.window.js.ini": [
-      "0c8859cdd64336d88a95a83188ee908f0bd9e6c9",
+      "767a4707158efbf32bf2db68b19f0bedaebbeefb",
       []
      ],
      "referrer-policy-no-referrer.h2.window.js.ini": [
@@ -367601,6 +367646,10 @@
        "4fd4b225f3527a151b9d63e7603ab224453d7721",
        []
       ],
+      "legacy-mstyle-attributes.html.ini": [
+       "826bfe445bbe5c2a1ebb3b4395a6d0559d277726",
+       []
+      ],
       "mrow-painting-order-ref.html": [
        "72694959a86f1917cbd3db13b7f1a8b71714b711",
        []
@@ -367759,6 +367808,10 @@
        "f72fdc8403719b0d07a283ad725975ce72dfe056",
        []
       ],
+      "operator-dictionary-arabic-002.html.ini": [
+       "f0fa72f41bfa4a4f79b8af912e2e1b3857c5b907",
+       []
+      ],
       "operator-dictionary-empty-and-three-chars-ref.html": [
        "2cbed129401e721fccfeb12874d6b7223bff8def",
        []
@@ -369050,7 +369103,7 @@
      []
     ],
     "mediasource-avtracks.html.ini": [
-     "1cf60a5439ab5b6165f03b384be1e6d63c15ad8c",
+     "e9e2a3279d52ddd25c754a1491392944a87b1337",
      []
     ],
     "mediasource-buffered-expected.txt": [
@@ -369122,7 +369175,7 @@
      []
     ],
     "mediasource-duration.html.ini": [
-     "475cf46ef69e253bae26f63181398910a40f9c6c",
+     "362786749a60ce8a682ac18c2bf511d3ee0044d3",
      []
     ],
     "mediasource-endofstream-expected.txt": [
@@ -370256,6 +370309,10 @@
         "21ce7728c794fbd3881ed934183ceb5243a73393",
         []
        ],
+       "sharedworker-import-data.https.html.ini": [
+        "6419809d29a5fda7684637a01ab75cea67a35cb2",
+        []
+       ],
        "sharedworker-import.https.html.ini": [
         "34670d1a69d805fe66a123a1ce2462516b50f7ff",
         []
@@ -370417,6 +370474,10 @@
       []
      ]
     },
+    "detach_iframe_during_open.https.window.js.ini": [
+     "98a13dd8cc29f9fdd857d74b0f9f5c0012fde081",
+     []
+    ],
     "resources": {
      "opaque-origin-sandbox.html": [
       "b3490c3341a892052ccab603722059cf8bca0cd5",
@@ -370759,6 +370820,10 @@
        "580dc21c19e71cbc51833c5d458ee34bc5e66717",
        []
       ],
+      "navigate-initial-about-blank.html.ini": [
+       "b34e07a702ad587d2322cea8e0e3e449cd34fe0c",
+       []
+      ],
       "navigate-intercept-interrupted.html.ini": [
        "5df966b3082d4dd15b10bad9ef94202e51794b84",
        []
@@ -371806,7 +371871,7 @@
      []
     ],
     "pending_beacon-sendondiscard.tentative.https.window.js.ini": [
-     "602ca031c38f45f09c485269090b3120e91d958d",
+     "e40c36d935abe575b767fabee2130e5fe142f474",
      []
     ],
     "pending_beacon-sendonhidden.tentative.https.window.js.ini": [
@@ -371899,7 +371964,7 @@
       []
      ],
      "performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini": [
-      "d4bb3aa6faf53f819084d6aef4be04dc668213ea",
+      "9d137351f5cc93dc66ca41b8db92923bb3b88d06",
       []
      ],
      "performance-navigation-timing-same-origin-replace.tentative.window.js.ini": [
@@ -372345,7 +372410,7 @@
       []
      ],
      "geolocation-report-only.https.html.ini": [
-      "014a0550bb5decee63112b68c40d21f59c7f3356",
+      "74bda712526fc1da48f9887893a46a42eb6c3d1b",
       []
      ],
      "geolocation-reporting.https.html.headers": [
@@ -375653,6 +375718,10 @@
      "765815f1eee131d9ef45461f83becc63e5ac9e15",
      []
     ],
+    "deadline-max-rAF.html.ini": [
+     "ff1add8eb5eddf272807a4a0078afbb6ae0a2ece",
+     []
+    ],
     "deadline-max-timeout-dynamic.html.ini": [
      "727f92b8c3c0ebc581c367ce59d7846238a8c034",
      []
@@ -375758,7 +375827,7 @@
      []
     ],
     "content-type-parsing.html.ini": [
-     "5ac1d4a531dc6c94aa47de85e32c628d0f805d37",
+     "53105638e5270ddc714bde35f3ecdb5b22ccb6c2",
      []
     ],
     "frameset-timing.html": [
@@ -375810,7 +375879,7 @@
      []
     ],
     "no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini": [
-     "e70c84d000d39ef8875f4d33ae97d692b2c2c615",
+     "74539cf66d870dd2e6bcd91dfda36bba5bdc158b",
      []
     ],
     "object-not-found-adds-entry.html.ini": [
@@ -376216,7 +376285,7 @@
      ]
     },
     "response-status-code.html.ini": [
-     "0473d057f3535d8a18f1f1782f5c70e1fcdb36c2",
+     "28fcc51cd25b61a192ac3ba40f125915516918c1",
      []
     ],
     "sleep.py": [
@@ -378171,7 +378240,7 @@
       []
      ],
      "cache-add.https.any.js.ini": [
-      "6c4c374590af86e5edd115ef089cc1bdd6f41d31",
+      "d767838f6f4d36faf078102d06af84f1dd8df003",
       []
      ],
      "cache-add.https.any.serviceworker-expected.txt": [
@@ -378429,11 +378498,7 @@
       []
      ],
      "about-blank-replacement.https.html.ini": [
-      "44673f0a5f7c3367517b39b82019fb80db5262b9",
-      []
-     ],
-     "client-navigate.https.html.ini": [
-      "fca26227db190ec5644ebe9fdb8ab985f03a0b75",
+      "b2a61d9c24fb4e80b97cb4747249e50855d8dddb",
       []
      ],
      "client-url-of-blob-url-worker.https-expected.txt": [
@@ -380329,7 +380394,7 @@
       []
      ],
      "unregister-immediately-during-extendable-events.https.html.ini": [
-      "48187be6cf659c80f88dd2bbf4828e0763dd24f2",
+      "481bcd7e47d21c05db4ca40a9de01c83015b14dc",
       []
      ],
      "unregister-then-register-new-script.https-expected.txt": [
@@ -381255,7 +381320,7 @@
       []
      ],
      "csp-script-src-self.html.ini": [
-      "55cdc9ce3ea7e7dc8679161c85a16e0d5e2c0c38",
+      "74869a8f49c78f147115123ab464b842403e2660",
       []
      ],
      "csp-script-src-unsafe-inline.html.ini": [
@@ -381271,7 +381336,7 @@
       []
      ],
      "iframe-added-post-activation.html.ini": [
-      "639ddc1b8df708a9655f77e69e9ca9fe83c28ed6",
+      "6b9bf4fd20cef688bed633eea961bafe048aa419",
       []
      ],
      "indexeddb.html.ini": [
@@ -381287,7 +381352,7 @@
       []
      ],
      "media-autoplay.html.ini": [
-      "12abdfdd57a96f1d46e72d7aab8b6fb66a315608",
+      "dcad0990b062253b60381f1c830be6cd905126e5",
       []
      ],
      "navigation-intercepted-by-service-worker.https.html.ini": [
@@ -381307,7 +381372,7 @@
       []
      ],
      "referrer-policy-mismatch.html.ini": [
-      "ef3bb68bc966bcd52a244833f72ce896fbc277b0",
+      "a532357ff77a18f1609793e89521df39aa26d588",
       []
      ],
      "referrer-policy-no-referrer.html.ini": [
@@ -381741,15 +381806,15 @@
       ]
      },
      "response-code-non-successful.html.ini": [
-      "4937abd3390482e85c58cdb2d36a21c9b2d7976e",
+      "29ab07e4877efdb9b14514e44c2d53d854a555cf",
       []
      ],
      "response-code-successful.html.ini": [
-      "dbd82821dba2bf0d27c0a16f3df67cff585862a6",
+      "2cbbf867b69b6b9cb88de86a4a378ffb9fa106b4",
       []
      ],
      "restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html.ini": [
-      "872a1f57e6a8a75b91e61c164cec933ddc0799d7",
+      "2795fefbe10d8076c015ecacfc7c81b3fee88221",
       []
      ],
      "restriction-audio-setSinkId.https.tentative.html.ini": [
@@ -381769,7 +381834,7 @@
       []
      ],
      "restriction-bluetooth.tentative.https.html.ini": [
-      "8dacf33334b4b93b78abf35afd65e007ea45c378",
+      "430d214a46243795c50eef1a5dbe7e0ecce35eac",
       []
      ],
      "restriction-broadcast-channel.html.ini": [
@@ -381781,11 +381846,11 @@
       []
      ],
      "restriction-encrypted-media-unsupported-config.https.html.ini": [
-      "ba53aa9f8f5796948c6ae068e81a4e2627481d47",
+      "ac509131109042c158274df161ba214b7d1b8d4e",
       []
      ],
      "restriction-encrypted-media.https.html.ini": [
-      "c443d69133977394b19006664f3a1f567b5b824d",
+      "a72b2256c439a5be422d5893a270d1937bab5749",
       []
      ],
      "restriction-focus.html.ini": [
@@ -381801,11 +381866,11 @@
       []
      ],
      "restriction-media-auto-play-attribute.html.ini": [
-      "66ea6cb7d2ce1982cbd5b55389211dd5ff9b5f9e",
+      "163886691748f1816ef13538f5ddc7a19a4e1873",
       []
      ],
      "restriction-media-camera.https.html.ini": [
-      "591023622258a14009844ba4319751027e3d104d",
+      "f2b8f0c656ec7e8f559732df8628b96f7f40a018",
       []
      ],
      "restriction-media-device-info.https.html.ini": [
@@ -381889,7 +381954,7 @@
       []
      ],
      "restriction-service-worker-update.https.html.ini": [
-      "f0afa05263b0f0e6cf6d67fa8dc79e0298784281",
+      "f959936dc9c6c1a5b6c7043e506be3b5b2f89a5b",
       []
      ],
      "restriction-speech-synthesis.html.ini": [
@@ -381913,7 +381978,7 @@
       []
      ],
      "restriction-web-nfc.https.html.ini": [
-      "2a03aca3d9be39ee1474a927a68ebe915eccdab6",
+      "e02269b0f6d1f4176a88af6cc6027b31e03d8fdd",
       []
      ],
      "restriction-web-serial.tentative.https.html.ini": [
@@ -381937,7 +382002,7 @@
       []
      ],
      "restriction-window-move.html.ini": [
-      "87802b2eb28eb268058b152c573e7e727f6b22de",
+      "1f07b4c2d4998f2362163af38a7b4ab95c7befaa",
       []
      ],
      "restriction-window-open.html.ini": [
@@ -381969,15 +382034,15 @@
       []
      ],
      "session-history-navigation.https.html.ini": [
-      "e918764ba330c1dbe8b9acf6df9193097292f7aa",
+      "af371ee09a55eb780e0120004213a1bedf7b4c2f",
       []
      ],
      "session-history-pushstate.https.html.ini": [
-      "f2a1bee431ed48cfcf7c705d57d63751f2ca6d44",
+      "c514647ec1025d04841cc69501f5a3463d5b9865",
       []
      ],
      "session-history-subframe-navigation.https.html.ini": [
-      "a18dab5e083176b932ac9925ace656a983fc1e2d",
+      "ff00e55636afe27f0cbbc2f55f6f17bcddde7d85",
       []
      ],
      "session-history-subframe-reload.https.html.ini": [
@@ -381985,7 +382050,7 @@
       []
      ],
      "state-and-event.html.ini": [
-      "aa4211fec85a0fcc0270c2b6ac7dcf42375538df",
+      "1024f525bd89563ef01ad1c2f508ec36b8f28b41",
       []
      ],
      "storage-foundation.https-expected.txt": [
@@ -385830,7 +385895,7 @@
      []
     ],
     "a-element-xhtml.xhtml.ini": [
-     "14abea7e25a48e747f0b621df41015d34c34d6d3",
+     "adfd7d0caab89c40351d00add7ff62524412ab73",
      []
     ],
     "a-element-xhtml_include=javascript-expected.txt": [
@@ -385842,7 +385907,7 @@
      []
     ],
     "a-element.html.ini": [
-     "f98ee3124404fc4d22a15be43e382c6d0da27d05",
+     "769ff5e7dd807c42a63cd65f98d9b94d53e051ea",
      []
     ],
     "a-element_include=javascript-expected.txt": [
@@ -385854,7 +385919,7 @@
      []
     ],
     "failure.html.ini": [
-     "5f3314da573f67b736b3308e0d9a782c3778fde1",
+     "4364c892cde3d29b38bf7cace0017c9e9c5da053",
      []
     ],
     "idlharness-shadowrealm.window-expected.txt": [
@@ -385866,7 +385931,7 @@
      []
     ],
     "percent-encoding.window.js.ini": [
-     "1091bffa2c6ebfc3c45547eb4ba0f53edaab55cc",
+     "36d57023fae6a0fbf2d834ab075a368470e527de",
      []
     ],
     "resources": {
@@ -385904,7 +385969,7 @@
      []
     ],
     "toascii.window.js.ini": [
-     "f1a9b16df7d1ee5bef2cd897d4ab8341aa1e0cea",
+     "9f9103a603e0878c54a5f28e95aa7c02edd3c71a",
      []
     ],
     "url-constructor.any.js.ini": [
@@ -385932,7 +385997,7 @@
      []
     ],
     "url-setters-a-area.window.js.ini": [
-     "e27107d6a140e7ef0eec760df5ebe14ee6546e80",
+     "ceb06238e565d86b8b7fd7f1364a808e4ad91ae9",
      []
     ],
     "url-setters-a-area.window_include=javascript-expected.txt": [
@@ -385984,7 +386049,7 @@
      []
     ],
     "urlsearchparams-stringifier.any.js.ini": [
-     "927c36c9379634b16ecf3aa4c6455d5370b84aa4",
+     "acdd4a89a63a0eb390ff0ae47d16c4300f74b64c",
      []
     ]
    },
@@ -386986,11 +387051,11 @@
      },
      "Animation": {
       "finished.html.ini": [
-       "a3e52c7dee4b1c685dfdccafd1ebbad8f1364064",
+       "1e48fb216d8591cf61a0ad365c3dfa8068f77a72",
        []
       ],
       "onremove.html.ini": [
-       "0b9009cc56b5710626afa0c7f7987d403f7decce",
+       "b77dcd32d6654de3af56d5c4ce31bb77f6466fdf",
        []
       ]
      },
@@ -387162,7 +387227,7 @@
        []
       ],
       "setting-the-current-time-of-an-animation.html.ini": [
-       "abf20dbb0bffc27c76641080a58b6e0bf817b724",
+       "f0eb25a2ee5fb0b9e21d7b57dcd870f5bc71c697",
        []
       ],
       "setting-the-start-time-of-an-animation-expected.txt": [
@@ -387187,10 +387252,6 @@
       ]
      },
      "timelines": {
-      "document-timelines.html.ini": [
-       "08dcd48709615c9a9b1a969e392a50990c32d801",
-       []
-      ],
       "resources": {
        "target-frame.html": [
         "18ee4fd8a23e6a9b4f95068b418d4da1bdef1679",
@@ -387206,7 +387267,7 @@
        []
       ],
       "sibling-iframe-timeline.html.ini": [
-       "fda793bb285bae3f6cddefbd47036b789da06e18",
+       "675b3f1bf576cac09b7b92d0a3579e3d0c26c018",
        []
       ],
       "timelines.html.ini": [
@@ -387631,7 +387692,7 @@
       ]
      },
      "reuse-web-bundle-resource.https.tentative.html.ini": [
-      "41577178df49c6b5ab1123e45f214e1fa7b94af6",
+      "2aec54d3be675364ac60a5ddff9c3b64f6abc59f",
       []
      ]
     },
@@ -387690,7 +387751,7 @@
      []
     ],
     "query-ordering.tentative.https.html.ini": [
-     "b63d722ab7dd33bb4eac37228311c006f2ed749b",
+     "55679228daedc14e37f98c9297c1755648885e1b",
      []
     ],
     "query.tentative.https.any.js.ini": [
@@ -387992,7 +388053,7 @@
      },
      "the-analysernode-interface": {
       "test-analyser-output.html.ini": [
-       "55c0f7c0f7d68856e9cddf017dda1fccdf38a75d",
+       "3b3be66a5d340b1b3522b416abedba243da0786d",
        []
       ]
      },
@@ -388272,7 +388333,7 @@
      },
      "the-mediaelementaudiosourcenode-interface": {
       "mediaElementAudioSourceToScriptProcessorTest.html.ini": [
-       "41f632613115f784c5390c049cc9116208423c4f",
+       "88f3f0f560a735cacf8c8c58972ea1ee75f099de",
        []
       ]
      },
@@ -388569,6 +388630,10 @@
      "8e751632a1f285b6c0dd50d4fb14cdb10d451816",
      []
     ],
+    "videoFrame-serialization.crossAgentCluster.html.ini": [
+     "23f3938a5ca19f0a602b6a3c4861fa415ad0a8f4",
+     []
+    ],
     "videoFrame-utils.js": [
      "a4c761306c05d58880e408b30ef2b28f6d6f0cb6",
      []
@@ -389423,11 +389488,7 @@
        "ee2d51a254256761626e9d3e7743dad89caf0233",
        []
       ]
-     },
-     "workers.html.ini": [
-      "fd51247a007880b73ef8775e6641bb619b299ba4",
-      []
-     ]
+     }
     },
     "message-channels": {
      "close-expected.txt": [
@@ -389509,10 +389570,6 @@
      "244903d102f3d42f89d8f13b7518e76e829775c1",
      []
     ],
-    "postMessage_Date.sub.htm.ini": [
-     "dd186255000a3418f074ec18595d102f3a8b3010",
-     []
-    ],
     "resources": {
      "post-cryptokey-to-opener.html": [
       "91c70165f03ec63615ac286dc9ae3555706f49ad",
@@ -389548,10 +389605,6 @@
       "7d6f44126afbf7ce2e32cbf9ee8380480a64dc57",
       []
      ],
-     "020.html.ini": [
-      "265c7a6def4cc8db611bbcb8f304bdfab086a23c",
-      []
-     ],
      "021.html.ini": [
       "ec5a6ff110d12ecf39f9e0b18443669c229a9b5b",
       []
@@ -389562,6 +389615,10 @@
       "571d4e1044db84f78f5bbf173b1c334e5f73d041",
       []
      ],
+     "005.html.ini": [
+      "ed4eab75f7bc087f580a6b4ecf565d2762e4f55f",
+      []
+     ],
      "013.html.ini": [
       "d35fadd41ab2441d00bca8fcc1b8746c0691538a",
       []
@@ -389616,7 +389673,7 @@
      []
     ],
     "idlharness.https.any.js.ini": [
-     "c65621626f54bc87e5a8163e5e71c701475c099a",
+     "1f6ede487cd60ddc1b822834cce6468c8d0f268a",
      []
     ],
     "idlharness.https.any.worker-expected.txt": [
@@ -394658,7 +394715,7 @@
      []
     ],
     "events_referenceSpace_reset_inline.https.html.ini": [
-     "00c1d56bf0b835c4ab75baee491703b102791134",
+     "fddaa5b930051715ecfd3f17869ba0b776c39b55",
      []
     ],
     "events_session_select.https.html.ini": [
@@ -394898,7 +394955,7 @@
      []
     ],
     "xrDevice_requestSession_optionalFeatures.https.html.ini": [
-     "1fabe48b5dbb851cb99650718a0bd9aca804c348",
+     "f62357fd8e56cd84ee0aba99c7080eb38694cab8",
      []
     ],
     "xrDevice_requestSession_requiredFeatures_unknown.https.html.ini": [
@@ -395174,7 +395231,7 @@
        []
       ],
       "sharedworker-in-worker.html.ini": [
-       "9b715377e1acb916f27a459fa7a726effeb78546",
+       "d21b77c2a5f77e5b26b1293634f441c026a8e0fd",
        []
       ]
      },
@@ -395473,7 +395530,7 @@
      "DedicatedWorkerGlobalScope": {
       "postMessage": {
        "event-ports-dedicated.html.ini": [
-        "4229e4c106db40927be42105f2137a716d1b37b9",
+        "de76679c52e1f392bba568eab8288b95a69b309e",
         []
        ],
        "event-ports-dedicated.js": [
@@ -395742,6 +395799,10 @@
         "7fc6d0dd64bc82527621a90f848d080a195ed212",
         []
        ],
+       "report-error-same-origin.sub.any.js.ini": [
+        "285f912dbba51af9762fbd6ca428d301a47ab1b4",
+        []
+       ],
        "undefined": [
         "f99ba4be744c40c45ec3f9c58d2d1379f514c5d5",
         []
@@ -435089,7 +435150,7 @@
        ]
       ],
       "unsupported-axis.html": [
-       "caee4bc39cdd021a0d59f85214d8539eb6487d72",
+       "308de2f4245937e8bc014e703395e08f37abd64b",
        [
         null,
         {}
@@ -624459,7 +624520,7 @@
      ]
     ],
     "videoFrame-serialization.crossAgentCluster.html": [
-     "c2ab29850e88e08cfae56465255c7cf06ed1bb00",
+     "3714ceb49ebb67ffed17582243d4e109b834358a",
      [
       null,
       {}
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini
index eb829a9..c654be52 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini
@@ -1,7 +1,8 @@
 [idbobjectstore_batchGetAll_largeValue.tentative.any.html]
   expected:
-    if (flag_specific == "") and (product == "content_shell"): TIMEOUT
-    if flag_specific == "disable-layout-ng": TIMEOUT
+    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
+    if product == "chrome": OK
+    TIMEOUT
   [Get upper/lower excluded]
     expected: [PASS, TIMEOUT]
 
@@ -14,11 +15,15 @@
 
 [idbobjectstore_batchGetAll_largeValue.tentative.any.worker.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
-    if (os == "linux") and (product == "chrome"): OK
+    if (flag_specific == "") and (product == "chrome"): [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": OK
     TIMEOUT
   [Get bound range with maxCount]
     expected: [PASS, TIMEOUT]
 
   [Get bound range]
     expected: [PASS, TIMEOUT]
+
+  [Get upper/lower excluded]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/playback-rate.https.html.ini b/third_party/blink/web_tests/external/wpt/animation-worklet/playback-rate.https.html.ini
index 68cf1f6..6cc1e27 100644
--- a/third_party/blink/web_tests/external/wpt/animation-worklet/playback-rate.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/playback-rate.https.html.ini
@@ -16,7 +16,3 @@
 
   [When playback rate is updated, the underlying effect is properly updated with the current time of its scroll-linked WorkletAnimation and produces correct visual result.]
     expected: FAIL
-
-  [The playback rate set before the animation started playing affects the rate of progress of the current time]
-    expected:
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html.ini b/third_party/blink/web_tests/external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html.ini
index 7aa114e67..6537e95 100644
--- a/third_party/blink/web_tests/external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html.ini
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html.ini
@@ -1,4 +1,3 @@
 [prefetch-header-allowed.html]
   expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): TIMEOUT
-    if os == "win": [OK, TIMEOUT]
+    if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/cookie-store/cookieListItem_attributes.https.any.js.ini b/third_party/blink/web_tests/external/wpt/cookie-store/cookieListItem_attributes.https.any.js.ini
index 3decf2f..035485e0 100644
--- a/third_party/blink/web_tests/external/wpt/cookie-store/cookieListItem_attributes.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/cookie-store/cookieListItem_attributes.https.any.js.ini
@@ -1,6 +1,11 @@
 [cookieListItem_attributes.https.any.serviceworker.html]
+  [CookieListItem - cookieStore.set with expires set to a timestamp 10 years in the future]
+    expected:
+      if os == "win": [PASS, FAIL]
 
-[cookieListItem_attributes.https.any.html]
   [CookieListItem - cookieStore.set with expires set to a Date 10 years in the future]
     expected:
       if os == "win": [PASS, FAIL]
+
+
+[cookieListItem_attributes.https.any.html]
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-cross-origin-policy.https.html.ini b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-cross-origin-policy.https.html.ini
index 4a4603d..1fedefe 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-cross-origin-policy.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-cross-origin-policy.https.html.ini
@@ -1,7 +1,6 @@
 [fedcm-cross-origin-policy.https.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": TIMEOUT
+    if product == "chrome": TIMEOUT
   [Test that COEP policy do not apply to FedCM requests]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
index d272c84..d03446a5 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
@@ -1,7 +1,6 @@
 [fedcm-network-requests.https.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": TIMEOUT
+    if product == "chrome": TIMEOUT
   [nonce is not required in FederatedIdentityProvider.]
     expected:
       if product == "chrome": NOTRUN
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-width-012.xht.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-width-012.xht.ini
new file mode 100644
index 0000000..c7b3705
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/borders/border-width-012.xht.ini
@@ -0,0 +1,3 @@
+[border-width-012.xht]
+  expected:
+    if os == "win": [PASS, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/floats/float-nowrap-4.html.ini b/third_party/blink/web_tests/external/wpt/css/CSS2/floats/float-nowrap-4.html.ini
index 1181379..5b5e8dbb 100644
--- a/third_party/blink/web_tests/external/wpt/css/CSS2/floats/float-nowrap-4.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/floats/float-nowrap-4.html.ini
@@ -1,4 +1,5 @@
 [float-nowrap-4.html]
   expected:
-    if (os == "linux") and (flag_specific == "disable-layout-ng"): PASS
+    if (flag_specific == "") and (os == "win"): [TIMEOUT, CRASH]
+    if flag_specific == "disable-layout-ng": PASS
     CRASH
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/crashtests/iframe-init-crash.html b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/crashtests/iframe-init-crash.html
new file mode 100644
index 0000000..e915c247
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/crashtests/iframe-init-crash.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<audio controls style='container-type: size'></audio>
+<iframe>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/unsupported-axis.html b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/unsupported-axis.html
index caee4bc..308de2f 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/unsupported-axis.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/unsupported-axis.html
@@ -215,3 +215,14 @@
     assert_equals(getComputedStyle(target).getPropertyValue('--not-block-size'), '');
   }, 'not (block-size < 0px)');
 </script>
+
+<style>
+  @container not (orientation) {
+    #target { --not-orientation:true; }
+  }
+</style>
+<script>
+  test(function(t) {
+    assert_equals(getComputedStyle(target).getPropertyValue('--not-orientation'), '');
+  }, 'not (orientation)');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-002.html.ini
index c8f5d5e..4300e380 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-002.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-002.html.ini
@@ -1,2 +1,4 @@
 [subgrid-baseline-002.html]
-  expected: CRASH
+  expected:
+    if os == "win": [TIMEOUT, CRASH]
+    CRASH
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vlr.html.ini
index eb19349..0a5f5745 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vlr.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vlr.html.ini
@@ -1,4 +1,3 @@
 [Initial-letter-breaking-vlr.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html.ini
index 38527a1d..8a8fc7e3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-block-position-drop-under-ruby-tall.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl.html.ini
index a6abb66..28bdb47 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-block-position-margins-vrl.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if product == "chrome": FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall.html.ini
index 4b8cec5..50a3c7cc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall.html.ini
@@ -1,4 +1,4 @@
 [initial-letter-block-position-raise-over-ruby-tall.html]
   expected:
-    if (flag_specific == "") and (product == "chrome"): [PASS, FAIL]
-    if flag_specific == "disable-layout-ng": FAIL
+    if (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
index eede05d..1136475 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-block-position-raise-under-ruby.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-vlr.html.ini
index 1e3e903..984123ce 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-vlr.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-vlr.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-drop-initial-vlr.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
index 497ccbc..bda49d3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-drop-initial.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-vrl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-vrl.html.ini
index a18c546..ff51dd5 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-vrl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-vrl.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-float-001-vrl.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001.html.ini
index 4b45bbf..ae13c19 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-float-001.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-indentation-rtl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-indentation-rtl.html.ini
index 495a53a6..9cd2cdc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-indentation-rtl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-indentation-rtl.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-indentation-rtl.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vlr.html.ini
index add1cab..5a7a7c3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vlr.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raise-initial-vlr.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-raise-initial-vlr.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken.html.ini
index 0c64a2fd..b0631f92 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-raised-sunken-caps-sunken.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-first-line.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-first-line.html.ini
index 56e94a867..7f69acb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-first-line.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-first-line.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-with-first-line.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-inline-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-inline-002.html.ini
deleted file mode 100644
index 84724ce..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-inline-002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[clip-path-inline-002.html]
-  expected:
-    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini b/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
index 266c24e..62f06bd 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
@@ -1,4 +1,4 @@
 [parse-input-arguments-018.https.html]
   expected:
-    if os == "win": PASS
+    if os == "win": [CRASH, TIMEOUT]
     CRASH
diff --git a/third_party/blink/web_tests/external/wpt/css/css-paint-api/registered-property-interpolation-004.https.html.ini b/third_party/blink/web_tests/external/wpt/css/css-paint-api/registered-property-interpolation-004.https.html.ini
new file mode 100644
index 0000000..e52c96f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-paint-api/registered-property-interpolation-004.https.html.ini
@@ -0,0 +1,3 @@
+[registered-property-interpolation-004.https.html]
+  expected:
+    if os == "win": [PASS, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-001.html.ini
deleted file mode 100644
index 83483d7..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-001.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[text-transform-capitalize-001.html]
-  expected:
-    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/clearance-calculations-vrl-004.xht.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/clearance-calculations-vrl-004.xht.ini
new file mode 100644
index 0000000..1b6dddf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/clearance-calculations-vrl-004.xht.ini
@@ -0,0 +1,3 @@
+[clearance-calculations-vrl-004.xht]
+  expected:
+    if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [PASS, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/text-combine-upright-shadow.html.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/text-combine-upright-shadow.html.ini
new file mode 100644
index 0000000..cd761a1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/text-combine-upright-shadow.html.ini
@@ -0,0 +1,3 @@
+[text-combine-upright-shadow.html]
+  expected:
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html.ini b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html.ini
index 536ff3e..d5fe958 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html.ini
@@ -1,75 +1,3 @@
 [scroll-behavior-main-frame-root.html]
   [Main frame with smooth scroll-behavior ; scrollIntoView() with instant behavior]
     expected: FAIL
-
-  [Main frame with auto scroll-behavior ; scrollTo() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): FAIL
-
-  [Main frame with smooth scroll-behavior ; scrollTo() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): FAIL
-
-  [Main frame with smooth scroll-behavior ; scrollBy() with auto behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with auto scroll-behavior ; scrollIntoView() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scroll() with auto behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollTo() with default behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollTo() with auto behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollBy() with default behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): FAIL
-
-  [Main frame with auto scroll-behavior ; scroll() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Set scrollTop to frame with smooth scroll-behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scroll() with default behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scroll() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollBy() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollIntoView() with default behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Set scrollLeft to frame with smooth scroll-behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with smooth scroll-behavior ; scrollIntoView() with auto behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
-
-  [Main frame with auto scroll-behavior ; scrollBy() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): FAIL
-
-  [Main frame with smooth scroll-behavior ; scrollIntoView() with smooth behavior]
-    expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini b/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini
index 5f35e615..63d58fb 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini
@@ -1,4 +1,5 @@
 [ElementInternals-target-element-is-held-strongly.html]
   expected:
-    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
-    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if (flag_specific == "") and (os == "win"): TIMEOUT
+    if flag_specific == "disable-layout-ng": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/dom/traversal/NodeFilter-constants.html.ini b/third_party/blink/web_tests/external/wpt/dom/traversal/NodeFilter-constants.html.ini
new file mode 100644
index 0000000..38e5a24f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/traversal/NodeFilter-constants.html.ini
@@ -0,0 +1,3 @@
+[NodeFilter-constants.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/domxpath/xml_xpath_runner.html.ini b/third_party/blink/web_tests/external/wpt/domxpath/xml_xpath_runner.html.ini
index b9af709d7..d9cf144 100644
--- a/third_party/blink/web_tests/external/wpt/domxpath/xml_xpath_runner.html.ini
+++ b/third_party/blink/web_tests/external/wpt/domxpath/xml_xpath_runner.html.ini
@@ -1,3 +1,3 @@
 [xml_xpath_runner.html]
   expected:
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
+    if flag_specific == "disable-layout-ng": CRASH
diff --git a/third_party/blink/web_tests/external/wpt/editing/other/join-pre-and-other-block.html.ini b/third_party/blink/web_tests/external/wpt/editing/other/join-pre-and-other-block.html.ini
index e46f9160..0c485cc 100644
--- a/third_party/blink/web_tests/external/wpt/editing/other/join-pre-and-other-block.html.ini
+++ b/third_party/blink/web_tests/external/wpt/editing/other/join-pre-and-other-block.html.ini
@@ -36,6 +36,10 @@
 [join-pre-and-other-block.html?method=backspace&block=p]
 
 [join-pre-and-other-block.html?method=select-boundary&block=blockquote]
+  expected: [OK, TIMEOUT]
+  [delete at <blockquote>abc[</blockquote>\\n<pre><b>\]def<br></b>ghi</pre> (with <style>pre { white-space: pre; }</style>)]
+    expected: [PASS, TIMEOUT]
+
 
 [join-pre-and-other-block.html?method=backspace&block=blockquote]
   expected: [OK, TIMEOUT]
@@ -55,17 +59,20 @@
 [join-pre-and-other-block.html?method=forwarddelete&block=blockquote]
   expected: [OK, TIMEOUT]
   [forwarddelete at <blockquote>abc[\]</blockquote><pre><b>def<br></b>ghi</pre> (with <style>pre { white-space: pre; }</style>)]
-    expected: [PASS, TIMEOUT]
+    expected: [PASS, NOTRUN]
 
   [forwarddelete at <blockquote>abc[\]</blockquote>\\n<pre><b>def<br></b>ghi</pre> (with <style>pre { white-space: pre; }</style>)]
     expected: [PASS, NOTRUN]
 
   [forwarddelete at <blockquote>abc[\]</blockquote><pre>\\ndef\\nghi</pre> (with <style>pre { white-space: pre; }</style>)]
-    expected: [PASS, TIMEOUT]
+    expected: [PASS, NOTRUN]
 
   [forwarddelete at <blockquote>abc[\]</blockquote>\\n<pre>\\ndef\\nghi</pre> (with <style>pre { white-space: pre; }</style>)]
     expected: [PASS, NOTRUN]
 
+  [forwarddelete at <blockquote>abc[\]</blockquote>\\n<pre><b>def\\n</b>ghi</pre> (with <style>pre { white-space: pre; }</style>)]
+    expected: [PASS, TIMEOUT]
+
 
 [join-pre-and-other-block.html?method=forwarddelete&block=div]
   expected: [OK, TIMEOUT]
@@ -79,7 +86,7 @@
     expected: [PASS, NOTRUN]
 
   [forwarddelete at <div>abc[\]</div>\\n<pre>\\ndef\\nghi</pre> (with <style>pre { white-space: pre; }</style>)]
-    expected: [PASS, NOTRUN]
+    expected: [PASS, TIMEOUT]
 
   [forwarddelete at <div>abc[\]</div>\\n<pre><b>def\\n</b>ghi</pre> (with <style>pre { white-space: pre; }</style>)]
     expected: [PASS, NOTRUN]
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/image-carousel.html.ini b/third_party/blink/web_tests/external/wpt/element-timing/image-carousel.html.ini
index 3b89847..a0d1c2a 100644
--- a/third_party/blink/web_tests/external/wpt/element-timing/image-carousel.html.ini
+++ b/third_party/blink/web_tests/external/wpt/element-timing/image-carousel.html.ini
@@ -1,4 +1,4 @@
 [image-carousel.html]
   [Entries for elements within an image carousel are dispatched when the elements are redrawn.]
     expected:
-      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.ini b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.ini
index 3053fda..51b4a7b6 100644
--- a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.ini
@@ -1,6 +1,4 @@
 [iso2022jp-encode-form-csiso2022jp.html?3001-4000]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
 
 [iso2022jp-encode-form-csiso2022jp.html?2001-3000]
 
@@ -13,5 +11,7 @@
 [iso2022jp-encode-form-csiso2022jp.html?7001-last]
 
 [iso2022jp-encode-form-csiso2022jp.html?6001-7000]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
 
 [iso2022jp-encode-form-csiso2022jp.html?1001-2000]
diff --git a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html.ini b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html.ini
index 521412a..e8a7100 100644
--- a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html.ini
@@ -3,12 +3,12 @@
 [sjis-decode-ms_kanji.html?4001-5000]
 
 [sjis-decode-ms_kanji.html?3001-4000]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
 
 [sjis-decode-ms_kanji.html?5001-6000]
 
 [sjis-decode-ms_kanji.html?2001-3000]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
 
 [sjis-decode-ms_kanji.html?7001-last]
 
diff --git a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html.ini b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html.ini
index 3b9ccfd..03770ecd 100644
--- a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html.ini
@@ -9,8 +9,6 @@
 [euckr-decode-ksc5601.html?16001-17000]
 
 [euckr-decode-ksc5601.html?9001-10000]
-  expected:
-    if os == "win": [OK, CRASH]
 
 [euckr-decode-ksc5601.html?13001-14000]
 
@@ -23,6 +21,8 @@
 [euckr-decode-ksc5601.html?7001-8000]
 
 [euckr-decode-ksc5601.html?11001-12000]
+  expected:
+    if os == "win": [OK, CRASH]
 
 [euckr-decode-ksc5601.html?14001-15000]
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/basic/keepalive.html.ini b/third_party/blink/web_tests/external/wpt/fetch/api/basic/keepalive.html.ini
index 357820e..d7c7aa2 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/api/basic/keepalive.html.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/api/basic/keepalive.html.ini
@@ -1,4 +1,4 @@
 [keepalive.html]
   [keepalive in onunload in nested frame in another window]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies-redirect.any.js.ini b/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies-redirect.any.js.ini
index 8b48c817..c876095 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies-redirect.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies-redirect.any.js.ini
@@ -1,6 +1,4 @@
 [cors-cookies-redirect.any.worker.html]
-
-[cors-cookies-redirect.any.html]
   [Testing credentials after cross-origin redirection with CORS and no preflight]
     expected:
       if product == "chrome": [PASS, FAIL]
@@ -8,3 +6,13 @@
   [Testing credentials after cross-origin redirection with CORS and preflight]
     expected:
       if product == "chrome": [PASS, FAIL]
+
+
+[cors-cookies-redirect.any.html]
+  [Testing credentials after cross-origin redirection with CORS and no preflight]
+    expected:
+      if product == "chrome": FAIL
+
+  [Testing credentials after cross-origin redirection with CORS and preflight]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/iframe.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/iframe.tentative.https.window.js.ini
index a84192d9..feb27192 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/iframe.tentative.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/iframe.tentative.https.window.js.ini
@@ -1,6 +1,6 @@
 [iframe.tentative.https.window.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [OK, TIMEOUT]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
   [private to local: success.]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
index 184b61d6..fcf7be67 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
@@ -1,12 +1,12 @@
 [service-worker-background-fetch.https.window.html]
   [local to local: success.]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
 
   [private to local: success.]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if product == "chrome": FAIL
 
   [private to private: success.]
     expected:
@@ -15,11 +15,11 @@
   [public to local: success.]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
       if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [public to private: success.]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [public to public: success.]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-fetch.https.window.js.ini b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-fetch.https.window.js.ini
deleted file mode 100644
index eaa7acf65..0000000
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-fetch.https.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[service-worker-fetch.https.window.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/fetch/stale-while-revalidate/stale-css.html.ini b/third_party/blink/web_tests/external/wpt/fetch/stale-while-revalidate/stale-css.html.ini
index d08487a8..b381a10 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/stale-while-revalidate/stale-css.html.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/stale-while-revalidate/stale-css.html.ini
@@ -1,4 +1,5 @@
 [stale-css.html]
   [Cache returns stale resource]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/fetch/stale-while-revalidate/stale-script.html.ini b/third_party/blink/web_tests/external/wpt/fetch/stale-while-revalidate/stale-script.html.ini
new file mode 100644
index 0000000..095d0af
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/stale-while-revalidate/stale-script.html.ini
@@ -0,0 +1,3 @@
+[stale-script.html]
+  expected:
+    if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini b/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
index cd78228..c8cb0f97 100644
--- a/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
+++ b/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
@@ -1,4 +1,4 @@
 [focus-already-focused-iframe-same-site.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [TIMEOUT, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
     TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/focus/iframe-contentwindow-focus-with-different-site-intermediate-frame.html.ini b/third_party/blink/web_tests/external/wpt/focus/iframe-contentwindow-focus-with-different-site-intermediate-frame.html.ini
index b4691ae..0a09915 100644
--- a/third_party/blink/web_tests/external/wpt/focus/iframe-contentwindow-focus-with-different-site-intermediate-frame.html.ini
+++ b/third_party/blink/web_tests/external/wpt/focus/iframe-contentwindow-focus-with-different-site-intermediate-frame.html.ini
@@ -1,5 +1,3 @@
 [iframe-contentwindow-focus-with-different-site-intermediate-frame.html]
-  expected:
-    if product == "chrome": ERROR
   [Check result]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/focus/iframe-focuses-parent-different-site.html.ini b/third_party/blink/web_tests/external/wpt/focus/iframe-focuses-parent-different-site.html.ini
index 78cd2ff..3b3149b 100644
--- a/third_party/blink/web_tests/external/wpt/focus/iframe-focuses-parent-different-site.html.ini
+++ b/third_party/blink/web_tests/external/wpt/focus/iframe-focuses-parent-different-site.html.ini
@@ -1,3 +1,3 @@
 [iframe-focuses-parent-different-site.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
diff --git a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
index 7146e6d..b0a79ce 100644
--- a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
@@ -25,10 +25,6 @@
 [embedding.tentative.https.window.html?6-6]
 
 [embedding.tentative.https.window.html?7-7]
-  [COOP:same-origin + COEP:require-corp embeds same-origin credentialless iframe]
-    expected:
-      if os == "win": [PASS, FAIL]
-
 
 [embedding.tentative.https.window.html?10-10]
 
@@ -39,9 +35,11 @@
 [embedding.tentative.https.window.html?4-4]
 
 [embedding.tentative.https.window.html?8-8]
+
+[embedding.tentative.https.window.html?3-3]
   expected:
     if product == "chrome": [OK, ERROR]
 
-[embedding.tentative.https.window.html?3-3]
-
 [embedding.tentative.https.window.html?9-9]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/back-forward-cache/eligibility/broadcast-channel.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/back-forward-cache/eligibility/broadcast-channel.html.ini
index d92b7efb..e423a5b6 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/back-forward-cache/eligibility/broadcast-channel.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/back-forward-cache/eligibility/broadcast-channel.html.ini
@@ -1,9 +1,8 @@
 [broadcast-channel.html]
-  expected:
-    if os == "win": [OK, TIMEOUT]
   [Eligibility (BroadcastChannel)]
     expected: PRECONDITION_FAILED
 
   [Eligibility (BroadcastChannel closed in the pagehide event)]
     expected:
-      if (os == "linux") and (product == "chrome"): PRECONDITION_FAILED
+      if (product == "content_shell") and (os == "win"): [PASS, PRECONDITION_FAILED]
+      if product == "chrome": PRECONDITION_FAILED
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
index 2456034..dcb75058 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
@@ -1,8 +1,4 @@
 [same-document-traversal-cross-document-traversal.html]
-  expected:
-    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
-    if flag_specific == "disable-site-isolation-trials": TIMEOUT
-    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [traversals in the same (back) direction: queued up]
     expected: [PASS, TIMEOUT]
 
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
index 1d3cada0..264d685 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
@@ -1,8 +1,11 @@
 [location-protocol-setter-non-broken.html]
   [Set HTTP URL frame location.protocol to data]
-    expected: FAIL
+    expected:
+      if os == "win": PASS
+      FAIL
 
   [Set data URL frame location.protocol to data]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (flag_specific == "") and (os == "win"): PASS
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-port.sub.https.html.ini
index f5c78443..5383b4d 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-port.sub.https.html.ini
@@ -1,10 +1,10 @@
 [parent-yes-child-no-port.sub.https.html]
   [setting document.domain must not give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
index 4df55d70..93a8eb6 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
@@ -1,10 +1,9 @@
 [parent-yes-child-no-subdomain.sub.https.html]
   [setting document.domain must not give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
index 1fe7649..5f428d85c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
@@ -1,4 +1,5 @@
 [parent-yes-child-yes-port.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-same.sub.https.html.ini
index e3a89c0f..2b7fa4f 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-same.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-same.sub.https.html.ini
@@ -1,8 +1,10 @@
 [parent-yes-child-yes-same.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [child: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
index 9be6e053..08e1ae5 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
@@ -10,3 +10,11 @@
       if (flag_specific == "") and (product == "chrome"): PASS
       if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
+
+  [child1: originAgentCluster must equal false]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+
+  [child2: originAgentCluster must equal false]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
index 183bd1b..0683058 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
@@ -7,4 +7,4 @@
 
   [parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini
index 8ecab74..677d865 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini
@@ -1,21 +1,22 @@
 [parent-no-child1-yes-subdomain-child2-no-port.sub.https.html]
   [child1: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
 
   [child2 to child1: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child1 to child2: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [parent: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [Parent to child2: setting document.domain must give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini
index 1d37b55..cab93f6 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.ini
@@ -16,8 +16,8 @@
 
   [child2: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
 
   [child1: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini
index f01d1fb..88e01c2 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html.ini
@@ -10,3 +10,15 @@
       if (flag_specific == "") and (product == "chrome"): PASS
       if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
+
+  [parent: originAgentCluster must equal true]
+    expected:
+      if product == "chrome": FAIL
+
+  [Parent to child1: setting document.domain must not give sync access]
+    expected:
+      if product == "chrome": FAIL
+
+  [Parent to child2: setting document.domain must not give sync access]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
index 86a8d77f..8349778 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
@@ -1,10 +1,12 @@
 [parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html]
   [Parent to child1: setting document.domain must not give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+
+  [child1: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini
index ec6bf68..c238adf 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.ini
@@ -5,16 +5,16 @@
 
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if product == "chrome": FAIL
 
   [child1: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child1 to child2: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child2 to child1: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
index 71b884a3..6ede574 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
@@ -1,7 +1,8 @@
 [parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
       if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child1: originAgentCluster must equal true]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.ini
new file mode 100644
index 0000000..1702c50
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.ini
@@ -0,0 +1,16 @@
+[parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html]
+  [child1 to child2: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [child2 to child1: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [child1: originAgentCluster must equal true]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [child2: originAgentCluster must equal true]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
index 37913c2..5d32ec5 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
@@ -1,9 +1,10 @@
 [parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
 
   [child1: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
index 94dbfbd..39fb46a 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
@@ -1,9 +1,8 @@
 [document-domain.sub.https.html]
   [Setting document.domain must not change same-originness]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
 
   [Having an origin-keyed subdomain child try to set document.domain must not change the document.domain value it sees]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html.ini
index 14cb1e6c..3b19d0f 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html.ini
@@ -1,4 +1,5 @@
 [sandboxed-same-origin-iframe-yes.https.html]
   [originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini
new file mode 100644
index 0000000..ec2a502
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini
@@ -0,0 +1,12 @@
+[parent-no-1-no-same-2-yes-port.sub.https.html]
+  [before parent: originAgentCluster must equal false]
+    expected:
+      if os == "win": [PASS, FAIL]
+
+  [before child: originAgentCluster must equal false]
+    expected:
+      if os == "win": [PASS, FAIL]
+
+  [after parent: originAgentCluster must equal false]
+    expected:
+      if os == "win": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
index 5d7ca4c..20a6fc5 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
@@ -1,22 +1,22 @@
 [parent-no-1-no-same-2-yes-subdomain.sub.https.html]
   [before parent: originAgentCluster must equal false]
     expected:
-      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if (os == "linux") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
-      if os == "win": FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-layout-ng": FAIL
 
   [before child: originAgentCluster must equal false]
     expected:
-      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if (os == "linux") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
-      if os == "win": FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-layout-ng": FAIL
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if (os == "linux") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
-      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if os == "win": FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-layout-ng": FAIL
 
   [after child: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
index ab1164f..27358051 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
@@ -1,30 +1,20 @@
 [parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html]
   [Before: parent to child: setting document.domain must give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": PASS
+      if (flag_specific == "") and (product == "chrome"): PASS
       FAIL
 
   [After: parent to child: setting document.domain must give sync access]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": PASS
+      if (flag_specific == "") and (product == "chrome"): PASS
       FAIL
 
   [before parent: originAgentCluster must equal false]
     expected:
       if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [after parent: originAgentCluster must equal false]
     expected:
       if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [after child: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [before child: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
index d529cf9..408c430 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
@@ -7,12 +7,12 @@
 
   [before child: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
 
   [before parent: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
index 29817d3c..cb3c21c0 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
@@ -4,3 +4,15 @@
       if (flag_specific == "") and (product == "chrome"): PASS
       if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
+
+  [before parent: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [after parent: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [before child: originAgentCluster must equal true]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
index 5d4c18e3..cf2645dc 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
@@ -1,16 +1,20 @@
 [parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html]
   [before parent: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
 
   [before child: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
 
   [after child: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
index 0efd664..07f864d 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
@@ -1,16 +1,17 @@
 [parent-yes-1-no-same-2-no-subdomain.sub.https.html]
   [before parent: originAgentCluster must equal true]
     expected:
-      if product == "chrome": FAIL
+      if os == "win": [PASS, FAIL]
 
   [after parent: originAgentCluster must equal true]
     expected:
-      if product == "chrome": FAIL
+      if os == "win": [PASS, FAIL]
 
   [before child: originAgentCluster must equal true]
     expected:
-      if product == "chrome": FAIL
+      if os == "win": [PASS, FAIL]
 
-  [After: parent to child: setting document.domain must not give sync access]
+  [after child: originAgentCluster must equal false]
     expected:
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-port.sub.https.html.ini
deleted file mode 100644
index 8d87ab4..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-port.sub.https.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[opener-no-openee-yes-port.sub.https.html]
-  [opener: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini
new file mode 100644
index 0000000..0f5a12b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini
@@ -0,0 +1,10 @@
+[opener-no-openee-yes-same.sub.https.html]
+  [opener: originAgentCluster must equal false]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [openee: originAgentCluster must equal false]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
index 6cfbabf..ee2567b 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
@@ -1,10 +1,8 @@
 [opener-yes-openee-no-port.sub.https.html]
   [setting document.domain must not give sync access]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [opener: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
index e143134..9f1c64b9 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
@@ -1,5 +1,4 @@
 [opener-yes-openee-yes-port.sub.https.html]
   [opener: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini
new file mode 100644
index 0000000..34df7b4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini
@@ -0,0 +1,8 @@
+[opener-yes-openee-yes-same.sub.https.html]
+  [opener: originAgentCluster must equal true]
+    expected:
+      if product == "chrome": FAIL
+
+  [openee: originAgentCluster must equal true]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
index d0fc030..37cb728 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
@@ -5,5 +5,4 @@
 
   [opener: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/removing-iframes.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/removing-iframes.sub.https.html.ini
index d943b31..cb65787 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/removing-iframes.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/removing-iframes.sub.https.html.ini
@@ -13,16 +13,20 @@
 
   [Before: setting document.domain must not give sync access]
     expected:
+      if (flag_specific == "") and (product == "chrome"): FAIL
       if flag_specific == "disable-site-isolation-trials": FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
+      if (flag_specific == "") and (product == "chrome"): FAIL
       if flag_specific == "disable-site-isolation-trials": FAIL
 
   [Parent to child2: setting document.domain must not give sync access]
     expected:
+      if (flag_specific == "") and (product == "chrome"): FAIL
       if flag_specific == "disable-site-isolation-trials": FAIL
 
   [Parent to child3: setting document.domain must not give sync access]
     expected:
+      if (flag_specific == "") and (product == "chrome"): FAIL
       if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini
deleted file mode 100644
index 485b254..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-[open-features-is-popup-condition.html?position]
-
-[open-features-is-popup-condition.html?single-2]
-
-[open-features-is-popup-condition.html?single-1]
-  expected:
-    if product == "chrome": ERROR
-
-[open-features-is-popup-condition.html?combination]
-  expected:
-    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-width-height.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-width-height.html.ini
deleted file mode 100644
index 25200b9..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-width-height.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[open-features-tokenization-width-height.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
index ababd53..d1fa6d1 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
@@ -6,4 +6,4 @@
 
 [window-open-noopener.html?indexed]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html.ini
index 6231b72d..9038f753 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html.ini
@@ -1,3 +1,3 @@
 [choose-_blank-002.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-video.html.ini b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-video.html.ini
index 5ce8f6d..decdec2 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-video.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-video.html.ini
@@ -65,10 +65,6 @@
   [Rec2020-222000000, Context display-p3, ImageData display-p3, scaleImage=true]
     expected: FAIL
 
-  [sRGB-FF0100, Context srgb, ImageData srgb, scaleImage=false]
+  [sRGB-FF0100, Context display-p3, ImageData srgb, scaleImage=true]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
-
-  [sRGB-BB0000, Context srgb, ImageData srgb, scaleImage=false]
-    expected:
-      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
index 84c7205f..8640bb99 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
@@ -1,11 +1,13 @@
 [offscreencanvas.resize.html]
   [Verify that resizing an OffscreenCanvas with a webgl context propagates the new size to its placeholder canvas asynchronously.]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [FAIL, PASS]
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [Verify that drawImage uses the size of the frame as the intinsic size of a placeholder canvas.]
     expected:
-      if flag_specific == "disable-site-isolation-trials": PASS
+      if flag_specific == "disable-site-isolation-trials": [FAIL, PASS]
       FAIL
 
   [Verify that resizing an OffscreenCanvas with a 2d context propagates the new size to its placeholder canvas asynchronously.]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/link.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/link.https.window.js.ini
index efe1173..1a3ff5b 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/link.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/link.https.window.js.ini
@@ -1,2 +1,3 @@
 [link.https.window.html]
-  expected: [OK, ERROR]
+  expected:
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html.ini
new file mode 100644
index 0000000..06c876b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html.ini
@@ -0,0 +1,3 @@
+[coep-redirect.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox-cuts-opener.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox-cuts-opener.https.html.ini
index cf83ddf..c873fb6 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox-cuts-opener.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coop-sandbox-cuts-opener.https.html.ini
@@ -1,3 +1,4 @@
 [coop-sandbox-cuts-opener.https.html]
-  expected:
-    if os == "win": [OK, TIMEOUT]
+  [<iframe sandbox="allow-popups allow-scripts"> Sandboxed Cross-Origin-Opener-Policy popup should cut the opener if necessary]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-repeated.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-repeated.https.html.ini
new file mode 100644
index 0000000..6c6d744
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-repeated.https.html.ini
@@ -0,0 +1,3 @@
+[header-parsing-repeated.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html.ini
new file mode 100644
index 0000000..6095039
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html.ini
@@ -0,0 +1,3 @@
+[popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini
index a39425e..8eb49f5 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini
@@ -1,3 +1,3 @@
 [popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini
index 22875a6..c563da9 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini
@@ -16,4 +16,4 @@
 
 [iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html?9-last]
   expected:
-    if product == "chrome": [OK, CRASH]
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
index cf64fdc..223c26b 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
@@ -3,10 +3,12 @@
     if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-same-origin.https.html?5-6]
+  expected:
+    if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-same-origin.https.html?9-last]
   expected:
-    if product == "chrome": [ERROR, OK]
+    if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-same-origin.https.html?7-8]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
index 872be04..8eec163 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
@@ -11,8 +11,6 @@
     if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-unsafe-none.https.html?9-last]
-  expected:
-    if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-unsafe-none.https.html?3-4]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
index 57821696..3e09c28 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
@@ -4,7 +4,7 @@
 
 [iframe-popup-unsafe-none-to-same-origin.https.html?9-last]
   expected:
-    if product == "chrome": [OK, CRASH]
+    if product == "chrome": [ERROR, OK]
 
 [iframe-popup-unsafe-none-to-same-origin.https.html?7-8]
   expected:
@@ -16,4 +16,4 @@
 
 [iframe-popup-unsafe-none-to-same-origin.https.html?5-6]
   expected:
-    if product == "chrome": [ERROR, CRASH]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html.ini
index 3deb888f..392bc70 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html.ini
@@ -11,6 +11,8 @@
     if product == "chrome": ERROR
 
 [iframe-popup-unsafe-none-to-unsafe-none.https.html?9-last]
+  expected:
+    if product == "chrome": [ERROR, OK]
 
 [iframe-popup-unsafe-none-to-unsafe-none.https.html?1-2]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
index 808835a..e3e0f9d7b 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
@@ -4,7 +4,7 @@
 
 [javascript-url.https.html?3-4]
   expected:
-    if product == "chrome": [ERROR, CRASH]
+    if product == "chrome": ERROR
 
 [javascript-url.https.html?11-12]
   expected:
@@ -12,13 +12,15 @@
 
 [javascript-url.https.html?13-14]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [javascript-url.https.html?15-16]
   expected:
     if product == "chrome": ERROR
 
 [javascript-url.https.html?17-last]
+  expected:
+    if product == "chrome": ERROR
 
 [javascript-url.https.html?5-6]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini
deleted file mode 100644
index bfc9a64..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-redirect-same-origin-allow-popups.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.ini
new file mode 100644
index 0000000..ddd028e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html.ini
@@ -0,0 +1,3 @@
+[popup-same-origin-allow-popups-with-cross-origin.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html.ini
new file mode 100644
index 0000000..4015d9d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html.ini
@@ -0,0 +1,3 @@
+[popup-same-origin-allow-popups-with-same-site.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html.ini
index 5edb38c..21a59714 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html.ini
@@ -1,3 +1,3 @@
 [popup-same-origin-with-cross-origin.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini
new file mode 100644
index 0000000..ef3655a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini
@@ -0,0 +1,3 @@
+[popup-same-origin-with-same-site.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html.ini
index 1693ee1..cc8ffe2 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html.ini
@@ -1,3 +1,3 @@
 [popup-unsafe-none-with-cross-origin.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html.ini
new file mode 100644
index 0000000..604de218
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html.ini
@@ -0,0 +1,3 @@
+[popup-unsafe-none-with-same-site.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html.ini
index 59258e97..4ca363c7 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html.ini
@@ -1,3 +1,10 @@
 [access-from-coop-page-to-openee_coop-ro.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [access-from-coop-page-to-openee, same-origin + redirect]
+    expected:
+      if product == "chrome": FAIL
+
+  [access-from-coop-page-to-openee, same-origin]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro_cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro_cross-origin.https.html.ini
index e85ff72..c525d52 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro_cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro_cross-origin.https.html.ini
@@ -1,10 +1,3 @@
 [access-from-coop-page-to-openee_coop-ro_cross-origin.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [access-from-coop-page-to-openee, cross-origin + redirect]
-    expected:
-      if product == "chrome": FAIL
-
-  [access-from-coop-page-to-openee, cross-origin]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini
index c12963c3..a07396ec2 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini
@@ -1,4 +1,6 @@
 [access-to-coop-page-from-openee_coop-ro_cross-origin.https.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [access-to-coop-page-from-openee, cross-origin]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro.https.html.ini
index 12463d2..22693c3 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro.https.html.ini
@@ -1,3 +1,6 @@
 [access-to-coop-page-from-other_coop-ro.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [access-to-coop-page-from-other (COOP-RO)]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-focus.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-focus.https.html.ini
index 2db32f1e..cdb2ab4 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-focus.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-focus.https.html.ini
@@ -1,3 +1,8 @@
 [property-focus.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [same-origin > w => w.focus()]
+    expected:
+      if product == "chrome": FAIL
+
+  [cross-origin > w => w.focus()]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html.ini
index 3435757a..adac8732 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html.ini
@@ -1,3 +1,8 @@
 [property-length.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [same-origin > w => w.length]
+    expected:
+      if product == "chrome": FAIL
+
+  [cross-origin > w => w.length]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html.ini
index e016cf9..1ee952d 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html.ini
@@ -1,3 +1,8 @@
 [property-location-set.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [cross-origin > w => w.location = "#"]
+    expected:
+      if product == "chrome": FAIL
+
+  [same-origin > w => w.location = "#"]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-named-getter.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-named-getter.https.html.ini
new file mode 100644
index 0000000..d654a715
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-named-getter.https.html.ini
@@ -0,0 +1,3 @@
+[property-named-getter.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
index e053a92..76173f05 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
@@ -1,10 +1,3 @@
 [property-opener-get.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [cross-origin > w => w.opener]
-    expected:
-      if product == "chrome": FAIL
-
-  [same-origin > w => w.opener]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html.ini
index 943353e..ab4e882 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html.ini
@@ -1,4 +1,6 @@
 [property-postmessage-1.https.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [same-origin > w => w.postMessage("", "")]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
index 615e9be3..e3a7586a 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
@@ -1,10 +1,3 @@
 [property-top.https.html]
   expected:
-    if (os == "linux") and (product == "chrome"): [OK, ERROR]
-  [cross-origin > w => w.top]
-    expected:
-      if product == "chrome": FAIL
-
-  [same-origin > w => w.top]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
index 46d3e245..a842eff 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
@@ -1,3 +1,8 @@
 [report-to-both_coop-ro.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [Access from openee]
+    expected:
+      if product == "chrome": FAIL
+
+  [Access from opener]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
index 6f1d038e..18bb1f2 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-same-origin-allow-popups.https.html.ini
@@ -1,10 +1,3 @@
 [reporting-redirect-with-same-origin-allow-popups.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [Cross origin openee redirected to same-origin with same-origin-allow-popups]
-    expected:
-      if product == "chrome": FAIL
-
-  [Same origin openee redirected to same-origin with same-origin-allow-popups]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-unsafe-none.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-unsafe-none.https.html.ini
index 1623940..7b11492b 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-unsafe-none.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/reporting-redirect-with-unsafe-none.https.html.ini
@@ -1,4 +1,6 @@
 [reporting-redirect-with-unsafe-none.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Cross origin openee redirected to same-origin with unsafe-none]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini
new file mode 100644
index 0000000..950ed5a35
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini
@@ -0,0 +1,3 @@
+[resource-popup.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
index f8a499ba..da58f27 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
@@ -15,3 +15,5 @@
     if product == "chrome": ERROR
 
 [iframe-popup-to-so.https.html?9-last]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html.ini
index f8661d5..dd70f03 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html.ini
@@ -15,3 +15,5 @@
     if product == "chrome": ERROR
 
 [iframe-popup-to-soap.https.html?9-last]
+  expected:
+    if product == "chrome": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-un.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-un.https.html.ini
index 275706e..9afd7b3f 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-un.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-un.https.html.ini
@@ -19,6 +19,8 @@
 
 
 [iframe-popup-to-un.https.html?9-last]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [COOP: restrict-properties to popup COOP: unsafe-none via an iframe, with cross origin iframe, cross origin popup with window_open]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
index f3681f2..4f6dc5095 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
@@ -9,8 +9,6 @@
 
 
 [iframe-popup.https.html?9-last]
-  expected:
-    if product == "chrome": ERROR
   [COOP: restrict-properties to popup COOP: restrict-properties via an iframe, with cross origin iframe, cross origin popup with window_open]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-so.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-so.https.html.ini
deleted file mode 100644
index 81084dfe..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-so.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-so.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-soap.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-soap.https.html.ini
index d4cfb80..edddc8e 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-soap.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-soap.https.html.ini
@@ -1,6 +1,6 @@
 [popup-soap.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
   [SAME_ORIGIN popup with coop restrict-properties]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html.ini
index 5e23173a..a2bc292 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html.ini
@@ -1,4 +1,6 @@
 [popup-with-same-origin.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Same-origin popup with coop restrict-properties]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/documents/resource-metadata-management/document-cookie.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/documents/resource-metadata-management/document-cookie.html.ini
index 4bbf824..b9b8e1df 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/documents/resource-metadata-management/document-cookie.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/dom/documents/resource-metadata-management/document-cookie.html.ini
@@ -4,12 +4,12 @@
 
   [document.cookie 1]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [document has no cookie]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [document.cookie]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/parser-inserted-async-script.tentative.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/parser-inserted-async-script.tentative.html.ini
new file mode 100644
index 0000000..632b0b9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/parser-inserted-async-script.tentative.html.ini
@@ -0,0 +1,4 @@
+[parser-inserted-async-script.tentative.html]
+  [Rendering is blocked before render-blocking resources are loaded]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html.ini
deleted file mode 100644
index 1c33dce5..0000000
--- a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[remove-attr-script-keeps-blocking.tentative.html]
-  [Rendering is blocked before render-blocking resources are loaded]
-    expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
index 782dea7..832554d 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
@@ -1,5 +1,3 @@
 [resource-selection-invoke-audio-constructor.html]
   [invoking resource selection with new Audio(src)]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): PASS
-      FAIL
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html.ini
index 0d35b24d..98a26c77 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html.ini
@@ -1,3 +1,6 @@
 [resource-selection-invoke-insert-source-not-in-document.html]
   [invoking resource selection by inserting <source> in video not in a document]
-    expected: FAIL
+    expected:
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
index 5e49a00..b9e4785 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
@@ -1,3 +1,5 @@
 [resource-selection-invoke-insert-source.html]
   [invoking resource selection by inserting <source>]
-    expected: FAIL
+    expected:
+      if flag_specific == "disable-site-isolation-trials": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini
index e889ab7..625313ce 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini
@@ -1,3 +1,6 @@
 [resource-selection-invoke-pause-networkState.html]
   [NOT invoking resource selection with pause() when networkState is not NETWORK_EMPTY]
-    expected: FAIL
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): PASS
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html.ini
index c347625..33e2bbb 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html.ini
@@ -1,5 +1,3 @@
 [resource-selection-invoke-remove-from-document-networkState.html]
   [NOT invoking resource selection with implicit pause() when networkState is not NETWORK_EMPTY]
-    expected:
-      if os == "win": PASS
-      FAIL
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini
index 9d0eb977..d46d8e2 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini
@@ -1,5 +1,4 @@
 [resource-selection-invoke-remove-src.html]
   [NOT invoking media load or resource selection when removing the src attribute]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html.ini
index c0581652..5ae5fd0 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html.ini
@@ -1,3 +1,6 @@
 [resource-selection-invoke-set-src.html]
   [invoking load by setting src]
-    expected: FAIL
+    expected:
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini
index 6bcd804..d59d9c4 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini
@@ -1,4 +1,5 @@
 [track-cue-rendering-after-controls-removed.html]
   expected:
-    if (flag_specific == "") and (os == "win"): FAIL
-    if flag_specific == "disable-site-isolation-trials": FAIL
+    if (flag_specific == "") and (product == "chrome"): PASS
+    if flag_specific == "disable-layout-ng": PASS
+    FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.html.ini
index d445bb82..b07dfb0 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.html.ini
@@ -1,4 +1,4 @@
 [toBlob-cross-realm-callback-report-exception.html]
   [toBlob() reports the exception from its callback in the callback's global object]
     expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if (os == "linux") and (product == "chrome"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
index b0a68eb..4f22930 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
@@ -1,4 +1,3 @@
 [sandbox-top-navigation-child-special-cases.tentative.sub.window.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): TIMEOUT
     if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
index ee2b086..ded39f6 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
@@ -1,3 +1,3 @@
 [multipart-formdata.window.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-base-target.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-base-target.html.ini
deleted file mode 100644
index ec6f83c..0000000
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-base-target.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[rel-base-target.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-form-target.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-form-target.html.ini
new file mode 100644
index 0000000..12a54577
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-form-target.html.ini
@@ -0,0 +1,3 @@
+[rel-form-target.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
index 62d88ea7..6da6358 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
@@ -1,5 +1,2 @@
 [selectmenu-form-state-restore.tentative.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): OK
-    if flag_specific == "disable-layout-ng": OK
-    ERROR
+  expected: ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.js.ini
index b9bd2a8..e49c667e 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.js.ini
@@ -1,8 +1,11 @@
 [activation-behavior.window.html]
   [<area> that is not connected should not be followed]
-    expected: FAIL
+    expected:
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if os == "win": PASS
+      FAIL
 
   [<a> that is not connected should be followed]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): [PASS, FAIL]
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini
index a48a9a7..39ffbb0 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini
@@ -1,6 +1,4 @@
 [reload.window.html]
-  expected:
-    if flag_specific == "disable-layout-ng": CRASH
-    TIMEOUT
+  expected: TIMEOUT
   [Reloading a document.open()'d page should reload the URL of the entry realm's responsible document]
     expected: TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini b/third_party/blink/web_tests/external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini
deleted file mode 100644
index 089911c7..0000000
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[queue-microtask-exceptions.any.serviceworker.html]
-
-[queue-microtask-exceptions.any.sharedworker.html]
-
-[queue-microtask-exceptions.any.html]
-
-[queue-microtask-exceptions.any.worker.html]
-  expected:
-    if product == "chrome": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.js.ini b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.js.ini
index 221d421..d1bc92f 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.js.ini
@@ -1,6 +1,6 @@
 [fully_active_document.window.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, CRASH]
+    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): CRASH
     if product == "chrome": ERROR
   [Tasks for documents that are not fully active are stored, and run when the documents becomes fully-active]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js.ini b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js.ini
index 4160c845..702bf536 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js.ini
@@ -2,4 +2,4 @@
 
 [negative-settimeout.any.worker.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.ini b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.ini
index 6f363c1..2e5bbac 100644
--- a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.ini
@@ -14,3 +14,6 @@
 
   [Permissions-Policy idle-detection=* explicity set by top-level frame allows workers in cross-origin iframes.]
     expected: NOTRUN
+
+  [Inherited header permissions policy allows dedicated workers.]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini b/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
index 667aadcf..6b6492c 100644
--- a/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
@@ -1,8 +1,4 @@
 [webtransport-h3.https.sub.any.worker.html]
-  [WebTransport server should be running and should handle a bidirectional stream]
-    expected:
-      if os == "win": FAIL
-
 
 [webtransport-h3.https.sub.any.serviceworker.html]
   [WebTransport server should be running and should handle a bidirectional stream]
@@ -11,9 +7,8 @@
 
 
 [webtransport-h3.https.sub.any.sharedworker.html]
+
+[webtransport-h3.https.sub.any.html]
   [WebTransport server should be running and should handle a bidirectional stream]
     expected:
       if os == "win": FAIL
-
-
-[webtransport-h3.https.sub.any.html]
diff --git a/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini b/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
index 96433ce..d1a46ba 100644
--- a/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
@@ -1,9 +1,21 @@
 [cross-origin-iframe.sub.html]
   [topDocument.scrollingElement.scrollTop = 200]
     expected:
-      if (os == "linux") and (flag_specific == "") and (product == "chrome"): FAIL
-      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): FAIL
+      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
+      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): PASS
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      FAIL
 
   [topDocument.scrollingElement.scrollTop = 100]
     expected:
-      if flag_specific == "disable-layout-ng": FAIL
+      if os == "win": [FAIL, PASS]
+
+  [First rAF]
+    expected:
+      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [iframeDocument.scrollingElement.scrollTop = 250]
+    expected:
+      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
index 78cff02..8f534d54 100644
--- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
+++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
@@ -1,3 +1,5 @@
 [first-paint-equals-lcp-text.html]
   [FCP and LCP are the same when there is a single text element in the page.]
-    expected: FAIL
+    expected:
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/non-tao-image-load-before-fcp-render-at-fcp.tentative.html.ini b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/non-tao-image-load-before-fcp-render-at-fcp.tentative.html.ini
index 844f5b3f..0cc5e07 100644
--- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/non-tao-image-load-before-fcp-render-at-fcp.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/non-tao-image-load-before-fcp-render-at-fcp.tentative.html.ini
@@ -1,5 +1,3 @@
 [non-tao-image-load-before-fcp-render-at-fcp.tentative.html]
   [Non-Tao Image Load Before LCP and Render at the Same Time of FCP.]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": PASS
-      FAIL
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/404-with-early-hints.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/404-with-early-hints.h2.window.js.ini
index 029bd47..e965035 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/404-with-early-hints.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/404-with-early-hints.h2.window.js.ini
@@ -1,4 +1,5 @@
 [404-with-early-hints.h2.window.html]
   expected:
+    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [ERROR, CRASH]
     if product == "chrome": OK
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
index e09dbe0..d55450e 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
@@ -1,4 +1,4 @@
 [csp-early-hints-absent-final-absent.h2.window.html]
   expected:
-    if product == "chrome": OK
+    if product == "chrome": [OK, ERROR]
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-allowed.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-allowed.h2.window.js.ini
index c384e96..7de5e40c 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-allowed.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-allowed.h2.window.js.ini
@@ -1,4 +1,2 @@
 [csp-early-hints-absent-final-allowed.h2.window.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
-    ERROR
+  expected: ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-allowed-final-absent.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-allowed-final-absent.h2.window.js.ini
index c53530f1..e5500a1 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-allowed-final-absent.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-allowed-final-absent.h2.window.js.ini
@@ -1,4 +1,2 @@
 [csp-early-hints-allowed-final-absent.h2.window.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
-    ERROR
+  expected: ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/multiple-early-hints-responses.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/multiple-early-hints-responses.h2.window.js.ini
index caefadd..885ec286 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/multiple-early-hints-responses.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/multiple-early-hints-responses.h2.window.js.ini
@@ -1,2 +1,4 @@
 [multiple-early-hints-responses.h2.window.html]
-  expected: ERROR
+  expected:
+    if product == "chrome": OK
+    ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/preload-without-csp-document-disallow.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/preload-without-csp-document-disallow.h2.window.js.ini
index acb504f..f3dd853 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/preload-without-csp-document-disallow.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/preload-without-csp-document-disallow.h2.window.js.ini
@@ -1,4 +1,4 @@
 [preload-without-csp-document-disallow.h2.window.html]
   expected:
-    if product == "chrome": OK
+    if product == "chrome": [ERROR, OK]
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin-between-early-hints.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin-between-early-hints.h2.window.js.ini
index 4189cc62..66bceec 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin-between-early-hints.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin-between-early-hints.h2.window.js.ini
@@ -1,4 +1,4 @@
 [redirect-same-origin-between-early-hints.h2.window.html]
   expected:
-    if product == "chrome": [ERROR, OK]
+    if product == "chrome": OK
     ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin.h2.window.js.ini
index 0c8859c..767a4707 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/redirect-same-origin.h2.window.js.ini
@@ -1,4 +1,6 @@
 [redirect-same-origin.h2.window.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": OK
     ERROR
+  [Redirect to the same origin keeps early hints preload]
+    expected: [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html.ini b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html.ini
new file mode 100644
index 0000000..826bfe44
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html.ini
@@ -0,0 +1,4 @@
+[legacy-mstyle-attributes.html]
+  [Legacy mstyle attributes do not apply to mo]
+    expected:
+      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html.ini b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html.ini
new file mode 100644
index 0000000..f0fa72f4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html.ini
@@ -0,0 +1,3 @@
+[operator-dictionary-arabic-002.html]
+  expected:
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini b/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
index 1cf60a5..e9e2a32 100644
--- a/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
+++ b/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
@@ -4,6 +4,4 @@
 
   [Media tracks must be removed when the SourceBuffer is removed from the MediaSource]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "win"): FAIL
-      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "win"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini b/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
index 475cf46..3627867 100644
--- a/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
+++ b/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
@@ -1,8 +1,5 @@
 [mediasource-duration.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "chrome"): OK
-    if (flag_specific == "") and (os == "win"): OK
+    if (os == "linux") and (product == "chrome"): [OK, ERROR]
+    if os == "win": OK
     ERROR
-  [Test seek starts on duration truncation below currentTime]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data.https.html.ini b/third_party/blink/web_tests/external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data.https.html.ini
new file mode 100644
index 0000000..6419809
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data.https.html.ini
@@ -0,0 +1,22 @@
+[sharedworker-import-data.https.html]
+  expected:
+    if product == "chrome": [OK, TIMEOUT]
+  [Mixed-Content: Expects blocked for sharedworker-import-data to cross-http origin and no-redirect redirection from https context.]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
+
+  [Mixed-Content: Expects blocked for sharedworker-import-data to cross-http origin and swap-scheme redirection from https context.]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Mixed-Content: Expects blocked for sharedworker-import-data to same-http origin and keep-scheme redirection from https context.]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Mixed-Content: Expects blocked for sharedworker-import-data to same-http origin and no-redirect redirection from https context.]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Mixed-Content: Expects blocked for sharedworker-import-data to same-http origin and swap-scheme redirection from https context.]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
diff --git a/third_party/blink/web_tests/external/wpt/native-io/detach_iframe_during_open.https.window.js.ini b/third_party/blink/web_tests/external/wpt/native-io/detach_iframe_during_open.https.window.js.ini
new file mode 100644
index 0000000..98a13dd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/native-io/detach_iframe_during_open.https.window.js.ini
@@ -0,0 +1,3 @@
+[detach_iframe_during_open.https.window.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini
new file mode 100644
index 0000000..b34e07a7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini
@@ -0,0 +1,3 @@
+[navigate-initial-about-blank.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
index 602ca03..e40c36d 100644
--- a/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
@@ -3,5 +3,16 @@
     if product == "chrome": ERROR
   [A discarded document sends all its beacons of which backgroundTimeouts are\n    not default.]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (flag_specific == "") and (os == "linux"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [A discarded document sends all its beacons of which timeouts are not\n    default.]
+    expected:
+      if (flag_specific == "") and (os == "linux"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [A discarded document does not send an already sent beacon.]
+    expected:
+      if (flag_specific == "") and (os == "linux"): FAIL
+      if flag_specific == "disable-layout-ng": PASS
+      [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini b/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
index d4bb3aa..9d13735 100644
--- a/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
@@ -1,6 +1,5 @@
 [performance-navigation-timing-same-origin-bfcache.tentative.window.html]
   [RemoteContextHelper navigation using BFCache]
     expected:
+      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
       if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/reporting/geolocation-report-only.https.html.ini b/third_party/blink/web_tests/external/wpt/permissions-policy/reporting/geolocation-report-only.https.html.ini
index 014a055..74bda712 100644
--- a/third_party/blink/web_tests/external/wpt/permissions-policy/reporting/geolocation-report-only.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/permissions-policy/reporting/geolocation-report-only.https.html.ini
@@ -1,7 +1,3 @@
 [geolocation-report-only.https.html]
-  expected:
-    if product == "chrome": TIMEOUT
   [Geolocation report only mode]
-    expected:
-      if product == "chrome": TIMEOUT
-      FAIL
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini
new file mode 100644
index 0000000..ff1add8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini
@@ -0,0 +1,3 @@
+[deadline-max-rAF.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
index 5ac1d4a..5310563 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
@@ -162,8 +162,3 @@
   [content-type 12 : */*,text/html]
     expected:
       if os == "win": FAIL
-
-  [content-type 3 : text/plain;charset=gbk,text/html]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [FAIL, PASS]
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
index e70c84d0..74539cf6 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
@@ -1,5 +1,5 @@
 [no-entries-for-cross-origin-css-fetched-memory-cache.sub.html]
   [Make sure that resources fetched by cross origin CSS are not in the timeline.]
     expected:
-      if (flag_specific == "") and (product == "chrome"): [PASS, FAIL]
-      FAIL
+      if (product == "content_shell") and (flag_specific == "") and (os == "win"): FAIL
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
index 0473d057..28fcc51c 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
@@ -1,45 +1,57 @@
 [response-status-code.html]
   expected:
-    if product == "chrome": [OK, TIMEOUT]
-    TIMEOUT
+    if (product == "content_shell") and (flag_specific == "") and (os == "win"): TIMEOUT
+    if (product == "content_shell") and (flag_specific == "disable-layout-ng"): TIMEOUT
+    if product == "chrome": [TIMEOUT, OK]
   [This test validates the response status of resources. 299]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [NOTRUN, PASS]
 
   [This test validates the response status of resources. 289]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 296]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT, NOTRUN]
 
   [This test validates the response status of resources. 292]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 291]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 297]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [NOTRUN, PASS]
 
   [This test validates the response status of resources. 293]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 276]
     expected: [NOTRUN, PASS, TIMEOUT]
 
   [This test validates the response status of resources. 283]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 273]
     expected: [PASS, NOTRUN]
 
   [This test validates the response status of resources. 282]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 288]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 290]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 271]
     expected: [PASS, NOTRUN]
@@ -48,58 +60,70 @@
     expected: [NOTRUN, PASS, TIMEOUT]
 
   [This test validates the response status of resources. 281]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 287]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 268]
     expected: [PASS, NOTRUN]
 
   [This test validates the response status of resources. 298]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [NOTRUN, PASS]
 
   [This test validates the response status of resources. 267]
     expected: [NOTRUN, PASS]
 
   [This test validates the response status of resources. 294]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 272]
     expected: [PASS, TIMEOUT, NOTRUN]
 
   [This test validates the response status of resources. 286]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 285]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 278]
-    expected: [NOTRUN, PASS]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 274]
     expected: [PASS, NOTRUN]
 
   [This test validates the response status of resources. 280]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 295]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 277]
-    expected: [NOTRUN, PASS]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
 
   [This test validates the response status of resources. 270]
     expected: [PASS, NOTRUN]
 
   [This test validates the response status of resources. 279]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 269]
     expected: [PASS, NOTRUN]
 
   [This test validates the response status of resources. 284]
-    expected: [PASS, NOTRUN]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
 
   [This test validates the response status of resources. 125]
     expected: [PASS, NOTRUN]
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini b/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
index 6c4c37459..d767838f 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
@@ -7,10 +7,6 @@
   [Cache.addAll called with the same Request object specified twice]
     expected: FAIL
 
-  [Cache.addAll should succeed when entries differ by vary header]
-    expected:
-      if product == "chrome": FAIL
-
 
 [cache-add.https.any.serviceworker.html]
   [Cache.addAll called with the same Request object specified twice]
@@ -18,13 +14,9 @@
 
   [Cache.addAll should succeed when entries differ by vary header]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
 
 [cache-add.https.any.html]
   [Cache.addAll called with the same Request object specified twice]
     expected: FAIL
-
-  [Cache.addAll should succeed when entries differ by vary header]
-    expected:
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/about-blank-replacement.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/about-blank-replacement.https.html.ini
index 44673f0a..b2a61d9c 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/about-blank-replacement.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/about-blank-replacement.https.html.ini
@@ -1,4 +1,6 @@
 [about-blank-replacement.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Initial about:blank is controlled, exposed to clients.matchAll(), and matches final Client.]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/client-navigate.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/client-navigate.https.html.ini
deleted file mode 100644
index fca2622..0000000
--- a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/client-navigate.https.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[client-navigate.https.html]
-  [Frame location should not be accessible after redirect]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
index 48187be..481bcd7 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
@@ -1,7 +1,7 @@
 [unregister-immediately-during-extendable-events.https.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): OK
-    TIMEOUT
+    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [TIMEOUT, OK]
+    if product == "chrome": TIMEOUT
   [Clear-Site-Data must fail pending subresource fetch events.]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
index 55cdc9c..74869a8f 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
@@ -1,5 +1,5 @@
 [csp-script-src-self.html]
   expected:
     if (os == "linux") and (product == "chrome"): OK
-    if os == "win": OK
-    [OK, ERROR]
+    if os == "win": [OK, ERROR]
+    ERROR
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
index 639ddc1..6b9bf4fd 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
@@ -1,7 +1,6 @@
 [iframe-added-post-activation.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": ERROR
+    if product == "chrome": TIMEOUT
   [iframe added after activation has false document.prerendering]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/media-autoplay.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/media-autoplay.html.ini
index 12abdfd..dcad099 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/media-autoplay.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/media-autoplay.html.ini
@@ -3,8 +3,8 @@
   disabled:
     if os == "mac": was skipped in 'TestExpectations'
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": TIMEOUT
   [media autoplay should defer playaback]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html.ini
index ef3bb68..a532357f 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html.ini
@@ -1,5 +1,6 @@
 [referrer-policy-mismatch.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [prerendered with "strict-origin-when-cross-origin", activated with "no-referrer"]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
index 4937abd3..29ab07e 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
@@ -1,6 +1,6 @@
 [response-code-non-successful.html?code=404]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [response-code-non-successful.html?code=503]
 
@@ -9,5 +9,9 @@
 [response-code-non-successful.html?code=205]
 
 [response-code-non-successful.html?code=204]
+  expected:
+    if product == "chrome": [OK, ERROR]
 
 [response-code-non-successful.html?code=500]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
index dbd8282..2cbbf86 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
@@ -1,20 +1,14 @@
 [response-code-successful.html?code=203]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [Responses with code 203 should be activated]
-    expected:
-      if product == "chrome": FAIL
-
+    if product == "chrome": ERROR
 
 [response-code-successful.html?code=200]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [Responses with code 200 should be activated]
-    expected:
-      if product == "chrome": FAIL
-
+    if product == "chrome": ERROR
 
 [response-code-successful.html?code=201]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Responses with code 201 should be activated]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html.ini
index 872a1f5..2795fef 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html.ini
@@ -1,7 +1,6 @@
 [restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": ERROR
+    if product == "chrome": TIMEOUT
   [the access to the setSinkId of Audio API with the invalid sinkId should be\n    deferred until the prerendered page is activated]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html.ini
index 8dacf33..430d214a 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html.ini
@@ -1,7 +1,6 @@
 [restriction-bluetooth.tentative.https.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": ERROR
+    if product == "chrome": TIMEOUT
   [the access to the Bluetooth API should be deferred until the\n   prerendered page is activated]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-encrypted-media-unsupported-config.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-encrypted-media-unsupported-config.https.html.ini
index ba53aa9..ac50913 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-encrypted-media-unsupported-config.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-encrypted-media-unsupported-config.https.html.ini
@@ -1,7 +1,7 @@
 [restriction-encrypted-media-unsupported-config.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, ERROR]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": ERROR
   [the access to the Encrypted Media API should be deferred with the\n    unsupported configurations until the prerendered page is activated]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-encrypted-media.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-encrypted-media.https.html.ini
index c443d69..a72b225 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-encrypted-media.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-encrypted-media.https.html.ini
@@ -3,6 +3,7 @@
   disabled:
     if flag_specific == "force-renderer-accessibility": was skipped in 'FlagExpectations/force-renderer-accessibility'
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [the access to the Encrypted Media API should be deferred until the\n    prerendered page is activated]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-auto-play-attribute.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-auto-play-attribute.html.ini
index 66ea6cb7..1638866 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-auto-play-attribute.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-auto-play-attribute.html.ini
@@ -3,8 +3,7 @@
   disabled:
     if flag_specific == "force-renderer-accessibility": was skipped in 'FlagExpectations/force-renderer-accessibility'
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": ERROR
+    if product == "chrome": TIMEOUT
   [autoplay of the audio media should be deferred until the prerendered page is activated]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-camera.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-camera.https.html.ini
index 5910236..f2b8f0c 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-camera.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-camera.https.html.ini
@@ -1,5 +1,6 @@
 [restriction-media-camera.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [the access to the camera of the user media should be deferred until the\n    prerendered page is activated]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-service-worker-update.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-service-worker-update.https.html.ini
index f0afa05..f959936 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-service-worker-update.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-service-worker-update.https.html.ini
@@ -1,7 +1,7 @@
 [restriction-service-worker-update.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, ERROR]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": ERROR
   [ServiceWorkerRegistration.update() should be deferred in a prerendered page]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-nfc.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-nfc.https.html.ini
index 2a03aca..e02269b0 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-nfc.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-nfc.https.html.ini
@@ -1,5 +1,6 @@
 [restriction-web-nfc.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [The access to the Web NFC API should be deferred until the prerendered\n    page is activated]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-window-move.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-window-move.html.ini
index 87802b2..1f07b4c 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-window-move.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-window-move.html.ini
@@ -1,5 +1,6 @@
 [restriction-window-move.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [a prerendering page cannot move its window by executing moveTo.]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-navigation.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-navigation.https.html.ini
index e918764..af371ee 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-navigation.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-navigation.https.html.ini
@@ -1,7 +1,7 @@
 [session-history-navigation.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": TIMEOUT
   [Synthetic anchor click navigates independently with replacement in a prerender]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-pushstate.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-pushstate.https.html.ini
index f2a1bee..c514647e 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-pushstate.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-pushstate.https.html.ini
@@ -1,7 +1,6 @@
 [session-history-pushstate.https.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": TIMEOUT
+    if product == "chrome": TIMEOUT
   [history.pushState navigates independently with replacement in a prerender]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
index a18dab5e..ff00e5563 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
@@ -1,5 +1,6 @@
 [session-history-subframe-navigation.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [Subframe navigation in prerender replaces the session entry]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/state-and-event.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/state-and-event.html.ini
index aa4211fe..1024f52 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/state-and-event.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/state-and-event.html.ini
@@ -1,5 +1,6 @@
 [state-and-event.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [Test document.prerendering and its change event.]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini b/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
index 14abea7..adfd7d0c 100644
--- a/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
+++ b/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
@@ -963,7 +963,8 @@
 
 [a-element-xhtml.xhtml?include=file]
   expected:
-    if flag_specific == "disable-site-isolation-trials": CRASH
+    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [Parsing: <file://example%/> against <about:blank>]
     expected: FAIL
 
@@ -2062,13 +2063,13 @@
 
 [a-element-xhtml.xhtml?include=mailto]
   expected:
-    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, CRASH]
+    if (os == "linux") and (flag_specific == "disable-layout-ng"): [OK, CRASH]
+    if os == "win": TIMEOUT
   [Parsing: <mailto:/../> against <about:blank>]
     expected: FAIL
 
 
 [a-element-xhtml.xhtml?include=javascript]
-  expected:
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [Parsing: <javascript:/../> against <about:blank>]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/url/a-element.html.ini b/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
index f98ee31..769ff5e 100644
--- a/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
+++ b/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
@@ -1072,6 +1072,8 @@
 
 
 [a-element.html?include=file]
+  expected:
+    if flag_specific == "highdpi": [OK, CRASH]
   [Parsing: <file://example%/> against <about:blank>]
     expected: FAIL
 
@@ -1319,6 +1321,9 @@
 
 
 [a-element.html?include=mailto]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [Parsing: <mailto:/../> against <about:blank>]
     expected: FAIL
 
@@ -2174,5 +2179,9 @@
 
 
 [a-element.html?include=javascript]
+  expected:
+    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, CRASH]
+    if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [OK, CRASH]
+    if os == "win": [OK, TIMEOUT]
   [Parsing: <javascript:/../> against <about:blank>]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/url/failure.html.ini b/third_party/blink/web_tests/external/wpt/url/failure.html.ini
index 5f3314d..4364c892 100644
--- a/third_party/blink/web_tests/external/wpt/url/failure.html.ini
+++ b/third_party/blink/web_tests/external/wpt/url/failure.html.ini
@@ -1,5 +1,6 @@
 [failure.html]
   expected:
+    if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [OK, CRASH]
     if product == "chrome": TIMEOUT
   [Location's href: file://example:1/ should throw]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini b/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini
index 1091bffa..36d5702 100644
--- a/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini
@@ -1,3 +1,3 @@
 [percent-encoding.window.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
diff --git a/third_party/blink/web_tests/external/wpt/url/toascii.window.js.ini b/third_party/blink/web_tests/external/wpt/url/toascii.window.js.ini
index f1a9b16..9f9103a6 100644
--- a/third_party/blink/web_tests/external/wpt/url/toascii.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/toascii.window.js.ini
@@ -1,6 +1,6 @@
 [toascii.window.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
   [xn--a (using URL)]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini b/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
index e27107d..ceb0623 100644
--- a/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
@@ -586,7 +586,7 @@
 
 [url-setters-a-area.window.html?include=file]
   expected:
-    if flag_specific == "disable-site-isolation-trials": CRASH
+    if os == "win": [OK, TIMEOUT]
   [<a>: Setting <file://localhost/>.protocol = 'http' Can’t switch from file URL with no host]
     expected: FAIL
 
@@ -1152,7 +1152,7 @@
 
 [url-setters-a-area.window.html?include=javascript]
   expected:
-    if os == "win": TIMEOUT
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [<a>: Setting <javascript://x/>.username = 'wario']
     expected: FAIL
 
@@ -1174,7 +1174,7 @@
 
 [url-setters-a-area.window.html?include=mailto]
   expected:
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
   [<a>: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
index 927c36c..acdd4a89 100644
--- a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
@@ -1,5 +1,5 @@
 [urlsearchparams-stringifier.any.worker.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): CRASH
 
 [urlsearchparams-stringifier.any.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
index a3e52c7..1e48fb2 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
@@ -1,4 +1,4 @@
 [finished.html]
   [Test finished promise changes for animation duration changes]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (product == "chrome"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/onremove.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/onremove.html.ini
index 0b9009cc..b77dcd3 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/onremove.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/onremove.html.ini
@@ -1,4 +1,4 @@
 [onremove.html]
   [onremove events are fired in the correct order]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/animations/setting-the-current-time-of-an-animation.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/animations/setting-the-current-time-of-an-animation.html.ini
index abf20dbb..f0eb25a 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/animations/setting-the-current-time-of-an-animation.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/animations/setting-the-current-time-of-an-animation.html.ini
@@ -3,4 +3,9 @@
     expected: FAIL
 
   [Setting a negative current time with a positive playback rate]
-    expected: [PASS, FAIL]
+    expected:
+      if product == "chrome": [PASS, FAIL]
+
+  [Setting the current time after the end with a negative playback rate]
+    expected:
+      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/document-timelines.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/document-timelines.html.ini
deleted file mode 100644
index 08dcd48..0000000
--- a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/document-timelines.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[document-timelines.html]
-  [Document timelines report current time relative to navigationStart]
-    expected:
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
index fda793b..675b3f1 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
@@ -1,6 +1,5 @@
 [sibling-iframe-timeline.html]
   [animation tied to another frame's timeline runs properly]
     expected:
-      if (flag_specific == "") and (product == "chrome"): PASS
-      if flag_specific == "disable-site-isolation-trials": PASS
-      FAIL
+      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
index 41577178..2aec54d 100644
--- a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
@@ -1,9 +1,8 @@
 [reuse-web-bundle-resource.https.tentative.html]
-  ['remove(), then append()' should reuse webbundle resources]
+  [replaceWith() should reuse webbundle resources.]
     expected:
-      if (flag_specific == "") and (product == "chrome"): [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
 
-  [A webbundle should be fetched again when new script element is appended.]
+  ['remove(), then append() in a separate task' should not reuse webbundle resources]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html.ini b/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html.ini
index b63d722..5567922 100644
--- a/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html.ini
@@ -1,3 +1,6 @@
 [query-ordering.tentative.https.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
+  [Requests appear in state in order made.]
+    expected:
+      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html.ini
index 55c0f7c0..3b3be66a 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html.ini
@@ -1,4 +1,6 @@
 [test-analyser-output.html]
   [AnalyserNode output]
     expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "chrome"): [FAIL, PASS]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini
index 41f6326..88f3f0f5 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini
@@ -1,5 +1,4 @@
 [mediaElementAudioSourceToScriptProcessorTest.html]
   [All data processed correctly]
     expected:
-      if (flag_specific == "") and (product == "chrome"): [PASS, FAIL]
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html b/third_party/blink/web_tests/external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html
index c2ab298..3714ceb 100644
--- a/third_party/blink/web_tests/external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html
+++ b/third_party/blink/web_tests/external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html
@@ -9,6 +9,14 @@
       postMessage(e.data);
     };
   </script>
+  <script id='sharedWorkerCode' type='javascript/worker'>
+    self.onconnect = function (event) {
+      const port = event.ports[0];
+      port.onmessage = function (e) {
+        port.postMessage(e.data);
+      };
+    };
+  </script>
 </head>
 <body>
 <script>
@@ -44,6 +52,20 @@
   assert_equals(received.timestamp, 30);
 }, 'Verify frames can be passed back and forth between main and worker');
 
+promise_test(async () => {
+  const blob = new Blob([document.querySelector('#sharedWorkerCode').textContent], {
+    type: 'text/javascript',
+  });
+  const worker = new SharedWorker(window.URL.createObjectURL(blob));
+  let frame = createVideoFrame(40);
+  worker.port.postMessage(frame);
+  const received = await new Promise(resolve => worker.port.onmessage = e => {
+    resolve(e.data);
+  });
+  assert_equals(received.toString(), '[object VideoFrame]');
+  assert_equals(received.timestamp, 40);
+}, 'Verify frames can be passed back and forth between main and sharedworker');
+
 function appendIframe(src) {
   const frame = document.createElement('iframe');
   document.body.appendChild(frame);
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html.ini b/third_party/blink/web_tests/external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html.ini
new file mode 100644
index 0000000..23f3938
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.html.ini
@@ -0,0 +1,4 @@
+[videoFrame-serialization.crossAgentCluster.html]
+  expected: TIMEOUT
+  [Verify frames can be passed back and forth between main and sharedworker]
+    expected: TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/workers.html.ini b/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/workers.html.ini
deleted file mode 100644
index fd51247..0000000
--- a/third_party/blink/web_tests/external/wpt/webmessaging/broadcastchannel/workers.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[workers.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/postMessage_Date.sub.htm.ini b/third_party/blink/web_tests/external/wpt/webmessaging/postMessage_Date.sub.htm.ini
deleted file mode 100644
index dd186255..0000000
--- a/third_party/blink/web_tests/external/wpt/webmessaging/postMessage_Date.sub.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[postMessage_Date.sub.htm]
-  expected:
-    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/with-ports/020.html.ini b/third_party/blink/web_tests/external/wpt/webmessaging/with-ports/020.html.ini
deleted file mode 100644
index 265c7a6..0000000
--- a/third_party/blink/web_tests/external/wpt/webmessaging/with-ports/020.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[020.html]
-  [cross-origin test]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/without-ports/005.html.ini b/third_party/blink/web_tests/external/wpt/webmessaging/without-ports/005.html.ini
new file mode 100644
index 0000000..ed4eab7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webmessaging/without-ports/005.html.ini
@@ -0,0 +1,3 @@
+[005.html]
+  expected:
+    if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js.ini b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js.ini
index c656216..1f6ede4 100644
--- a/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/webnn/idlharness.https.any.js.ini
@@ -1,6 +1,4 @@
 [idlharness.https.any.html]
-  expected:
-    if product == "chrome": [ERROR, OK]
   [idl_test setup]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/webxr/events_referenceSpace_reset_inline.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/events_referenceSpace_reset_inline.https.html.ini
index 00c1d56..fddaa5b 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/events_referenceSpace_reset_inline.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/events_referenceSpace_reset_inline.https.html.ini
@@ -1,7 +1,6 @@
 [events_referenceSpace_reset_inline.https.html]
-  expected: TIMEOUT
+  expected:
+    if product == "chrome": OK
+    TIMEOUT
   [XRSession resetpose from a device properly fires off the right events for non-immersive sessions - webgl]
     expected: FAIL
-
-  [XRSession resetpose from a device properly fires off the right events for non-immersive sessions - webgl2]
-    expected: TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html.ini
index 1fabe48..f62357f 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html.ini
@@ -1,6 +1,4 @@
 [xrDevice_requestSession_optionalFeatures.https.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": CRASH
   [Tests requestSession accepts XRSessionInit dictionary - webgl]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/third_party/blink/web_tests/external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html.ini
index 9b71537..d21b77c 100644
--- a/third_party/blink/web_tests/external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html.ini
+++ b/third_party/blink/web_tests/external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html.ini
@@ -1,3 +1,5 @@
 [sharedworker-in-worker.html]
+  expected:
+    if product == "chrome": ERROR
   [Base URL in workers: new SharedWorker()]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html.ini
index 4229e4c..de76679c 100644
--- a/third_party/blink/web_tests/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html.ini
+++ b/third_party/blink/web_tests/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html.ini
@@ -1,3 +1,3 @@
 [event-ports-dedicated.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.js.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.js.ini
new file mode 100644
index 0000000..285f912
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.js.ini
@@ -0,0 +1,5 @@
+[report-error-same-origin.sub.any.worker.html]
+
+[report-error-same-origin.sub.any.sharedworker.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
diff --git "a/third_party/blink/web_tests/platform/mac-mac11/virtual/idna-2008/external/wpt/url/a-element-xhtml_exclude=\050file_javascript_mailto\051-expected.txt" "b/third_party/blink/web_tests/platform/mac-mac11/virtual/idna-2008/external/wpt/url/a-element-xhtml_exclude=\050file_javascript_mailto\051-expected.txt"
new file mode 100644
index 0000000..ddb2a07f
--- /dev/null
+++ "b/third_party/blink/web_tests/platform/mac-mac11/virtual/idna-2008/external/wpt/url/a-element-xhtml_exclude=\050file_javascript_mailto\051-expected.txt"
@@ -0,0 +1,634 @@
+This is a testharness.js-based test.
+Found 619 tests; 343 PASS, 276 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Parsing: <https://test:@test> against <about:blank>
+PASS Parsing: <https://:@test> against <about:blank>
+FAIL Parsing: <non-special://test:@test/x> against <about:blank> assert_equals: href expected "non-special://test@test/x" but got "non-special://test:@test/x"
+FAIL Parsing: <non-special://:@test/x> against <about:blank> assert_equals: href expected "non-special://test/x" but got "non-special://:@test/x"
+PASS Parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+PASS Parsing: <lolscheme:x x#x x> against <about:blank>
+PASS Parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:b/c> against <http://example.org/foo/bar>
+FAIL Parsing: <http://f: /c> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://f: /c" but got "http://f:%20/c"
+PASS Parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:999999/c> against <http://example.org/foo/bar>
+FAIL Parsing: <non-special://f:999999/c> against <http://example.org/foo/bar> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://f: 21 / b ? d # e " but got "http://f:%2021%20/%20b%20?%20d%20#%20e"
+PASS Parsing: <> against <http://example.org/foo/bar>
+PASS Parsing: <  	> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <:> against <http://example.org/foo/bar>
+PASS Parsing: <:a> against <http://example.org/foo/bar>
+PASS Parsing: <:/> against <http://example.org/foo/bar>
+PASS Parsing: <:\> against <http://example.org/foo/bar>
+PASS Parsing: <:#> against <http://example.org/foo/bar>
+PASS Parsing: <#> against <http://example.org/foo/bar>
+PASS Parsing: <#/> against <http://example.org/foo/bar>
+PASS Parsing: <#\> against <http://example.org/foo/bar>
+PASS Parsing: <#;?> against <http://example.org/foo/bar>
+PASS Parsing: <?> against <http://example.org/foo/bar>
+PASS Parsing: </> against <http://example.org/foo/bar>
+PASS Parsing: <:23> against <http://example.org/foo/bar>
+PASS Parsing: </:23> against <http://example.org/foo/bar>
+PASS Parsing: <\x> against <http://example.org/foo/bar>
+PASS Parsing: <\\x\hello> against <http://example.org/foo/bar>
+PASS Parsing: <::> against <http://example.org/foo/bar>
+PASS Parsing: <::23> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://> against <http://example.org/foo/bar> assert_equals: pathname expected "" but got "//"
+PASS Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://///////> against <http://example.org/foo/bar> assert_equals: pathname expected "///////" but got "/////////"
+FAIL Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> assert_equals: pathname expected "///////bar.com/" but got "/////////bar.com/"
+FAIL Parsing: <foo:////://///> against <http://example.org/foo/bar> assert_equals: pathname expected "//://///" but got "////://///"
+PASS Parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+FAIL Parsing: <http://[1::2]:3:4> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://[1::2]:3:4" but got "http://[1::2]:3:4/"
+FAIL Parsing: <http://2001::1> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://2001::1" but got "http://2001::1/"
+FAIL Parsing: <http://2001::1]> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://2001::1]" but got "http://2001::1]/"
+FAIL Parsing: <http://2001::1]:80> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://2001::1]:80" but got "http://2001::1]/"
+PASS Parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Parsing: <#β> against <http://example.org/foo/bar>
+PASS Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Parsing: <tel:1234567890> against <http://example.org/foo/bar>
+FAIL Parsing: <ssh://example.com/foo/bar.git> against <http://example.org/> assert_equals: host expected "example.com" but got ""
+PASS Parsing: <http://example.com/././foo> against <about:blank>
+PASS Parsing: <http://example.com/./.foo> against <about:blank>
+PASS Parsing: <http://example.com/foo/.> against <about:blank>
+PASS Parsing: <http://example.com/foo/./> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
+FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/%2e%2" but got "http://example.com/foo/.%2"
+FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/%2e.bar" but got "http://example.com/..bar"
+PASS Parsing: <http://example.com////../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Parsing: <http://example.com/foo> against <about:blank>
+PASS Parsing: <http://example.com/%20foo> against <about:blank>
+PASS Parsing: <http://example.com/foo%> against <about:blank>
+PASS Parsing: <http://example.com/foo%2> against <about:blank>
+PASS Parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Parsing: <http://example.com/foo%2©zbar> against <about:blank>
+FAIL Parsing: <http://example.com/foo%41%7a> against <about:blank> assert_equals: href expected "http://example.com/foo%41%7a" but got "http://example.com/fooAz"
+PASS Parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Parsing: <http://example.com/foo%00%51> against <about:blank> assert_equals: href expected "http://example.com/foo%00%51" but got "http://example.com/foo%00Q"
+PASS Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Parsing: <http://example.com/你好你好> against <about:blank>
+PASS Parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Parsing: <http://example.com//foo> against <about:blank>
+PASS Parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+PASS Parsing: <data:test# »> against <about:blank>
+PASS Parsing: <http://www.google.com> against <about:blank>
+PASS Parsing: <http://192.0x00A80001> against <about:blank>
+FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo%2Ehtml" but got "http://www/foo.html"
+PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Parsing: <http://user:pass@/> against <about:blank>
+PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Parsing: <http://foo:80/> against <about:blank>
+PASS Parsing: <http://foo:81/> against <about:blank>
+FAIL Parsing: <httpa://foo:80/> against <about:blank> assert_equals: host expected "foo:80" but got ""
+PASS Parsing: <http://foo:-80/> against <about:blank>
+PASS Parsing: <https://foo:443/> against <about:blank>
+PASS Parsing: <https://foo:80/> against <about:blank>
+PASS Parsing: <ftp://foo:21/> against <about:blank>
+PASS Parsing: <ftp://foo:80/> against <about:blank>
+FAIL Parsing: <gopher://foo:70/> against <about:blank> assert_equals: host expected "foo:70" but got ""
+FAIL Parsing: <gopher://foo:443/> against <about:blank> assert_equals: host expected "foo:443" but got ""
+PASS Parsing: <ws://foo:80/> against <about:blank>
+PASS Parsing: <ws://foo:81/> against <about:blank>
+PASS Parsing: <ws://foo:443/> against <about:blank>
+PASS Parsing: <ws://foo:815/> against <about:blank>
+PASS Parsing: <wss://foo:80/> against <about:blank>
+PASS Parsing: <wss://foo:81/> against <about:blank>
+PASS Parsing: <wss://foo:443/> against <about:blank>
+PASS Parsing: <wss://foo:815/> against <about:blank>
+PASS Parsing: <http:/example.com/> against <about:blank>
+PASS Parsing: <ftp:/example.com/> against <about:blank>
+PASS Parsing: <https:/example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <about:blank>
+PASS Parsing: <gopher:/example.com/> against <about:blank>
+PASS Parsing: <ws:/example.com/> against <about:blank>
+PASS Parsing: <wss:/example.com/> against <about:blank>
+PASS Parsing: <data:/example.com/> against <about:blank>
+PASS Parsing: <http:example.com/> against <about:blank>
+PASS Parsing: <ftp:example.com/> against <about:blank>
+PASS Parsing: <https:example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Parsing: <ftps:example.com/> against <about:blank>
+PASS Parsing: <gopher:example.com/> against <about:blank>
+PASS Parsing: <ws:example.com/> against <about:blank>
+PASS Parsing: <wss:example.com/> against <about:blank>
+PASS Parsing: <data:example.com/> against <about:blank>
+PASS Parsing: <http:@www.example.com> against <about:blank>
+PASS Parsing: <http:/@www.example.com> against <about:blank>
+PASS Parsing: <http://@www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://@pple.com> against <about:blank>
+PASS Parsing: <http::b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Parsing: <http://:b@www.example.com> against <about:blank>
+FAIL Parsing: <http:/:@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:/:@/www.example.com" but got "http:///www.example.com"
+PASS Parsing: <http://user@/www.example.com> against <about:blank>
+FAIL Parsing: <http:@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:@/www.example.com" but got "http:///www.example.com"
+FAIL Parsing: <http:/@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:/@/www.example.com" but got "http:///www.example.com"
+FAIL Parsing: <http://@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http://@/www.example.com" but got "http:///www.example.com"
+FAIL Parsing: <https:@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "https:@/www.example.com" but got "https:///www.example.com"
+FAIL Parsing: <http:a:b@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:a:b@/www.example.com" but got "http://a:b@/www.example.com"
+FAIL Parsing: <http:/a:b@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:/a:b@/www.example.com" but got "http://a:b@/www.example.com"
+PASS Parsing: <http://a:b@/www.example.com> against <about:blank>
+FAIL Parsing: <http::@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http::@/www.example.com" but got "http:///www.example.com"
+PASS Parsing: <http:a:@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Parsing: <http://a:@www.example.com> against <about:blank>
+PASS Parsing: <http://www.@pple.com> against <about:blank>
+FAIL Parsing: <http:@:www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:@:www.example.com" but got "http://:www.example.com/"
+FAIL Parsing: <http:/@:www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:/@:www.example.com" but got "http://:www.example.com/"
+FAIL Parsing: <http://@:www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http://@:www.example.com" but got "http://:www.example.com/"
+PASS Parsing: <http://:@www.example.com> against <about:blank>
+PASS Parsing: </> against <http://www.example.com/test>
+PASS Parsing: </test.txt> against <http://www.example.com/test>
+PASS Parsing: <.> against <http://www.example.com/test>
+PASS Parsing: <..> against <http://www.example.com/test>
+PASS Parsing: <test.txt> against <http://www.example.com/test>
+PASS Parsing: <./test.txt> against <http://www.example.com/test>
+PASS Parsing: <../test.txt> against <http://www.example.com/test>
+PASS Parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+FAIL Parsing: <http://example example.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://[]> against <http://other.com/> assert_equals: failure should set href to input expected "http://[]" but got "http://[]/"
+FAIL Parsing: <http://[:]> against <http://other.com/> assert_equals: failure should set href to input expected "http://[:]" but got "http://[:]/"
+FAIL Parsing: <http://GOO  goo.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Parsing: <http://www.foo。bar.com> against <http://other.com/>
+FAIL Parsing: <http://﷐zyx.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://﷐zyx.com" but got "http://%EF%BF%BDzyx.com/"
+FAIL Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://%ef%b7%90zyx.com" but got "http://%EF%BF%BDzyx.com/"
+FAIL Parsing: <https://�> against <about:blank> assert_equals: failure should set href to input expected "https://\ufffd" but got "https://%EF%BF%BD/"
+FAIL Parsing: <https://%EF%BF%BD> against <about:blank> assert_equals: failure should set href to input expected "https://%EF%BF%BD" but got "https://%EF%BF%BD/"
+PASS Parsing: <https://x/�?�#�> against <about:blank>
+FAIL Parsing: <http://a.b.c.xn--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://10.0.0.xn--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://a.b.c.XN--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://a.b.c.Xn--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://10.0.0.XN--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://10.0.0.xN--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://Go.com> against <http://other.com/>
+FAIL Parsing: <http://%41.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://%00.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://%00.com" but got "http://%00.com/"
+FAIL Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://%ef%bc%85%ef%bc%90%ef%bc%90.com" but got "http://%00.com/"
+PASS Parsing: <http://你好你好> against <http://other.com/>
+PASS Parsing: <https://faß.ExAmPlE/> against <about:blank>
+FAIL Parsing: <sc://faß.ExAmPlE/> against <about:blank> assert_equals: host expected "fa%C3%9F.ExAmPlE" but got ""
+FAIL Parsing: <http://%zz%66%a.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://%zz%66%a.com" but got "http://%25zzf%25a.com/"
+FAIL Parsing: <http://%25> against <http://other.com/> assert_equals: failure should set href to input expected "http://%25" but got "http://%25/"
+FAIL Parsing: <http://hello%00> against <http://other.com/> assert_equals: failure should set href to input expected "http://hello%00" but got "http://hello%00/"
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+FAIL Parsing: <http://192.168.0.257> against <http://other.com/> assert_equals: failure should set href to input expected "http://192.168.0.257" but got "http://192.168.0.257/"
+FAIL Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/> assert_equals: failure should set href to input expected "http://%3g%78%63%30%2e%30%32%35%30%2E.01" but got "http://%253gxc0.0250..01/"
+FAIL Parsing: <http://192.168.0.1 hello> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <https://x x:12> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Parsing: <http://./> against <about:blank>
+PASS Parsing: <http://../> against <about:blank>
+FAIL Parsing: <h://.> against <about:blank> assert_equals: host expected "." but got ""
+PASS Parsing: <http://[www.google.com]/> against <about:blank>
+FAIL Parsing: <http://[google.com]> against <http://other.com/> assert_equals: failure should set href to input expected "http://[google.com]" but got "http://[google.com]/"
+FAIL Parsing: <http://[::1.2.3.4x]> against <http://other.com/> assert_equals: failure should set href to input expected "http://[::1.2.3.4x]" but got "http://[::1.2.3.4x]/"
+FAIL Parsing: <http://[::1.2.3.]> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://[::1.2.]> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://[::1.]> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Parsing: <#> against <test:test>
+FAIL Parsing: <#x> against <data:,> assert_equals: href expected "data:,#x" but got "test:test#x"
+PASS Parsing: <#x> against <about:blank>
+PASS Parsing: <#> against <test:test?test>
+PASS Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Parsing: <http://host/?'> against <about:blank>
+FAIL Parsing: <notspecial://host/?'> against <about:blank> assert_equals: href expected "notspecial://host/?'" but got "notspecial://host/?%27"
+PASS Parsing: </some/path> against <http://user@example.org/smth>
+PASS Parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Parsing: </some/path> against <http://user:pass@example.org:21/smth>
+FAIL Parsing: <i> against <sc:sd> assert_equals: failure should set href to input expected "i" but got ""
+FAIL Parsing: <i> against <sc:sd/sd> assert_equals: failure should set href to input expected "i" but got ""
+PASS Parsing: <i> against <sc:/pa/pa>
+FAIL Parsing: <i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/i" but got "///pa/i"
+FAIL Parsing: <../i> against <sc:sd> assert_equals: failure should set href to input expected "../i" but got ""
+FAIL Parsing: <../i> against <sc:sd/sd> assert_equals: failure should set href to input expected "../i" but got ""
+PASS Parsing: <../i> against <sc:/pa/pa>
+FAIL Parsing: <../i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <../i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+FAIL Parsing: </i> against <sc:sd> assert_equals: failure should set href to input expected "/i" but got ""
+FAIL Parsing: </i> against <sc:sd/sd> assert_equals: failure should set href to input expected "/i" but got ""
+PASS Parsing: </i> against <sc:/pa/pa>
+FAIL Parsing: </i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: </i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+FAIL Parsing: <?i> against <sc:sd> assert_equals: failure should set href to input expected "?i" but got ""
+FAIL Parsing: <?i> against <sc:sd/sd> assert_equals: failure should set href to input expected "?i" but got ""
+PASS Parsing: <?i> against <sc:/pa/pa>
+FAIL Parsing: <?i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <?i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+PASS Parsing: <#i> against <sc:sd>
+PASS Parsing: <#i> against <sc:sd/sd>
+PASS Parsing: <#i> against <sc:/pa/pa>
+FAIL Parsing: <#i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <#i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+FAIL Parsing: <about:/../> against <about:blank> assert_equals: href expected "about:/" but got "about:/../"
+FAIL Parsing: <data:/../> against <about:blank> assert_equals: href expected "data:/" but got "data:/../"
+FAIL Parsing: <sc://ñ.test/> against <about:blank> assert_equals: host expected "%C3%B1.test" but got ""
+FAIL Parsing: <sc://%/> against <about:blank> assert_equals: host expected "%" but got ""
+FAIL Parsing: <sc://@/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://te@s:t@/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://:/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://:12/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <x> against <sc://ñ> assert_equals: href expected "sc://%C3%B1/x" but got "sc://%C3%B1"
+PASS Parsing: <sc:\../> against <about:blank>
+PASS Parsing: <sc::a@example.net> against <about:blank>
+PASS Parsing: <wow:%NBD> against <about:blank>
+PASS Parsing: <wow:%1G> against <about:blank>
+FAIL Parsing: <wow:￿> against <about:blank> assert_equals: href expected "wow:%EF%BF%BF" but got "wow:%EF%BF%BD"
+FAIL Parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> assert_equals: href expected "http://example.com/%EF%BF%BD%F0%90%9F%BE%EF%BF%BD%EF%B7%90%EF%B7%8F%EF%B7%AF%EF%B7%B0%EF%BF%BE%EF%BF%BF?%EF%BF%BD%F0%90%9F%BE%EF%BF%BD%EF%B7%90%EF%B7%8F%EF%B7%AF%EF%B7%B0%EF%BF%BE%EF%BF%BF" but got "http://example.com/%EF%BF%BD%F0%90%9F%BE%EF%BF%BD%EF%BF%BD%EF%B7%8F%EF%BF%BD%EF%B7%B0%EF%BF%BD%EF%BF%BD?%EF%BF%BD%F0%90%9F%BE%EF%BF%BD%EF%BF%BD%EF%B7%8F%EF%BF%BD%EF%B7%B0%EF%BF%BD%EF%BF%BD"
+FAIL Parsing: <sc://a\0b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a<b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a>b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a[b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a\b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a]b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a^b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a|b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <foo://ho	st/> against <about:blank> assert_equals: host expected "host" but got ""
+FAIL Parsing: <foo://ho
+st/> against <about:blank> assert_equals: host expected "host" but got ""
+FAIL Parsing: <foo://ho\rst/> against <about:blank> assert_equals: host expected "host" but got ""
+FAIL Parsing: <http://a\0b/> against <about:blank> assert_equals: failure should set href to input expected "http://a\0b/" but got "http://a%00b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x01b/" but got "http://a%01b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x02b/" but got "http://a%02b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x03b/" but got "http://a%03b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x04b/" but got "http://a%04b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x05b/" but got "http://a%05b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x06b/" but got "http://a%06b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x07b/" but got "http://a%07b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\bb/" but got "http://a%08b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\vb/" but got "http://a%0Bb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\fb/" but got "http://a%0Cb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x0eb/" but got "http://a%0Eb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x0fb/" but got "http://a%0Fb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x10b/" but got "http://a%10b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x11b/" but got "http://a%11b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x12b/" but got "http://a%12b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x13b/" but got "http://a%13b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x14b/" but got "http://a%14b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x15b/" but got "http://a%15b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x16b/" but got "http://a%16b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x17b/" but got "http://a%17b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x18b/" but got "http://a%18b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x19b/" but got "http://a%19b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1ab/" but got "http://a%1Ab/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1bb/" but got "http://a%1Bb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1cb/" but got "http://a%1Cb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1db/" but got "http://a%1Db/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1eb/" but got "http://a%1Eb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1fb/" but got "http://a%1Fb/"
+FAIL Parsing: <http://a b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://a%b/> against <about:blank> assert_equals: failure should set href to input expected "http://a%b/" but got "http://a%25b/"
+FAIL Parsing: <http://a<b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://a>b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://a[b/> against <about:blank>
+PASS Parsing: <http://a]b/> against <about:blank>
+FAIL Parsing: <http://a^b> against <about:blank> assert_equals: failure should set href to input expected "http://a^b" but got "http://a%5Eb/"
+FAIL Parsing: <http://a|b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://ab/" but got "http://a%7Fb/"
+PASS Parsing: <http://ho	st/> against <about:blank>
+PASS Parsing: <http://ho
+st/> against <about:blank>
+PASS Parsing: <http://ho\rst/> against <about:blank>
+PASS Parsing: <http://ho%00st/> against <about:blank>
+PASS Parsing: <http://ho%01st/> against <about:blank>
+PASS Parsing: <http://ho%02st/> against <about:blank>
+PASS Parsing: <http://ho%03st/> against <about:blank>
+PASS Parsing: <http://ho%04st/> against <about:blank>
+PASS Parsing: <http://ho%05st/> against <about:blank>
+PASS Parsing: <http://ho%06st/> against <about:blank>
+PASS Parsing: <http://ho%07st/> against <about:blank>
+PASS Parsing: <http://ho%08st/> against <about:blank>
+PASS Parsing: <http://ho%09st/> against <about:blank>
+PASS Parsing: <http://ho%0Ast/> against <about:blank>
+PASS Parsing: <http://ho%0Bst/> against <about:blank>
+PASS Parsing: <http://ho%0Cst/> against <about:blank>
+PASS Parsing: <http://ho%0Dst/> against <about:blank>
+PASS Parsing: <http://ho%0Est/> against <about:blank>
+PASS Parsing: <http://ho%0Fst/> against <about:blank>
+PASS Parsing: <http://ho%10st/> against <about:blank>
+PASS Parsing: <http://ho%11st/> against <about:blank>
+PASS Parsing: <http://ho%12st/> against <about:blank>
+PASS Parsing: <http://ho%13st/> against <about:blank>
+PASS Parsing: <http://ho%14st/> against <about:blank>
+PASS Parsing: <http://ho%15st/> against <about:blank>
+PASS Parsing: <http://ho%16st/> against <about:blank>
+PASS Parsing: <http://ho%17st/> against <about:blank>
+PASS Parsing: <http://ho%18st/> against <about:blank>
+PASS Parsing: <http://ho%19st/> against <about:blank>
+PASS Parsing: <http://ho%1Ast/> against <about:blank>
+PASS Parsing: <http://ho%1Bst/> against <about:blank>
+PASS Parsing: <http://ho%1Cst/> against <about:blank>
+PASS Parsing: <http://ho%1Dst/> against <about:blank>
+PASS Parsing: <http://ho%1Est/> against <about:blank>
+PASS Parsing: <http://ho%1Fst/> against <about:blank>
+FAIL Parsing: <http://ho%20st/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://ho%23st/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://ho%25st/> against <about:blank>
+PASS Parsing: <http://ho%2Fst/> against <about:blank>
+FAIL Parsing: <http://ho%3Ast/> against <about:blank> assert_equals: failure should set href to input expected "http://ho%3Ast/" but got "http://ho:st/"
+FAIL Parsing: <http://ho%3Cst/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://ho%3Est/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://ho%3Fst/> against <about:blank>
+FAIL Parsing: <http://ho%40st/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://ho%5Bst/> against <about:blank> assert_equals: failure should set href to input expected "http://ho%5Bst/" but got "http://ho[st/"
+PASS Parsing: <http://ho%5Cst/> against <about:blank>
+FAIL Parsing: <http://ho%5Dst/> against <about:blank> assert_equals: failure should set href to input expected "http://ho%5Dst/" but got "http://ho]st/"
+FAIL Parsing: <http://ho%7Cst/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://ho%7Fst/> against <about:blank>
+FAIL Parsing: <http://!"$&'()*+,-.;=_`{}~/> against <about:blank> assert_equals: href expected "http://!\"$&'()*+,-.;=_`{}~/" but got "http://%21%22%24%26%27%28%29%2A+%2C-.%3B%3D_%60%7B%7D%7E/"
+FAIL Parsing: <sc://!"$%&'()*+,-.;=_`{}~/> against <about:blank> assert_equals: host expected "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~" but got ""
+FAIL Parsing: <ftp://example.com%80/> against <about:blank> assert_equals: failure should set href to input expected "ftp://example.com%80/" but got "ftp://example.com%EF%BF%BD/"
+FAIL Parsing: <ftp://example.com%A0/> against <about:blank> assert_equals: failure should set href to input expected "ftp://example.com%A0/" but got "ftp://example.com%EF%BF%BD/"
+FAIL Parsing: <https://example.com%80/> against <about:blank> assert_equals: failure should set href to input expected "https://example.com%80/" but got "https://example.com%EF%BF%BD/"
+FAIL Parsing: <https://example.com%A0/> against <about:blank> assert_equals: failure should set href to input expected "https://example.com%A0/" but got "https://example.com%EF%BF%BD/"
+PASS Parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Parsing: <https://%e2%98%83> against <about:blank>
+PASS Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <https://example.org/foo/bar>
+PASS Parsing: <sc:> against <https://example.org/foo/bar>
+PASS Parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Parsing: <http://1.2.3.4/> against <http://other.com/>
+PASS Parsing: <http://1.2.3.4./> against <http://other.com/>
+PASS Parsing: <http://192.168.257> against <http://other.com/>
+PASS Parsing: <http://192.168.257.> against <http://other.com/>
+PASS Parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Parsing: <http://256> against <http://other.com/>
+PASS Parsing: <http://256.com> against <http://other.com/>
+PASS Parsing: <http://999999999> against <http://other.com/>
+PASS Parsing: <http://999999999.> against <http://other.com/>
+PASS Parsing: <http://999999999.com> against <http://other.com/>
+FAIL Parsing: <http://10000000000> against <http://other.com/> assert_equals: failure should set href to input expected "http://10000000000" but got "http://10000000000/"
+PASS Parsing: <http://10000000000.com> against <http://other.com/>
+PASS Parsing: <http://4294967295> against <http://other.com/>
+FAIL Parsing: <http://4294967296> against <http://other.com/> assert_equals: failure should set href to input expected "http://4294967296" but got "http://4294967296/"
+PASS Parsing: <http://0xffffffff> against <http://other.com/>
+FAIL Parsing: <http://0xffffffff1> against <http://other.com/> assert_equals: failure should set href to input expected "http://0xffffffff1" but got "http://0xffffffff1/"
+FAIL Parsing: <http://256.256.256.256> against <http://other.com/> assert_equals: failure should set href to input expected "http://256.256.256.256" but got "http://256.256.256.256/"
+PASS Parsing: <https://0x.0x.0> against <about:blank>
+PASS Parsing: <https://0x100000000/test> against <about:blank>
+PASS Parsing: <https://256.0.0.1/test> against <about:blank>
+FAIL Parsing: <https://%43%7C/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <asdf://%43|/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <asdf://%43%7C/> against <about:blank> assert_equals: host expected "%43%7C" but got ""
+FAIL Parsing: <\\\.\Y:> against <about:blank> assert_equals: failure should set href to input expected "\\\\\\.\\Y:" but got ""
+FAIL Parsing: <\\\.\y:> against <about:blank> assert_equals: failure should set href to input expected "\\\\\\.\\y:" but got ""
+PASS Parsing: <http://[1:0::]> against <http://example.net/>
+FAIL Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/> assert_equals: failure should set href to input expected "http://[0:1:2:3:4:5:6:7:8]" but got "http://[0:1:2:3:4:5:6:7:8]/"
+FAIL Parsing: <https://[0::0::0]> against <about:blank> assert_equals: failure should set href to input expected "https://[0::0::0]" but got "https://[0::0::0]/"
+FAIL Parsing: <https://[0:.0]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:.0]" but got "https://[0:.0]/"
+FAIL Parsing: <https://[0:0:]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:0:]" but got "https://[0:0:]/"
+FAIL Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:1:2:3:4:5:6:7.0.0.0.1]" but got "https://[0:1:2:3:4:5:6:7.0.0.0.1]/"
+FAIL Parsing: <https://[0:1.00.0.0.0]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:1.00.0.0.0]" but got "https://[0:1.00.0.0.0]/"
+FAIL Parsing: <https://[0:1.290.0.0.0]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:1.290.0.0.0]" but got "https://[0:1.290.0.0.0]/"
+FAIL Parsing: <https://[0:1.23.23]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:1.23.23]" but got "https://[0:1.23.23]/"
+FAIL Parsing: <http://?> against <about:blank> assert_equals: failure should set href to input expected "http://?" but got "http:/?"
+FAIL Parsing: <http://#> against <about:blank> assert_equals: failure should set href to input expected "http://#" but got "http:/#"
+PASS Parsing: <http://f:4294967377/c> against <http://example.org/>
+PASS Parsing: <http://f:18446744073709551697/c> against <http://example.org/>
+PASS Parsing: <http://f:340282366920938463463374607431768211537/c> against <http://example.org/>
+FAIL Parsing: <sc://ñ> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ?x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ#x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <#x> against <sc://ñ> assert_equals: href expected "sc://%C3%B1#x" but got "sc://%C3%B1"
+FAIL Parsing: <?x> against <sc://ñ> assert_equals: href expected "sc://%C3%B1?x" but got "sc://%C3%B1"
+FAIL Parsing: <sc://?> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <sc://#> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <///> against <sc://x/> assert_equals: href expected "sc:///" but got "sc:"
+FAIL Parsing: <////> against <sc://x/> assert_equals: href expected "sc:////" but got "sc:"
+FAIL Parsing: <////x/> against <sc://x/> assert_equals: href expected "sc:////x/" but got "sc://x/"
+FAIL Parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank> assert_equals: host expected "foobar.com" but got ""
+FAIL Parsing: <telnet://user:pass@foobar.com:23/> against <about:blank> assert_equals: username expected "user" but got ""
+FAIL Parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank> assert_equals: host expected "10.10.10.10:7777" but got ""
+FAIL Parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <rsync://foo@host:911/sup> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <git://github.com/foo/bar.git> against <about:blank> assert_equals: host expected "github.com" but got ""
+FAIL Parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank> assert_equals: host expected "myserver.com:6999" but got ""
+FAIL Parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank> assert_equals: host expected "fw.example.org:9999" but got ""
+FAIL Parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank> assert_equals: host expected "localhost:389" but got ""
+FAIL Parsing: <git+https://github.com/foo/bar> against <about:blank> assert_equals: host expected "github.com" but got ""
+PASS Parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+FAIL Parsing: <non-spec:/.//> against <about:blank> assert_equals: pathname expected "//" but got "/.//"
+FAIL Parsing: <non-spec:/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/..//"
+FAIL Parsing: <non-spec:/a/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/a/..//"
+FAIL Parsing: <non-spec:/.//path> against <about:blank> assert_equals: pathname expected "//path" but got "/.//path"
+FAIL Parsing: <non-spec:/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <non-spec:/a/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/a/..//path"
+FAIL Parsing: </.//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: </..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <a/..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//p" but got "non-spec:/..//p"
+FAIL Parsing: <path> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <../path> against <non-spec:/.//p> assert_equals: href expected "non-spec:/path" but got "non-spec:/./path"
+FAIL Parsing: <non-special://%E2%80%A0/> against <about:blank> assert_equals: host expected "%E2%80%A0" but got ""
+FAIL Parsing: <non-special://H%4fSt/path> against <about:blank> assert_equals: host expected "H%4fSt" but got ""
+FAIL Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank> assert_equals: href expected "non-special://[1:2:0:0:5::]/" but got "non-special://[1:2:0:0:5:0:0:0]/"
+FAIL Parsing: <non-special://[1:2:0:0:0:0:0:3]/> against <about:blank> assert_equals: href expected "non-special://[1:2::3]/" but got "non-special://[1:2:0:0:0:0:0:3]/"
+FAIL Parsing: <non-special://[1:2::3]:80/> against <about:blank> assert_equals: host expected "[1:2::3]:80" but got ""
+FAIL Parsing: <non-special://[:80/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <blob:https://example.com:443/> against <about:blank>
+PASS Parsing: <blob:d3958f5c-0777-0845-9dcf-2cb28783acaf> against <about:blank>
+PASS Parsing: <blob:> against <about:blank>
+PASS Parsing: <http://0x7f.0.0.0x7g> against <about:blank>
+PASS Parsing: <http://0X7F.0.0.0X7G> against <about:blank>
+FAIL Parsing: <http://[::127.0.0.0.1]> against <about:blank> assert_equals: failure should set href to input expected "http://[::127.0.0.0.1]" but got "http://[::127.0.0.0.1]/"
+PASS Parsing: <http://[0:1:0:1:0:1:0:1]> against <about:blank>
+PASS Parsing: <http://[1:0:1:0:1:0:1:0]> against <about:blank>
+PASS Parsing: <http://example.org/test?"> against <about:blank>
+PASS Parsing: <http://example.org/test?#> against <about:blank>
+PASS Parsing: <http://example.org/test?<> against <about:blank>
+PASS Parsing: <http://example.org/test?>> against <about:blank>
+PASS Parsing: <http://example.org/test?⌣> against <about:blank>
+PASS Parsing: <http://example.org/test?%23%23> against <about:blank>
+PASS Parsing: <http://example.org/test?%GH> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%EF> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%GH> against <about:blank>
+FAIL Parsing: <a> against <about:blank> assert_equals: failure should set href to input expected "a" but got ""
+FAIL Parsing: <a/> against <about:blank> assert_equals: failure should set href to input expected "a/" but got ""
+FAIL Parsing: <a//> against <about:blank> assert_equals: failure should set href to input expected "a//" but got ""
+FAIL Parsing: <test-a-colon.html> against <a:> assert_equals: failure should set href to input expected "test-a-colon.html" but got ""
+FAIL Parsing: <test-a-colon-b.html> against <a:b> assert_equals: failure should set href to input expected "test-a-colon-b.html" but got ""
+PASS Parsing: <test-a-colon-slash.html> against <a:/>
+FAIL Parsing: <test-a-colon-slash-slash.html> against <a://> assert_equals: href expected "a:///test-a-colon-slash-slash.html" but got ""
+PASS Parsing: <test-a-colon-slash-b.html> against <a:/b>
+FAIL Parsing: <test-a-colon-slash-slash-b.html> against <a://b> assert_equals: href expected "a://b/test-a-colon-slash-slash-b.html" but got "a://b"
+PASS Parsing: <http://example.org/test?a#b\0c> against <about:blank>
+FAIL Parsing: <non-spec://example.org/test?a#b\0c> against <about:blank> assert_equals: host expected "example.org" but got ""
+PASS Parsing: <non-spec:/test?a#b\0c> against <about:blank>
+PASS Parsing: <a1234567890-+.:foo/bar> against <http://example.com/dir/file>
+PASS Parsing: <#link> against <https://example.org/##link>
+PASS Parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Parsing: <https://user:pass[@foo/bar> against <http://example.org>
+FAIL Parsing: <foo:// !"$%&'()*+,-.;<=>@[\]^_`{|}~@host/> against <about:blank> assert_equals: href expected "foo://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/" but got "foo:// !\"$%&'()*+,-.;<=>@[\\]^_`{|}~@host/"
+FAIL Parsing: <wss:// !"$%&'()*+,-.;<=>@[]^_`{|}~@host/> against <about:blank> assert_equals: href expected "wss://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/" but got "wss://%20!%22$%&%27()*+,-.%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/"
+FAIL Parsing: <foo://joe: !"$%&'()*+,-.:;<=>@[\]^_`{|}~@host/> against <about:blank> assert_equals: href expected "foo://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/" but got "foo://joe: !\"$%&'()*+,-.:;<=>@[\\]^_`{|}~@host/"
+FAIL Parsing: <wss://joe: !"$%&'()*+,-.:;<=>@[]^_`{|}~@host/> against <about:blank> assert_equals: href expected "wss://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/" but got "wss://joe:%20!%22$%&%27()*+,-.%3A%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/"
+FAIL Parsing: <foo://!"$%&'()*+,-.;=_`{}~/> against <about:blank> assert_equals: host expected "!\"$%&'()*+,-.;=_`{}~" but got ""
+FAIL Parsing: <wss://!"$&'()*+,-.;=_`{}~/> against <about:blank> assert_equals: href expected "wss://!\"$&'()*+,-.;=_`{}~/" but got "wss://%21%22%24%26%27%28%29%2A+%2C-.%3B%3D_%60%7B%7D%7E/"
+FAIL Parsing: <foo://host/ !"$%&'()*+,-./:;<=>@[\]^_`{|}~> against <about:blank> assert_equals: href expected "foo://host/%20!%22$%&'()*+,-./:;%3C=%3E@[\\]^_%60%7B|%7D~" but got "foo://host/ !\"$%&'()*+,-./:;<=>@[\\]^_`{|}~"
+FAIL Parsing: <wss://host/ !"$%&'()*+,-./:;<=>@[\]^_`{|}~> against <about:blank> assert_equals: href expected "wss://host/%20!%22$%&'()*+,-./:;%3C=%3E@[/]^_%60%7B|%7D~" but got "wss://host/%20!%22$%&'()*+,-./:;%3C=%3E@[/]%5E_%60%7B%7C%7D~"
+FAIL Parsing: <foo://host/dir/? !"$%&'()*+,-./:;<=>?@[\]^_`{|}~> against <about:blank> assert_equals: href expected "foo://host/dir/?%20!%22$%&'()*+,-./:;%3C=%3E?@[\\]^_`{|}~" but got "foo://host/dir/?%20!%22$%&%27()*+,-./:;%3C=%3E?@[\\]^_`{|}~"
+PASS Parsing: <wss://host/dir/? !"$%&'()*+,-./:;<=>?@[\]^_`{|}~> against <about:blank>
+FAIL Parsing: <foo://host/dir/# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~> against <about:blank> assert_equals: host expected "host" but got ""
+PASS Parsing: <wss://host/dir/# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~> against <about:blank>
+FAIL Parsing: <abc:rootless> against <abc://host/path> assert_equals: href expected "abc:rootless" but got "abc://host/rootless"
+FAIL Parsing: <abc:rootless> against <abc:/path> assert_equals: href expected "abc:rootless" but got "abc:/rootless"
+PASS Parsing: <abc:rootless> against <abc:path>
+FAIL Parsing: <abc:/rooted> against <abc://host/path> assert_equals: href expected "abc:/rooted" but got "abc://host/rooted"
+FAIL Parsing: <http://1.2.3.4.5> against <http://other.com/> assert_equals: failure should set href to input expected "http://1.2.3.4.5" but got "http://1.2.3.4.5/"
+FAIL Parsing: <http://1.2.3.4.5.> against <http://other.com/> assert_equals: failure should set href to input expected "http://1.2.3.4.5." but got "http://1.2.3.4.5./"
+PASS Parsing: <http://0..0x300/> against <about:blank>
+PASS Parsing: <http://0..0x300./> against <about:blank>
+FAIL Parsing: <http://256.256.256.256.256> against <http://other.com/> assert_equals: failure should set href to input expected "http://256.256.256.256.256" but got "http://256.256.256.256.256/"
+FAIL Parsing: <http://256.256.256.256.256.> against <http://other.com/> assert_equals: failure should set href to input expected "http://256.256.256.256.256." but got "http://256.256.256.256.256./"
+FAIL Parsing: <http://1.2.3.08> against <about:blank> assert_equals: failure should set href to input expected "http://1.2.3.08" but got "http://1.2.3.08/"
+FAIL Parsing: <http://1.2.3.08.> against <about:blank> assert_equals: failure should set href to input expected "http://1.2.3.08." but got "http://1.2.3.08./"
+FAIL Parsing: <http://1.2.3.09> against <about:blank> assert_equals: failure should set href to input expected "http://1.2.3.09" but got "http://1.2.3.09/"
+FAIL Parsing: <http://09.2.3.4> against <about:blank> assert_equals: failure should set href to input expected "http://09.2.3.4" but got "http://09.2.3.4/"
+FAIL Parsing: <http://09.2.3.4.> against <about:blank> assert_equals: failure should set href to input expected "http://09.2.3.4." but got "http://09.2.3.4./"
+FAIL Parsing: <http://01.2.3.4.5> against <about:blank> assert_equals: failure should set href to input expected "http://01.2.3.4.5" but got "http://01.2.3.4.5/"
+FAIL Parsing: <http://01.2.3.4.5.> against <about:blank> assert_equals: failure should set href to input expected "http://01.2.3.4.5." but got "http://01.2.3.4.5./"
+FAIL Parsing: <http://0x100.2.3.4> against <about:blank> assert_equals: failure should set href to input expected "http://0x100.2.3.4" but got "http://0x100.2.3.4/"
+FAIL Parsing: <http://0x100.2.3.4.> against <about:blank> assert_equals: failure should set href to input expected "http://0x100.2.3.4." but got "http://0x100.2.3.4./"
+FAIL Parsing: <http://0x1.2.3.4.5> against <about:blank> assert_equals: failure should set href to input expected "http://0x1.2.3.4.5" but got "http://0x1.2.3.4.5/"
+FAIL Parsing: <http://0x1.2.3.4.5.> against <about:blank> assert_equals: failure should set href to input expected "http://0x1.2.3.4.5." but got "http://0x1.2.3.4.5./"
+FAIL Parsing: <http://foo.1.2.3.4> against <about:blank> assert_equals: failure should set href to input expected "http://foo.1.2.3.4" but got "http://foo.1.2.3.4/"
+FAIL Parsing: <http://foo.1.2.3.4.> against <about:blank> assert_equals: failure should set href to input expected "http://foo.1.2.3.4." but got "http://foo.1.2.3.4./"
+FAIL Parsing: <http://foo.2.3.4> against <about:blank> assert_equals: failure should set href to input expected "http://foo.2.3.4" but got "http://foo.2.3.4/"
+FAIL Parsing: <http://foo.2.3.4.> against <about:blank> assert_equals: failure should set href to input expected "http://foo.2.3.4." but got "http://foo.2.3.4./"
+FAIL Parsing: <http://foo.09> against <about:blank> assert_equals: failure should set href to input expected "http://foo.09" but got "http://foo.09/"
+FAIL Parsing: <http://foo.09.> against <about:blank> assert_equals: failure should set href to input expected "http://foo.09." but got "http://foo.09./"
+FAIL Parsing: <http://foo.0x4> against <about:blank> assert_equals: failure should set href to input expected "http://foo.0x4" but got "http://foo.0x4/"
+FAIL Parsing: <http://foo.0x4.> against <about:blank> assert_equals: failure should set href to input expected "http://foo.0x4." but got "http://foo.0x4./"
+PASS Parsing: <http://foo.09..> against <about:blank>
+PASS Parsing: <http://0999999999999999999/> against <about:blank>
+FAIL Parsing: <http://foo.0x> against <about:blank> assert_equals: failure should set href to input expected "http://foo.0x" but got "http://foo.0x/"
+FAIL Parsing: <http://foo.0XFfFfFfFfFfFfFfFfFfAcE123> against <about:blank> assert_equals: failure should set href to input expected "http://foo.0XFfFfFfFfFfFfFfFfFfAcE123" but got "http://foo.0xfffffffffffffffffface123/"
+FAIL Parsing: <http://💩.123/> against <about:blank> assert_equals: failure should set href to input expected "http://💩.123/" but got "http://xn--ls8h.123/"
+FAIL Parsing: <https://\0y> against <about:blank> assert_equals: failure should set href to input expected "https://\0y" but got "https://%00y/"
+FAIL Parsing: <https://x/\0y> against <about:blank> assert_equals: protocol expected "https:" but got ":"
+PASS Parsing: <https://x/?\0y> against <about:blank>
+PASS Parsing: <https://x/?#\0y> against <about:blank>
+FAIL Parsing: <https://￿y> against <about:blank> assert_equals: failure should set href to input expected "https://\uffffy" but got "https://%EF%BF%BDy/"
+FAIL Parsing: <https://x/￿y> against <about:blank> assert_equals: href expected "https://x/%EF%BF%BFy" but got "https://x/%EF%BF%BDy"
+FAIL Parsing: <https://x/?￿y> against <about:blank> assert_equals: href expected "https://x/?%EF%BF%BFy" but got "https://x/?%EF%BF%BDy"
+FAIL Parsing: <https://x/?#￿y> against <about:blank> assert_equals: href expected "https://x/?#%EF%BF%BFy" but got "https://x/?#%EF%BF%BDy"
+PASS Parsing: <non-special:\0y> against <about:blank>
+PASS Parsing: <non-special:x/\0y> against <about:blank>
+PASS Parsing: <non-special:x/?\0y> against <about:blank>
+PASS Parsing: <non-special:x/?#\0y> against <about:blank>
+FAIL Parsing: <non-special:￿y> against <about:blank> assert_equals: href expected "non-special:%EF%BF%BFy" but got "non-special:%EF%BF%BDy"
+FAIL Parsing: <non-special:x/￿y> against <about:blank> assert_equals: href expected "non-special:x/%EF%BF%BFy" but got "non-special:x/%EF%BF%BDy"
+FAIL Parsing: <non-special:x/?￿y> against <about:blank> assert_equals: href expected "non-special:x/?%EF%BF%BFy" but got "non-special:x/?%EF%BF%BDy"
+FAIL Parsing: <non-special:x/?#￿y> against <about:blank> assert_equals: href expected "non-special:x/?#%EF%BF%BFy" but got "non-special:x/?#%EF%BF%BDy"
+Harness: the test ran to completion.
+
diff --git "a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/idna-2008/external/wpt/url/a-element-xhtml_exclude=\050file_javascript_mailto\051-expected.txt" "b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/idna-2008/external/wpt/url/a-element-xhtml_exclude=\050file_javascript_mailto\051-expected.txt"
new file mode 100644
index 0000000..ddb2a07f
--- /dev/null
+++ "b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/idna-2008/external/wpt/url/a-element-xhtml_exclude=\050file_javascript_mailto\051-expected.txt"
@@ -0,0 +1,634 @@
+This is a testharness.js-based test.
+Found 619 tests; 343 PASS, 276 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Parsing: <https://test:@test> against <about:blank>
+PASS Parsing: <https://:@test> against <about:blank>
+FAIL Parsing: <non-special://test:@test/x> against <about:blank> assert_equals: href expected "non-special://test@test/x" but got "non-special://test:@test/x"
+FAIL Parsing: <non-special://:@test/x> against <about:blank> assert_equals: href expected "non-special://test/x" but got "non-special://:@test/x"
+PASS Parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+PASS Parsing: <lolscheme:x x#x x> against <about:blank>
+PASS Parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:b/c> against <http://example.org/foo/bar>
+FAIL Parsing: <http://f: /c> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://f: /c" but got "http://f:%20/c"
+PASS Parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:999999/c> against <http://example.org/foo/bar>
+FAIL Parsing: <non-special://f:999999/c> against <http://example.org/foo/bar> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://f: 21 / b ? d # e " but got "http://f:%2021%20/%20b%20?%20d%20#%20e"
+PASS Parsing: <> against <http://example.org/foo/bar>
+PASS Parsing: <  	> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <:> against <http://example.org/foo/bar>
+PASS Parsing: <:a> against <http://example.org/foo/bar>
+PASS Parsing: <:/> against <http://example.org/foo/bar>
+PASS Parsing: <:\> against <http://example.org/foo/bar>
+PASS Parsing: <:#> against <http://example.org/foo/bar>
+PASS Parsing: <#> against <http://example.org/foo/bar>
+PASS Parsing: <#/> against <http://example.org/foo/bar>
+PASS Parsing: <#\> against <http://example.org/foo/bar>
+PASS Parsing: <#;?> against <http://example.org/foo/bar>
+PASS Parsing: <?> against <http://example.org/foo/bar>
+PASS Parsing: </> against <http://example.org/foo/bar>
+PASS Parsing: <:23> against <http://example.org/foo/bar>
+PASS Parsing: </:23> against <http://example.org/foo/bar>
+PASS Parsing: <\x> against <http://example.org/foo/bar>
+PASS Parsing: <\\x\hello> against <http://example.org/foo/bar>
+PASS Parsing: <::> against <http://example.org/foo/bar>
+PASS Parsing: <::23> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://> against <http://example.org/foo/bar> assert_equals: pathname expected "" but got "//"
+PASS Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://///////> against <http://example.org/foo/bar> assert_equals: pathname expected "///////" but got "/////////"
+FAIL Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> assert_equals: pathname expected "///////bar.com/" but got "/////////bar.com/"
+FAIL Parsing: <foo:////://///> against <http://example.org/foo/bar> assert_equals: pathname expected "//://///" but got "////://///"
+PASS Parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+FAIL Parsing: <http://[1::2]:3:4> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://[1::2]:3:4" but got "http://[1::2]:3:4/"
+FAIL Parsing: <http://2001::1> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://2001::1" but got "http://2001::1/"
+FAIL Parsing: <http://2001::1]> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://2001::1]" but got "http://2001::1]/"
+FAIL Parsing: <http://2001::1]:80> against <http://example.org/foo/bar> assert_equals: failure should set href to input expected "http://2001::1]:80" but got "http://2001::1]/"
+PASS Parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Parsing: <#β> against <http://example.org/foo/bar>
+PASS Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Parsing: <tel:1234567890> against <http://example.org/foo/bar>
+FAIL Parsing: <ssh://example.com/foo/bar.git> against <http://example.org/> assert_equals: host expected "example.com" but got ""
+PASS Parsing: <http://example.com/././foo> against <about:blank>
+PASS Parsing: <http://example.com/./.foo> against <about:blank>
+PASS Parsing: <http://example.com/foo/.> against <about:blank>
+PASS Parsing: <http://example.com/foo/./> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
+FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/%2e%2" but got "http://example.com/foo/.%2"
+FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/%2e.bar" but got "http://example.com/..bar"
+PASS Parsing: <http://example.com////../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Parsing: <http://example.com/foo> against <about:blank>
+PASS Parsing: <http://example.com/%20foo> against <about:blank>
+PASS Parsing: <http://example.com/foo%> against <about:blank>
+PASS Parsing: <http://example.com/foo%2> against <about:blank>
+PASS Parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Parsing: <http://example.com/foo%2©zbar> against <about:blank>
+FAIL Parsing: <http://example.com/foo%41%7a> against <about:blank> assert_equals: href expected "http://example.com/foo%41%7a" but got "http://example.com/fooAz"
+PASS Parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Parsing: <http://example.com/foo%00%51> against <about:blank> assert_equals: href expected "http://example.com/foo%00%51" but got "http://example.com/foo%00Q"
+PASS Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Parsing: <http://example.com/你好你好> against <about:blank>
+PASS Parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Parsing: <http://example.com//foo> against <about:blank>
+PASS Parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+PASS Parsing: <data:test# »> against <about:blank>
+PASS Parsing: <http://www.google.com> against <about:blank>
+PASS Parsing: <http://192.0x00A80001> against <about:blank>
+FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo%2Ehtml" but got "http://www/foo.html"
+PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Parsing: <http://user:pass@/> against <about:blank>
+PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Parsing: <http://foo:80/> against <about:blank>
+PASS Parsing: <http://foo:81/> against <about:blank>
+FAIL Parsing: <httpa://foo:80/> against <about:blank> assert_equals: host expected "foo:80" but got ""
+PASS Parsing: <http://foo:-80/> against <about:blank>
+PASS Parsing: <https://foo:443/> against <about:blank>
+PASS Parsing: <https://foo:80/> against <about:blank>
+PASS Parsing: <ftp://foo:21/> against <about:blank>
+PASS Parsing: <ftp://foo:80/> against <about:blank>
+FAIL Parsing: <gopher://foo:70/> against <about:blank> assert_equals: host expected "foo:70" but got ""
+FAIL Parsing: <gopher://foo:443/> against <about:blank> assert_equals: host expected "foo:443" but got ""
+PASS Parsing: <ws://foo:80/> against <about:blank>
+PASS Parsing: <ws://foo:81/> against <about:blank>
+PASS Parsing: <ws://foo:443/> against <about:blank>
+PASS Parsing: <ws://foo:815/> against <about:blank>
+PASS Parsing: <wss://foo:80/> against <about:blank>
+PASS Parsing: <wss://foo:81/> against <about:blank>
+PASS Parsing: <wss://foo:443/> against <about:blank>
+PASS Parsing: <wss://foo:815/> against <about:blank>
+PASS Parsing: <http:/example.com/> against <about:blank>
+PASS Parsing: <ftp:/example.com/> against <about:blank>
+PASS Parsing: <https:/example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <about:blank>
+PASS Parsing: <gopher:/example.com/> against <about:blank>
+PASS Parsing: <ws:/example.com/> against <about:blank>
+PASS Parsing: <wss:/example.com/> against <about:blank>
+PASS Parsing: <data:/example.com/> against <about:blank>
+PASS Parsing: <http:example.com/> against <about:blank>
+PASS Parsing: <ftp:example.com/> against <about:blank>
+PASS Parsing: <https:example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Parsing: <ftps:example.com/> against <about:blank>
+PASS Parsing: <gopher:example.com/> against <about:blank>
+PASS Parsing: <ws:example.com/> against <about:blank>
+PASS Parsing: <wss:example.com/> against <about:blank>
+PASS Parsing: <data:example.com/> against <about:blank>
+PASS Parsing: <http:@www.example.com> against <about:blank>
+PASS Parsing: <http:/@www.example.com> against <about:blank>
+PASS Parsing: <http://@www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://@pple.com> against <about:blank>
+PASS Parsing: <http::b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Parsing: <http://:b@www.example.com> against <about:blank>
+FAIL Parsing: <http:/:@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:/:@/www.example.com" but got "http:///www.example.com"
+PASS Parsing: <http://user@/www.example.com> against <about:blank>
+FAIL Parsing: <http:@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:@/www.example.com" but got "http:///www.example.com"
+FAIL Parsing: <http:/@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:/@/www.example.com" but got "http:///www.example.com"
+FAIL Parsing: <http://@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http://@/www.example.com" but got "http:///www.example.com"
+FAIL Parsing: <https:@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "https:@/www.example.com" but got "https:///www.example.com"
+FAIL Parsing: <http:a:b@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:a:b@/www.example.com" but got "http://a:b@/www.example.com"
+FAIL Parsing: <http:/a:b@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:/a:b@/www.example.com" but got "http://a:b@/www.example.com"
+PASS Parsing: <http://a:b@/www.example.com> against <about:blank>
+FAIL Parsing: <http::@/www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http::@/www.example.com" but got "http:///www.example.com"
+PASS Parsing: <http:a:@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Parsing: <http://a:@www.example.com> against <about:blank>
+PASS Parsing: <http://www.@pple.com> against <about:blank>
+FAIL Parsing: <http:@:www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:@:www.example.com" but got "http://:www.example.com/"
+FAIL Parsing: <http:/@:www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http:/@:www.example.com" but got "http://:www.example.com/"
+FAIL Parsing: <http://@:www.example.com> against <about:blank> assert_equals: failure should set href to input expected "http://@:www.example.com" but got "http://:www.example.com/"
+PASS Parsing: <http://:@www.example.com> against <about:blank>
+PASS Parsing: </> against <http://www.example.com/test>
+PASS Parsing: </test.txt> against <http://www.example.com/test>
+PASS Parsing: <.> against <http://www.example.com/test>
+PASS Parsing: <..> against <http://www.example.com/test>
+PASS Parsing: <test.txt> against <http://www.example.com/test>
+PASS Parsing: <./test.txt> against <http://www.example.com/test>
+PASS Parsing: <../test.txt> against <http://www.example.com/test>
+PASS Parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+FAIL Parsing: <http://example example.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://[]> against <http://other.com/> assert_equals: failure should set href to input expected "http://[]" but got "http://[]/"
+FAIL Parsing: <http://[:]> against <http://other.com/> assert_equals: failure should set href to input expected "http://[:]" but got "http://[:]/"
+FAIL Parsing: <http://GOO  goo.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Parsing: <http://www.foo。bar.com> against <http://other.com/>
+FAIL Parsing: <http://﷐zyx.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://﷐zyx.com" but got "http://%EF%BF%BDzyx.com/"
+FAIL Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://%ef%b7%90zyx.com" but got "http://%EF%BF%BDzyx.com/"
+FAIL Parsing: <https://�> against <about:blank> assert_equals: failure should set href to input expected "https://\ufffd" but got "https://%EF%BF%BD/"
+FAIL Parsing: <https://%EF%BF%BD> against <about:blank> assert_equals: failure should set href to input expected "https://%EF%BF%BD" but got "https://%EF%BF%BD/"
+PASS Parsing: <https://x/�?�#�> against <about:blank>
+FAIL Parsing: <http://a.b.c.xn--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://10.0.0.xn--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://a.b.c.XN--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://a.b.c.Xn--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://10.0.0.XN--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://10.0.0.xN--pokxncvks> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://Go.com> against <http://other.com/>
+FAIL Parsing: <http://%41.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://%00.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://%00.com" but got "http://%00.com/"
+FAIL Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://%ef%bc%85%ef%bc%90%ef%bc%90.com" but got "http://%00.com/"
+PASS Parsing: <http://你好你好> against <http://other.com/>
+PASS Parsing: <https://faß.ExAmPlE/> against <about:blank>
+FAIL Parsing: <sc://faß.ExAmPlE/> against <about:blank> assert_equals: host expected "fa%C3%9F.ExAmPlE" but got ""
+FAIL Parsing: <http://%zz%66%a.com> against <http://other.com/> assert_equals: failure should set href to input expected "http://%zz%66%a.com" but got "http://%25zzf%25a.com/"
+FAIL Parsing: <http://%25> against <http://other.com/> assert_equals: failure should set href to input expected "http://%25" but got "http://%25/"
+FAIL Parsing: <http://hello%00> against <http://other.com/> assert_equals: failure should set href to input expected "http://hello%00" but got "http://hello%00/"
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+FAIL Parsing: <http://192.168.0.257> against <http://other.com/> assert_equals: failure should set href to input expected "http://192.168.0.257" but got "http://192.168.0.257/"
+FAIL Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/> assert_equals: failure should set href to input expected "http://%3g%78%63%30%2e%30%32%35%30%2E.01" but got "http://%253gxc0.0250..01/"
+FAIL Parsing: <http://192.168.0.1 hello> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <https://x x:12> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Parsing: <http://./> against <about:blank>
+PASS Parsing: <http://../> against <about:blank>
+FAIL Parsing: <h://.> against <about:blank> assert_equals: host expected "." but got ""
+PASS Parsing: <http://[www.google.com]/> against <about:blank>
+FAIL Parsing: <http://[google.com]> against <http://other.com/> assert_equals: failure should set href to input expected "http://[google.com]" but got "http://[google.com]/"
+FAIL Parsing: <http://[::1.2.3.4x]> against <http://other.com/> assert_equals: failure should set href to input expected "http://[::1.2.3.4x]" but got "http://[::1.2.3.4x]/"
+FAIL Parsing: <http://[::1.2.3.]> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://[::1.2.]> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://[::1.]> against <http://other.com/> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Parsing: <#> against <test:test>
+FAIL Parsing: <#x> against <data:,> assert_equals: href expected "data:,#x" but got "test:test#x"
+PASS Parsing: <#x> against <about:blank>
+PASS Parsing: <#> against <test:test?test>
+PASS Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Parsing: <http://host/?'> against <about:blank>
+FAIL Parsing: <notspecial://host/?'> against <about:blank> assert_equals: href expected "notspecial://host/?'" but got "notspecial://host/?%27"
+PASS Parsing: </some/path> against <http://user@example.org/smth>
+PASS Parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Parsing: </some/path> against <http://user:pass@example.org:21/smth>
+FAIL Parsing: <i> against <sc:sd> assert_equals: failure should set href to input expected "i" but got ""
+FAIL Parsing: <i> against <sc:sd/sd> assert_equals: failure should set href to input expected "i" but got ""
+PASS Parsing: <i> against <sc:/pa/pa>
+FAIL Parsing: <i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/i" but got "///pa/i"
+FAIL Parsing: <../i> against <sc:sd> assert_equals: failure should set href to input expected "../i" but got ""
+FAIL Parsing: <../i> against <sc:sd/sd> assert_equals: failure should set href to input expected "../i" but got ""
+PASS Parsing: <../i> against <sc:/pa/pa>
+FAIL Parsing: <../i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <../i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+FAIL Parsing: </i> against <sc:sd> assert_equals: failure should set href to input expected "/i" but got ""
+FAIL Parsing: </i> against <sc:sd/sd> assert_equals: failure should set href to input expected "/i" but got ""
+PASS Parsing: </i> against <sc:/pa/pa>
+FAIL Parsing: </i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: </i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+FAIL Parsing: <?i> against <sc:sd> assert_equals: failure should set href to input expected "?i" but got ""
+FAIL Parsing: <?i> against <sc:sd/sd> assert_equals: failure should set href to input expected "?i" but got ""
+PASS Parsing: <?i> against <sc:/pa/pa>
+FAIL Parsing: <?i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <?i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+PASS Parsing: <#i> against <sc:sd>
+PASS Parsing: <#i> against <sc:sd/sd>
+PASS Parsing: <#i> against <sc:/pa/pa>
+FAIL Parsing: <#i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <#i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+FAIL Parsing: <about:/../> against <about:blank> assert_equals: href expected "about:/" but got "about:/../"
+FAIL Parsing: <data:/../> against <about:blank> assert_equals: href expected "data:/" but got "data:/../"
+FAIL Parsing: <sc://ñ.test/> against <about:blank> assert_equals: host expected "%C3%B1.test" but got ""
+FAIL Parsing: <sc://%/> against <about:blank> assert_equals: host expected "%" but got ""
+FAIL Parsing: <sc://@/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://te@s:t@/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://:/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://:12/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <x> against <sc://ñ> assert_equals: href expected "sc://%C3%B1/x" but got "sc://%C3%B1"
+PASS Parsing: <sc:\../> against <about:blank>
+PASS Parsing: <sc::a@example.net> against <about:blank>
+PASS Parsing: <wow:%NBD> against <about:blank>
+PASS Parsing: <wow:%1G> against <about:blank>
+FAIL Parsing: <wow:￿> against <about:blank> assert_equals: href expected "wow:%EF%BF%BF" but got "wow:%EF%BF%BD"
+FAIL Parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> assert_equals: href expected "http://example.com/%EF%BF%BD%F0%90%9F%BE%EF%BF%BD%EF%B7%90%EF%B7%8F%EF%B7%AF%EF%B7%B0%EF%BF%BE%EF%BF%BF?%EF%BF%BD%F0%90%9F%BE%EF%BF%BD%EF%B7%90%EF%B7%8F%EF%B7%AF%EF%B7%B0%EF%BF%BE%EF%BF%BF" but got "http://example.com/%EF%BF%BD%F0%90%9F%BE%EF%BF%BD%EF%BF%BD%EF%B7%8F%EF%BF%BD%EF%B7%B0%EF%BF%BD%EF%BF%BD?%EF%BF%BD%F0%90%9F%BE%EF%BF%BD%EF%BF%BD%EF%B7%8F%EF%BF%BD%EF%B7%B0%EF%BF%BD%EF%BF%BD"
+FAIL Parsing: <sc://a\0b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a<b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a>b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a[b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a\b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a]b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a^b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <sc://a|b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <foo://ho	st/> against <about:blank> assert_equals: host expected "host" but got ""
+FAIL Parsing: <foo://ho
+st/> against <about:blank> assert_equals: host expected "host" but got ""
+FAIL Parsing: <foo://ho\rst/> against <about:blank> assert_equals: host expected "host" but got ""
+FAIL Parsing: <http://a\0b/> against <about:blank> assert_equals: failure should set href to input expected "http://a\0b/" but got "http://a%00b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x01b/" but got "http://a%01b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x02b/" but got "http://a%02b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x03b/" but got "http://a%03b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x04b/" but got "http://a%04b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x05b/" but got "http://a%05b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x06b/" but got "http://a%06b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x07b/" but got "http://a%07b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\bb/" but got "http://a%08b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\vb/" but got "http://a%0Bb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\fb/" but got "http://a%0Cb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x0eb/" but got "http://a%0Eb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x0fb/" but got "http://a%0Fb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x10b/" but got "http://a%10b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x11b/" but got "http://a%11b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x12b/" but got "http://a%12b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x13b/" but got "http://a%13b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x14b/" but got "http://a%14b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x15b/" but got "http://a%15b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x16b/" but got "http://a%16b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x17b/" but got "http://a%17b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x18b/" but got "http://a%18b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x19b/" but got "http://a%19b/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1ab/" but got "http://a%1Ab/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1bb/" but got "http://a%1Bb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1cb/" but got "http://a%1Cb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1db/" but got "http://a%1Db/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1eb/" but got "http://a%1Eb/"
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://a\x1fb/" but got "http://a%1Fb/"
+FAIL Parsing: <http://a b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://a%b/> against <about:blank> assert_equals: failure should set href to input expected "http://a%b/" but got "http://a%25b/"
+FAIL Parsing: <http://a<b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://a>b> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://a[b/> against <about:blank>
+PASS Parsing: <http://a]b/> against <about:blank>
+FAIL Parsing: <http://a^b> against <about:blank> assert_equals: failure should set href to input expected "http://a^b" but got "http://a%5Eb/"
+FAIL Parsing: <http://a|b/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://ab/> against <about:blank> assert_equals: failure should set href to input expected "http://ab/" but got "http://a%7Fb/"
+PASS Parsing: <http://ho	st/> against <about:blank>
+PASS Parsing: <http://ho
+st/> against <about:blank>
+PASS Parsing: <http://ho\rst/> against <about:blank>
+PASS Parsing: <http://ho%00st/> against <about:blank>
+PASS Parsing: <http://ho%01st/> against <about:blank>
+PASS Parsing: <http://ho%02st/> against <about:blank>
+PASS Parsing: <http://ho%03st/> against <about:blank>
+PASS Parsing: <http://ho%04st/> against <about:blank>
+PASS Parsing: <http://ho%05st/> against <about:blank>
+PASS Parsing: <http://ho%06st/> against <about:blank>
+PASS Parsing: <http://ho%07st/> against <about:blank>
+PASS Parsing: <http://ho%08st/> against <about:blank>
+PASS Parsing: <http://ho%09st/> against <about:blank>
+PASS Parsing: <http://ho%0Ast/> against <about:blank>
+PASS Parsing: <http://ho%0Bst/> against <about:blank>
+PASS Parsing: <http://ho%0Cst/> against <about:blank>
+PASS Parsing: <http://ho%0Dst/> against <about:blank>
+PASS Parsing: <http://ho%0Est/> against <about:blank>
+PASS Parsing: <http://ho%0Fst/> against <about:blank>
+PASS Parsing: <http://ho%10st/> against <about:blank>
+PASS Parsing: <http://ho%11st/> against <about:blank>
+PASS Parsing: <http://ho%12st/> against <about:blank>
+PASS Parsing: <http://ho%13st/> against <about:blank>
+PASS Parsing: <http://ho%14st/> against <about:blank>
+PASS Parsing: <http://ho%15st/> against <about:blank>
+PASS Parsing: <http://ho%16st/> against <about:blank>
+PASS Parsing: <http://ho%17st/> against <about:blank>
+PASS Parsing: <http://ho%18st/> against <about:blank>
+PASS Parsing: <http://ho%19st/> against <about:blank>
+PASS Parsing: <http://ho%1Ast/> against <about:blank>
+PASS Parsing: <http://ho%1Bst/> against <about:blank>
+PASS Parsing: <http://ho%1Cst/> against <about:blank>
+PASS Parsing: <http://ho%1Dst/> against <about:blank>
+PASS Parsing: <http://ho%1Est/> against <about:blank>
+PASS Parsing: <http://ho%1Fst/> against <about:blank>
+FAIL Parsing: <http://ho%20st/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://ho%23st/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://ho%25st/> against <about:blank>
+PASS Parsing: <http://ho%2Fst/> against <about:blank>
+FAIL Parsing: <http://ho%3Ast/> against <about:blank> assert_equals: failure should set href to input expected "http://ho%3Ast/" but got "http://ho:st/"
+FAIL Parsing: <http://ho%3Cst/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://ho%3Est/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://ho%3Fst/> against <about:blank>
+FAIL Parsing: <http://ho%40st/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <http://ho%5Bst/> against <about:blank> assert_equals: failure should set href to input expected "http://ho%5Bst/" but got "http://ho[st/"
+PASS Parsing: <http://ho%5Cst/> against <about:blank>
+FAIL Parsing: <http://ho%5Dst/> against <about:blank> assert_equals: failure should set href to input expected "http://ho%5Dst/" but got "http://ho]st/"
+FAIL Parsing: <http://ho%7Cst/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <http://ho%7Fst/> against <about:blank>
+FAIL Parsing: <http://!"$&'()*+,-.;=_`{}~/> against <about:blank> assert_equals: href expected "http://!\"$&'()*+,-.;=_`{}~/" but got "http://%21%22%24%26%27%28%29%2A+%2C-.%3B%3D_%60%7B%7D%7E/"
+FAIL Parsing: <sc://!"$%&'()*+,-.;=_`{}~/> against <about:blank> assert_equals: host expected "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~" but got ""
+FAIL Parsing: <ftp://example.com%80/> against <about:blank> assert_equals: failure should set href to input expected "ftp://example.com%80/" but got "ftp://example.com%EF%BF%BD/"
+FAIL Parsing: <ftp://example.com%A0/> against <about:blank> assert_equals: failure should set href to input expected "ftp://example.com%A0/" but got "ftp://example.com%EF%BF%BD/"
+FAIL Parsing: <https://example.com%80/> against <about:blank> assert_equals: failure should set href to input expected "https://example.com%80/" but got "https://example.com%EF%BF%BD/"
+FAIL Parsing: <https://example.com%A0/> against <about:blank> assert_equals: failure should set href to input expected "https://example.com%A0/" but got "https://example.com%EF%BF%BD/"
+PASS Parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Parsing: <https://%e2%98%83> against <about:blank>
+PASS Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <https://example.org/foo/bar>
+PASS Parsing: <sc:> against <https://example.org/foo/bar>
+PASS Parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Parsing: <http://1.2.3.4/> against <http://other.com/>
+PASS Parsing: <http://1.2.3.4./> against <http://other.com/>
+PASS Parsing: <http://192.168.257> against <http://other.com/>
+PASS Parsing: <http://192.168.257.> against <http://other.com/>
+PASS Parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Parsing: <http://256> against <http://other.com/>
+PASS Parsing: <http://256.com> against <http://other.com/>
+PASS Parsing: <http://999999999> against <http://other.com/>
+PASS Parsing: <http://999999999.> against <http://other.com/>
+PASS Parsing: <http://999999999.com> against <http://other.com/>
+FAIL Parsing: <http://10000000000> against <http://other.com/> assert_equals: failure should set href to input expected "http://10000000000" but got "http://10000000000/"
+PASS Parsing: <http://10000000000.com> against <http://other.com/>
+PASS Parsing: <http://4294967295> against <http://other.com/>
+FAIL Parsing: <http://4294967296> against <http://other.com/> assert_equals: failure should set href to input expected "http://4294967296" but got "http://4294967296/"
+PASS Parsing: <http://0xffffffff> against <http://other.com/>
+FAIL Parsing: <http://0xffffffff1> against <http://other.com/> assert_equals: failure should set href to input expected "http://0xffffffff1" but got "http://0xffffffff1/"
+FAIL Parsing: <http://256.256.256.256> against <http://other.com/> assert_equals: failure should set href to input expected "http://256.256.256.256" but got "http://256.256.256.256/"
+PASS Parsing: <https://0x.0x.0> against <about:blank>
+PASS Parsing: <https://0x100000000/test> against <about:blank>
+PASS Parsing: <https://256.0.0.1/test> against <about:blank>
+FAIL Parsing: <https://%43%7C/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <asdf://%43|/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+FAIL Parsing: <asdf://%43%7C/> against <about:blank> assert_equals: host expected "%43%7C" but got ""
+FAIL Parsing: <\\\.\Y:> against <about:blank> assert_equals: failure should set href to input expected "\\\\\\.\\Y:" but got ""
+FAIL Parsing: <\\\.\y:> against <about:blank> assert_equals: failure should set href to input expected "\\\\\\.\\y:" but got ""
+PASS Parsing: <http://[1:0::]> against <http://example.net/>
+FAIL Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/> assert_equals: failure should set href to input expected "http://[0:1:2:3:4:5:6:7:8]" but got "http://[0:1:2:3:4:5:6:7:8]/"
+FAIL Parsing: <https://[0::0::0]> against <about:blank> assert_equals: failure should set href to input expected "https://[0::0::0]" but got "https://[0::0::0]/"
+FAIL Parsing: <https://[0:.0]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:.0]" but got "https://[0:.0]/"
+FAIL Parsing: <https://[0:0:]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:0:]" but got "https://[0:0:]/"
+FAIL Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:1:2:3:4:5:6:7.0.0.0.1]" but got "https://[0:1:2:3:4:5:6:7.0.0.0.1]/"
+FAIL Parsing: <https://[0:1.00.0.0.0]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:1.00.0.0.0]" but got "https://[0:1.00.0.0.0]/"
+FAIL Parsing: <https://[0:1.290.0.0.0]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:1.290.0.0.0]" but got "https://[0:1.290.0.0.0]/"
+FAIL Parsing: <https://[0:1.23.23]> against <about:blank> assert_equals: failure should set href to input expected "https://[0:1.23.23]" but got "https://[0:1.23.23]/"
+FAIL Parsing: <http://?> against <about:blank> assert_equals: failure should set href to input expected "http://?" but got "http:/?"
+FAIL Parsing: <http://#> against <about:blank> assert_equals: failure should set href to input expected "http://#" but got "http:/#"
+PASS Parsing: <http://f:4294967377/c> against <http://example.org/>
+PASS Parsing: <http://f:18446744073709551697/c> against <http://example.org/>
+PASS Parsing: <http://f:340282366920938463463374607431768211537/c> against <http://example.org/>
+FAIL Parsing: <sc://ñ> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ?x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ#x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <#x> against <sc://ñ> assert_equals: href expected "sc://%C3%B1#x" but got "sc://%C3%B1"
+FAIL Parsing: <?x> against <sc://ñ> assert_equals: href expected "sc://%C3%B1?x" but got "sc://%C3%B1"
+FAIL Parsing: <sc://?> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <sc://#> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <///> against <sc://x/> assert_equals: href expected "sc:///" but got "sc:"
+FAIL Parsing: <////> against <sc://x/> assert_equals: href expected "sc:////" but got "sc:"
+FAIL Parsing: <////x/> against <sc://x/> assert_equals: href expected "sc:////x/" but got "sc://x/"
+FAIL Parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank> assert_equals: host expected "foobar.com" but got ""
+FAIL Parsing: <telnet://user:pass@foobar.com:23/> against <about:blank> assert_equals: username expected "user" but got ""
+FAIL Parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank> assert_equals: host expected "10.10.10.10:7777" but got ""
+FAIL Parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <rsync://foo@host:911/sup> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <git://github.com/foo/bar.git> against <about:blank> assert_equals: host expected "github.com" but got ""
+FAIL Parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank> assert_equals: host expected "myserver.com:6999" but got ""
+FAIL Parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank> assert_equals: host expected "fw.example.org:9999" but got ""
+FAIL Parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank> assert_equals: host expected "localhost:389" but got ""
+FAIL Parsing: <git+https://github.com/foo/bar> against <about:blank> assert_equals: host expected "github.com" but got ""
+PASS Parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+FAIL Parsing: <non-spec:/.//> against <about:blank> assert_equals: pathname expected "//" but got "/.//"
+FAIL Parsing: <non-spec:/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/..//"
+FAIL Parsing: <non-spec:/a/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/a/..//"
+FAIL Parsing: <non-spec:/.//path> against <about:blank> assert_equals: pathname expected "//path" but got "/.//path"
+FAIL Parsing: <non-spec:/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <non-spec:/a/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/a/..//path"
+FAIL Parsing: </.//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: </..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <a/..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//p" but got "non-spec:/..//p"
+FAIL Parsing: <path> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <../path> against <non-spec:/.//p> assert_equals: href expected "non-spec:/path" but got "non-spec:/./path"
+FAIL Parsing: <non-special://%E2%80%A0/> against <about:blank> assert_equals: host expected "%E2%80%A0" but got ""
+FAIL Parsing: <non-special://H%4fSt/path> against <about:blank> assert_equals: host expected "H%4fSt" but got ""
+FAIL Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank> assert_equals: href expected "non-special://[1:2:0:0:5::]/" but got "non-special://[1:2:0:0:5:0:0:0]/"
+FAIL Parsing: <non-special://[1:2:0:0:0:0:0:3]/> against <about:blank> assert_equals: href expected "non-special://[1:2::3]/" but got "non-special://[1:2:0:0:0:0:0:3]/"
+FAIL Parsing: <non-special://[1:2::3]:80/> against <about:blank> assert_equals: host expected "[1:2::3]:80" but got ""
+FAIL Parsing: <non-special://[:80/> against <about:blank> assert_unreached: Expected URL to fail parsing Reached unreachable code
+PASS Parsing: <blob:https://example.com:443/> against <about:blank>
+PASS Parsing: <blob:d3958f5c-0777-0845-9dcf-2cb28783acaf> against <about:blank>
+PASS Parsing: <blob:> against <about:blank>
+PASS Parsing: <http://0x7f.0.0.0x7g> against <about:blank>
+PASS Parsing: <http://0X7F.0.0.0X7G> against <about:blank>
+FAIL Parsing: <http://[::127.0.0.0.1]> against <about:blank> assert_equals: failure should set href to input expected "http://[::127.0.0.0.1]" but got "http://[::127.0.0.0.1]/"
+PASS Parsing: <http://[0:1:0:1:0:1:0:1]> against <about:blank>
+PASS Parsing: <http://[1:0:1:0:1:0:1:0]> against <about:blank>
+PASS Parsing: <http://example.org/test?"> against <about:blank>
+PASS Parsing: <http://example.org/test?#> against <about:blank>
+PASS Parsing: <http://example.org/test?<> against <about:blank>
+PASS Parsing: <http://example.org/test?>> against <about:blank>
+PASS Parsing: <http://example.org/test?⌣> against <about:blank>
+PASS Parsing: <http://example.org/test?%23%23> against <about:blank>
+PASS Parsing: <http://example.org/test?%GH> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%EF> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%GH> against <about:blank>
+FAIL Parsing: <a> against <about:blank> assert_equals: failure should set href to input expected "a" but got ""
+FAIL Parsing: <a/> against <about:blank> assert_equals: failure should set href to input expected "a/" but got ""
+FAIL Parsing: <a//> against <about:blank> assert_equals: failure should set href to input expected "a//" but got ""
+FAIL Parsing: <test-a-colon.html> against <a:> assert_equals: failure should set href to input expected "test-a-colon.html" but got ""
+FAIL Parsing: <test-a-colon-b.html> against <a:b> assert_equals: failure should set href to input expected "test-a-colon-b.html" but got ""
+PASS Parsing: <test-a-colon-slash.html> against <a:/>
+FAIL Parsing: <test-a-colon-slash-slash.html> against <a://> assert_equals: href expected "a:///test-a-colon-slash-slash.html" but got ""
+PASS Parsing: <test-a-colon-slash-b.html> against <a:/b>
+FAIL Parsing: <test-a-colon-slash-slash-b.html> against <a://b> assert_equals: href expected "a://b/test-a-colon-slash-slash-b.html" but got "a://b"
+PASS Parsing: <http://example.org/test?a#b\0c> against <about:blank>
+FAIL Parsing: <non-spec://example.org/test?a#b\0c> against <about:blank> assert_equals: host expected "example.org" but got ""
+PASS Parsing: <non-spec:/test?a#b\0c> against <about:blank>
+PASS Parsing: <a1234567890-+.:foo/bar> against <http://example.com/dir/file>
+PASS Parsing: <#link> against <https://example.org/##link>
+PASS Parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Parsing: <https://user:pass[@foo/bar> against <http://example.org>
+FAIL Parsing: <foo:// !"$%&'()*+,-.;<=>@[\]^_`{|}~@host/> against <about:blank> assert_equals: href expected "foo://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/" but got "foo:// !\"$%&'()*+,-.;<=>@[\\]^_`{|}~@host/"
+FAIL Parsing: <wss:// !"$%&'()*+,-.;<=>@[]^_`{|}~@host/> against <about:blank> assert_equals: href expected "wss://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/" but got "wss://%20!%22$%&%27()*+,-.%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/"
+FAIL Parsing: <foo://joe: !"$%&'()*+,-.:;<=>@[\]^_`{|}~@host/> against <about:blank> assert_equals: href expected "foo://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/" but got "foo://joe: !\"$%&'()*+,-.:;<=>@[\\]^_`{|}~@host/"
+FAIL Parsing: <wss://joe: !"$%&'()*+,-.:;<=>@[]^_`{|}~@host/> against <about:blank> assert_equals: href expected "wss://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/" but got "wss://joe:%20!%22$%&%27()*+,-.%3A%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/"
+FAIL Parsing: <foo://!"$%&'()*+,-.;=_`{}~/> against <about:blank> assert_equals: host expected "!\"$%&'()*+,-.;=_`{}~" but got ""
+FAIL Parsing: <wss://!"$&'()*+,-.;=_`{}~/> against <about:blank> assert_equals: href expected "wss://!\"$&'()*+,-.;=_`{}~/" but got "wss://%21%22%24%26%27%28%29%2A+%2C-.%3B%3D_%60%7B%7D%7E/"
+FAIL Parsing: <foo://host/ !"$%&'()*+,-./:;<=>@[\]^_`{|}~> against <about:blank> assert_equals: href expected "foo://host/%20!%22$%&'()*+,-./:;%3C=%3E@[\\]^_%60%7B|%7D~" but got "foo://host/ !\"$%&'()*+,-./:;<=>@[\\]^_`{|}~"
+FAIL Parsing: <wss://host/ !"$%&'()*+,-./:;<=>@[\]^_`{|}~> against <about:blank> assert_equals: href expected "wss://host/%20!%22$%&'()*+,-./:;%3C=%3E@[/]^_%60%7B|%7D~" but got "wss://host/%20!%22$%&'()*+,-./:;%3C=%3E@[/]%5E_%60%7B%7C%7D~"
+FAIL Parsing: <foo://host/dir/? !"$%&'()*+,-./:;<=>?@[\]^_`{|}~> against <about:blank> assert_equals: href expected "foo://host/dir/?%20!%22$%&'()*+,-./:;%3C=%3E?@[\\]^_`{|}~" but got "foo://host/dir/?%20!%22$%&%27()*+,-./:;%3C=%3E?@[\\]^_`{|}~"
+PASS Parsing: <wss://host/dir/? !"$%&'()*+,-./:;<=>?@[\]^_`{|}~> against <about:blank>
+FAIL Parsing: <foo://host/dir/# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~> against <about:blank> assert_equals: host expected "host" but got ""
+PASS Parsing: <wss://host/dir/# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~> against <about:blank>
+FAIL Parsing: <abc:rootless> against <abc://host/path> assert_equals: href expected "abc:rootless" but got "abc://host/rootless"
+FAIL Parsing: <abc:rootless> against <abc:/path> assert_equals: href expected "abc:rootless" but got "abc:/rootless"
+PASS Parsing: <abc:rootless> against <abc:path>
+FAIL Parsing: <abc:/rooted> against <abc://host/path> assert_equals: href expected "abc:/rooted" but got "abc://host/rooted"
+FAIL Parsing: <http://1.2.3.4.5> against <http://other.com/> assert_equals: failure should set href to input expected "http://1.2.3.4.5" but got "http://1.2.3.4.5/"
+FAIL Parsing: <http://1.2.3.4.5.> against <http://other.com/> assert_equals: failure should set href to input expected "http://1.2.3.4.5." but got "http://1.2.3.4.5./"
+PASS Parsing: <http://0..0x300/> against <about:blank>
+PASS Parsing: <http://0..0x300./> against <about:blank>
+FAIL Parsing: <http://256.256.256.256.256> against <http://other.com/> assert_equals: failure should set href to input expected "http://256.256.256.256.256" but got "http://256.256.256.256.256/"
+FAIL Parsing: <http://256.256.256.256.256.> against <http://other.com/> assert_equals: failure should set href to input expected "http://256.256.256.256.256." but got "http://256.256.256.256.256./"
+FAIL Parsing: <http://1.2.3.08> against <about:blank> assert_equals: failure should set href to input expected "http://1.2.3.08" but got "http://1.2.3.08/"
+FAIL Parsing: <http://1.2.3.08.> against <about:blank> assert_equals: failure should set href to input expected "http://1.2.3.08." but got "http://1.2.3.08./"
+FAIL Parsing: <http://1.2.3.09> against <about:blank> assert_equals: failure should set href to input expected "http://1.2.3.09" but got "http://1.2.3.09/"
+FAIL Parsing: <http://09.2.3.4> against <about:blank> assert_equals: failure should set href to input expected "http://09.2.3.4" but got "http://09.2.3.4/"
+FAIL Parsing: <http://09.2.3.4.> against <about:blank> assert_equals: failure should set href to input expected "http://09.2.3.4." but got "http://09.2.3.4./"
+FAIL Parsing: <http://01.2.3.4.5> against <about:blank> assert_equals: failure should set href to input expected "http://01.2.3.4.5" but got "http://01.2.3.4.5/"
+FAIL Parsing: <http://01.2.3.4.5.> against <about:blank> assert_equals: failure should set href to input expected "http://01.2.3.4.5." but got "http://01.2.3.4.5./"
+FAIL Parsing: <http://0x100.2.3.4> against <about:blank> assert_equals: failure should set href to input expected "http://0x100.2.3.4" but got "http://0x100.2.3.4/"
+FAIL Parsing: <http://0x100.2.3.4.> against <about:blank> assert_equals: failure should set href to input expected "http://0x100.2.3.4." but got "http://0x100.2.3.4./"
+FAIL Parsing: <http://0x1.2.3.4.5> against <about:blank> assert_equals: failure should set href to input expected "http://0x1.2.3.4.5" but got "http://0x1.2.3.4.5/"
+FAIL Parsing: <http://0x1.2.3.4.5.> against <about:blank> assert_equals: failure should set href to input expected "http://0x1.2.3.4.5." but got "http://0x1.2.3.4.5./"
+FAIL Parsing: <http://foo.1.2.3.4> against <about:blank> assert_equals: failure should set href to input expected "http://foo.1.2.3.4" but got "http://foo.1.2.3.4/"
+FAIL Parsing: <http://foo.1.2.3.4.> against <about:blank> assert_equals: failure should set href to input expected "http://foo.1.2.3.4." but got "http://foo.1.2.3.4./"
+FAIL Parsing: <http://foo.2.3.4> against <about:blank> assert_equals: failure should set href to input expected "http://foo.2.3.4" but got "http://foo.2.3.4/"
+FAIL Parsing: <http://foo.2.3.4.> against <about:blank> assert_equals: failure should set href to input expected "http://foo.2.3.4." but got "http://foo.2.3.4./"
+FAIL Parsing: <http://foo.09> against <about:blank> assert_equals: failure should set href to input expected "http://foo.09" but got "http://foo.09/"
+FAIL Parsing: <http://foo.09.> against <about:blank> assert_equals: failure should set href to input expected "http://foo.09." but got "http://foo.09./"
+FAIL Parsing: <http://foo.0x4> against <about:blank> assert_equals: failure should set href to input expected "http://foo.0x4" but got "http://foo.0x4/"
+FAIL Parsing: <http://foo.0x4.> against <about:blank> assert_equals: failure should set href to input expected "http://foo.0x4." but got "http://foo.0x4./"
+PASS Parsing: <http://foo.09..> against <about:blank>
+PASS Parsing: <http://0999999999999999999/> against <about:blank>
+FAIL Parsing: <http://foo.0x> against <about:blank> assert_equals: failure should set href to input expected "http://foo.0x" but got "http://foo.0x/"
+FAIL Parsing: <http://foo.0XFfFfFfFfFfFfFfFfFfAcE123> against <about:blank> assert_equals: failure should set href to input expected "http://foo.0XFfFfFfFfFfFfFfFfFfAcE123" but got "http://foo.0xfffffffffffffffffface123/"
+FAIL Parsing: <http://💩.123/> against <about:blank> assert_equals: failure should set href to input expected "http://💩.123/" but got "http://xn--ls8h.123/"
+FAIL Parsing: <https://\0y> against <about:blank> assert_equals: failure should set href to input expected "https://\0y" but got "https://%00y/"
+FAIL Parsing: <https://x/\0y> against <about:blank> assert_equals: protocol expected "https:" but got ":"
+PASS Parsing: <https://x/?\0y> against <about:blank>
+PASS Parsing: <https://x/?#\0y> against <about:blank>
+FAIL Parsing: <https://￿y> against <about:blank> assert_equals: failure should set href to input expected "https://\uffffy" but got "https://%EF%BF%BDy/"
+FAIL Parsing: <https://x/￿y> against <about:blank> assert_equals: href expected "https://x/%EF%BF%BFy" but got "https://x/%EF%BF%BDy"
+FAIL Parsing: <https://x/?￿y> against <about:blank> assert_equals: href expected "https://x/?%EF%BF%BFy" but got "https://x/?%EF%BF%BDy"
+FAIL Parsing: <https://x/?#￿y> against <about:blank> assert_equals: href expected "https://x/?#%EF%BF%BFy" but got "https://x/?#%EF%BF%BDy"
+PASS Parsing: <non-special:\0y> against <about:blank>
+PASS Parsing: <non-special:x/\0y> against <about:blank>
+PASS Parsing: <non-special:x/?\0y> against <about:blank>
+PASS Parsing: <non-special:x/?#\0y> against <about:blank>
+FAIL Parsing: <non-special:￿y> against <about:blank> assert_equals: href expected "non-special:%EF%BF%BFy" but got "non-special:%EF%BF%BDy"
+FAIL Parsing: <non-special:x/￿y> against <about:blank> assert_equals: href expected "non-special:x/%EF%BF%BFy" but got "non-special:x/%EF%BF%BDy"
+FAIL Parsing: <non-special:x/?￿y> against <about:blank> assert_equals: href expected "non-special:x/?%EF%BF%BFy" but got "non-special:x/?%EF%BF%BDy"
+FAIL Parsing: <non-special:x/?#￿y> against <about:blank> assert_equals: href expected "non-special:x/?#%EF%BF%BFy" but got "non-special:x/?#%EF%BF%BDy"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.ini b/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.ini
deleted file mode 100644
index 7feb5bab9..0000000
--- a/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[reporting-api-report-to-overrides-report-uri-1.https.sub.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): TIMEOUT
diff --git a/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html.ini b/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html.ini
index 4025123..5d8949c 100644
--- a/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html.ini
@@ -1,4 +1,6 @@
 [reporting-api-sends-reports-on-violation.https.sub.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [Violation report status OK.]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/wpt_internal/encoding/utf-round-trip.window.js.ini b/third_party/blink/web_tests/wpt_internal/encoding/utf-round-trip.window.js.ini
deleted file mode 100644
index cf532bf3..0000000
--- a/third_party/blink/web_tests/wpt_internal/encoding/utf-round-trip.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[utf-round-trip.window.html]
-  expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): CRASH
diff --git a/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/force-in-order/async-script.html.ini b/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/force-in-order/async-script.html.ini
deleted file mode 100644
index d1ea5cac..0000000
--- a/third_party/blink/web_tests/wpt_internal/in-order-script-scheduling/force-in-order/async-script.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[async-script.html?reload]
-  expected:
-    if product == "chrome": ERROR
-
-[async-script.html]
diff --git a/third_party/blink/web_tests/wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.js.ini b/third_party/blink/web_tests/wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.js.ini
index c9571f55..e2b9c7a 100644
--- a/third_party/blink/web_tests/wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.js.ini
+++ b/third_party/blink/web_tests/wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.js.ini
@@ -1,10 +1,6 @@
 [estimate-usage-details-filesystem.https.tentative.any.html]
-  [estimate() usage details reflects increase in fileSystem after write  operation]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
 
 [estimate-usage-details-filesystem.https.tentative.any.worker.html]
   [estimate() usage details reflects increase in fileSystem after write  operation]
     expected:
-      if os == "win": [PASS, FAIL]
+      if (os == "linux") and (product == "chrome"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/reload-crash.html.ini b/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/reload-crash.html.ini
deleted file mode 100644
index 19cf3a6..0000000
--- a/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/reload-crash.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[reload-crash.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml
index 3925518e..d21da244 100644
--- a/tools/metrics/histograms/metadata/v8/histograms.xml
+++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -1358,9 +1358,9 @@
 </histogram>
 
 <histogram name="V8.RegExpBacktracks" units="backtracks"
-    expires_after="2023-01-01">
+    expires_after="2025-01-01">
   <owner>jgruber@chromium.org</owner>
-  <owner>mvstanton@chromium.org</owner>
+  <owner>pthier@chromium.org</owner>
   <summary>
     The number of backtracks performed in a single regexp execution.
   </summary>